diff --git a/documentation/documentation.gradle b/documentation/documentation.gradle index dd6e19eab50b..e1f7a825d752 100644 --- a/documentation/documentation.gradle +++ b/documentation/documentation.gradle @@ -127,7 +127,6 @@ dependencies { reportAggregation project( ':hibernate-agroal' ) reportAggregation project( ':hibernate-c3p0' ) reportAggregation project( ':hibernate-core' ) - reportAggregation project(':hibernate-envers') reportAggregation project(':hibernate-graalvm') reportAggregation project(':hibernate-hikaricp') reportAggregation project(':hibernate-jcache') @@ -142,9 +141,6 @@ dependencies { core project( ':hibernate-core' ) javadocSources project( path: ':hibernate-core', configuration: 'javadocSources' ) - envers project( ':hibernate-envers' ) - javadocSources project( path: ':hibernate-envers', configuration: 'javadocSources' ) - testing project( ':hibernate-testing' ) spatial project( ':hibernate-spatial' ) diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/Envers.adoc b/documentation/src/main/asciidoc/userguide/chapters/envers/Envers.adoc deleted file mode 100644 index a758c20db67b..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/Envers.adoc +++ /dev/null @@ -1,1659 +0,0 @@ -[[envers]] -== Envers -:root-project-dir: ../../../../../../.. -:envers-project-dir: {root-project-dir}/hibernate-envers -:example-dir-envers: {envers-project-dir}/src/test/java/org/hibernate/orm/test/envers -:extrasdir: extras - -[[envers-basics]] -=== Basics - -To audit changes that are performed on an entity, you only need two things: - -* the `hibernate-envers` jar on the classpath, -* an `@Audited` annotation on the entity. - -[IMPORTANT] -==== -Unlike in previous versions, you no longer need to specify listeners in the Hibernate configuration file. -Just putting the Envers jar on the classpath is enough because listeners will be registered automatically. -==== - -And that's all. -You can create, modify and delete the entities as always. - -[IMPORTANT] -==== -The use of Jakarta Persistence's `CriteriaUpdate` and `CriteriaDelete` bulk operations are not currently supported by Envers -due to how an entity's lifecycle events are dispatched. Such operations should be avoided as they're not -captured by Envers and lead to incomplete audit history. -==== - -If you look at the generated schema for your entities, or at the data persisted by Hibernate, you will notice that there are no changes. -However, for each audited entity, a new table is introduced - `entity_table_AUD`, which stores the historical data, whenever you commit a transaction. - -[NOTE] -==== -Envers automatically creates audit tables if `hibernate.hbm2ddl.auto` option is set to `create`, `create-drop` or `update`. -Appropriate DDL statements can also be generated with an Ant task in <>. -==== - -Considering we have a `Customer` entity, when annotating it with the `Audited` annotation, -Hibernate is going to generate the following tables using the `hibernate.hbm2ddl.auto` schema tool: - -[[envers-audited-mapping-example]] -.Basic Envers entity mapping -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-mapping-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-mapping-example.sql[] ----- -==== - -Instead of annotating the whole class and auditing all properties, you can annotate only some persistent properties with `@Audited`. -This will cause only these properties to be audited. - -Now, considering the previous `Customer` entity, -let's see how Envers auditing works when inserting, updating, and deleting the entity in question. - -[[envers-audited-insert-example]] -.Auditing the entity `INSERT` operation -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-insert-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-insert-example.sql[] ----- -==== - -[[envers-audited-update-example]] -.Auditing the entity `UPDATE` operation -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-update-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-update-example.sql[] ----- -==== - -[[envers-audited-delete-example]] -.Auditing the entity `DELETE` operation -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-delete-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-delete-example.sql[] ----- -==== - -The `REVTYPE` column value is taken from the https://docs.jboss.org/hibernate/orm/{majorMinorVersion}/javadocs/org/hibernate/envers/RevisionType.html[`RevisionType`] Enum. - -[[envers-revtype-column]] -.`REVTYPE` column values -[width="100%",cols="20%,20%,60%",] -|================================= -|Database column value |Associated `RevisionType` Enum value |Description -|0 | `ADD` |A database table row was inserted. -|1 | `MOD` |A database table row was updated. -|2 | `DEL` |A database table row was deleted. -|================================= - -The audit (history) of an entity can be accessed using the `AuditReader` interface, which can be obtained by having an open `EntityManager` or `Session` via the `AuditReaderFactory`. - -[[envers-audited-revisions-example]] -.Getting a list of revisions for the `Customer` entity -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-revisions-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-revisions-example.sql[] ----- -==== - -Using the previously fetched revisions, we can now inspect the state of the `Customer` entity at that particular revision: - -[[envers-audited-rev1-example]] -.Getting the first revision for the `Customer` entity -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-rev1-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-rev1-example.sql[] ----- -==== - -When executing the aforementioned SQL query, there are two parameters: - -revision_number:: -The first parameter marks the revision number we are interested in or the latest one that exists up to this particular revision. -revision_type:: -The second parameter specifies that we are not interested in `DEL` `RevisionType` so that deleted entries are filtered out. - -The same goes for the second revision associated with the `UPDATE` statement. - -[[envers-audited-rev2-example]] -.Getting the second revision for the `Customer` entity -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-rev2-example] ----- -==== - -For the deleted entity revision, Envers throws a `NoResultException` since the entity was no longer valid at that revision. - -[[envers-audited-rev3-example]] -.Getting the third revision for the `Customer` entity -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-rev3-example] ----- -==== - -You can use the -https://docs.jboss.org/hibernate/orm/{majorMinorVersion}/javadocs/org/hibernate/envers/query/AuditQueryCreator.html#forEntitiesAtRevision-java.lang.Class-java.lang.String-java.lang.Number-boolean-[`forEntitiesAtRevision(Class cls, String entityName, Number revision, boolean includeDeletions)`] -method to get the deleted entity revision so that, instead of a `NoResultException`, -all attributes, except for the entity identifier, are going to be `null`. - -[[envers-audited-rev4-example]] -.Getting the third revision for the `Customer` entity without getting a `NoResultException` -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/DefaultAuditTest.java[tags=envers-audited-rev4-example] ----- -==== - -See the https://docs.jboss.org/hibernate/orm/{majorMinorVersion}/javadocs/org/hibernate/envers/AuditReader.html[Javadocs] for details on other functionality offered. - -[[envers-configuration]] -=== Configuration Properties - -It is possible to configure various aspects of Hibernate Envers behavior, such as table names, etc. - -`*org.hibernate.envers.audit_table_prefix*`:: -String that will be prepended to the name of an audited entity to create the name of the entity and that will hold audit information. - -`*org.hibernate.envers.audit_table_suffix`* (default: `_AUD`):: -String that will be appended to the name of an audited entity to create the name of the entity and that will hold audit information. -+ -If you audit an entity with a table name Person, in the default setting Envers will generate a `Person_AUD` table to store historical data. - -`*org.hibernate.envers.revision_field_name*` (default: `REV`):: -Name of a field in the audit entity that will hold the revision number. - -`*org.hibernate.envers.revision_type_field_name*` (default: `REVTYPE` ):: -Name of a field in the audit entity that will hold the type of the revision (currently, this can be: `add`, `mod`, `del`). - -`*org.hibernate.envers.revision_on_collection_change*` (default: `true` ):: -Should a revision be generated when a not-owned relation field changes (this can be either a collection in a one-to-many relation or the field using `mappedBy` attribute in a one-to-one relation). - -`*org.hibernate.envers.do_not_audit_optimistic_locking_field*` (default: `true` ):: -When true, properties to be used for optimistic locking, annotated with `@Version`, will not be automatically audited (their history won't be stored; it normally doesn't make sense to store it). - -`*org.hibernate.envers.store_data_at_delete*` (default: `false` ):: -Should the entity data be stored in the revision when the entity is deleted (instead of only storing the id and all other properties as null). -+ -This is not normally needed, as the data is present in the last-but-one revision. -Sometimes, however, it is easier and more efficient to access it in the last revision (then the data that the entity contained before deletion is stored twice). - -`*org.hibernate.envers.default_schema*` (default: `null` - same schema as the table being audited):: -The default schema name that should be used for audit tables. -+ -Can be overridden using the `@AuditTable( schema = "..." )` annotation. -+ -If not present, the schema will be the same as the schema of the table being audited. - -`*org.hibernate.envers.default_catalog*` (default: `null` - same catalog as the table being audited):: -The default catalog name that should be used for audit tables. -+ -Can be overridden using the `@AuditTable( catalog = "..." )` annotation. -+ -If not present, the catalog will be the same as the catalog of the normal tables. - -`*org.hibernate.envers.audit_strategy*`(default: `org.hibernate.envers.strategy.DefaultAuditStrategy` ):: -The audit strategy that should be used when persisting audit data. -The default stores only the revision, at which an entity was modified. -+ -An alternative, the `org.hibernate.envers.strategy.ValidityAuditStrategy` stores both the start revision and the end revision. -Together these define when an audit row was valid, hence the name ValidityAuditStrategy. - -`*org.hibernate.envers.audit_strategy_validity_end_rev_field_name*` (default: `REVEND`):: -The column name that will hold the end revision number in audit entities. -This property is only valid if the validity audit strategy is used. - -`*org.hibernate.envers.audit_strategy_validity_store_revend_timestamp*`(default: `false` ):: -Should the timestamp of the end revision be stored, until which the data was valid, in addition to the end revision itself. -This is useful to be able to purge old Audit records out of a relational database by using table partitioning. -+ -Partitioning requires a column that exists within the table. -This property is only evaluated if the `ValidityAuditStrategy` is used. - -`*org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name*`(default: `REVEND_TSTMP` ):: -Column name of the timestamp of the end revision until which the data was valid. -Only used if the `ValidityAuditStrategy` is used, and `org.hibernate.envers.audit_strategy_validity_store_revend_timestamp` evaluates to true. - -`*org.hibernate.envers.audit_strategy_validity_revend_timestamp_numeric*`(default: `false` ):: -Boolean flag that controls whether the revision end timestamp field is treated as a `Long` data type. -Only used if the `ValidityAuditStrategy` is used, and `org.hibernate.envers.audit_strategy_validity_store_revend_timestamp` evaluates to true. - -`*org.hibernate.envers.audit_strategy_validity_revend_timestamp_legacy_placement*`(default: `true` ):: -Boolean flag that controls whether the revision end timestamp field is propagated to the joined subclass audit tables. -Only used if the `ValidityAuditStrategy` is used, and `org.hibernate.envers.audit_strategy_validity_store_revend_timestamp` evaluates to true. -+ -When set to `true`, the legacy mapping behavior is used such that the revision end timestamp is only maintained in the root entity audit table. -When set to `false`, the revision end timestamp is maintained in both the root entity and joined subclass audit tables; allowing the potential to apply database partitioning to the joined subclass tables just like the root entity audit tables. - -[[envers-config-native-id]] -`*org.hibernate.envers.use_revision_entity_with_native_id*` (default: `true` ):: -Boolean flag that determines the strategy of revision number generation. -Default implementation of revision entity uses native identifier generator. -+ -If the current database engine does not support identity columns, users are advised to set this property to false. -+ -In this case revision numbers are created by a preconfigured `org.hibernate.id.enhanced.SequenceStyleGenerator`. - -[[envers-config-track-entities]] -`*org.hibernate.envers.track_entities_changed_in_revision*` (default: `false` ):: -Should entity types, that have been modified during each revision, be tracked. -The default implementation creates `REVCHANGES` table that stores entity names of modified persistent objects. -Single record encapsulates the revision identifier (foreign key to `REVINFO` table) and a string value. -For more information, refer to <> and <>. - -`*org.hibernate.envers.global_with_modified_flag*` (default: `false`, can be individually overridden with `@Audited( withModifiedFlag = true )` ):: -Should property modification flags be stored for all audited entities and all properties. -+ -When set to true, for all properties an additional boolean column in the audit tables will be created, filled with information if the given property changed in the given revision. -+ -When set to false, such column can be added to selected entities or properties using the `@Audited` annotation. -+ -For more information, refer to <> and <>. - -`*org.hibernate.envers.modified_flag_suffix*` (default: `_MOD` ):: -The suffix for columns storing "Modified Flags". -+ -For example, a property called "age", will by default get modified flag with column name "age_MOD". - -`*org.hibernate.envers.modified_column_naming_strategy*` (default: `org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy` ):: -The naming strategy to be used for modified flag columns in the audit metadata. - -`*org.hibernate.envers.embeddable_set_ordinal_field_name*` (default: `SETORDINAL` ):: -Name of column used for storing ordinal of the change in sets of embeddable elements. - -`*org.hibernate.envers.cascade_delete_revision*` (default: `false` ):: -While deleting revision entry, remove data of associated audited entities. Requires database support for cascade row removal. - -`*org.hibernate.envers.allow_identifier_reuse*` (default: `false` ):: -Guarantees proper validity audit strategy behavior when application reuses identifiers of deleted entities. Exactly one row with `null` end date exists for each identifier. - -`*org.hibernate.envers.original_id_prop_name*` (default: `originalId` ):: -Specifies the composite-id key property name used by the audit table mappings. - -`*org.hibernate.envers.find_by_revision_exact_match*` (default: `false` ):: -Specifies whether or not `AuditReader#find` methods which accept a revision-number argument are to find results based on fuzzy-match or exact-match behavior. -+ -The old (legacy) behavior has always been to perform a fuzzy-match where these methods would return a match if any revision existed for the primary-key with a revision-number less-than or equal-to the revision method argument. -This behavior is great when you want to find the snapshot of a non-related entity based on another entity's revision number. -+ -The new (optional) behavior when this option is enabled forces the query to perform an exact-match instead. -In order for these methods to return a non-`null` value, a revision entry must exist for the entity with the specified primary key and revision number; otherwise the result will be `null`. - -`*org.hibernate.envers.global_relation_not_found_legacy_flag*` (default: `true` ):: -Globally defines whether legacy relation not-found behavior should be used or not. -+ -By specifying `true`, any `EntityNotFoundException` errors will be thrown unless the `Audited` annotation explicitly specifies to _ignore_ not-found relations. -By specifying `false`, any `EntityNotFoundException` will be be ignored unless the `Audited` annotation explicitly specifies to _raise the error_ rather than silently ignore not-found relations. - -[IMPORTANT] -==== -The following configuration options have been added recently and should be regarded as experimental: - -. `org.hibernate.envers.track_entities_changed_in_revision` -. `org.hibernate.envers.modified_flag_suffix` -. `org.hibernate.envers.modified_column_naming_strategy` -. `org.hibernate.envers.original_id_prop_name` -. `org.hibernate.envers.find_by_revision_exact_match` -. `org.hibernate.envers.audit_strategy_validity_revend_timestamp_numeric` -. `org.hibernate.envers.global_relation_not_found_legacy_flag` -==== - -[[envers-additional-mappings]] -=== Additional mapping annotations - -The name of the audit table can be set on a per-entity basis, using the `@AuditTable` annotation. -It may be tedious to add this annotation to every audited entity, so if possible, it's better to use a prefix/suffix. - -If you have a mapping with secondary tables, audit tables for them will be generated in the same way (by adding the prefix and suffix). -If you wish to overwrite this behavior, you can use the `@SecondaryAuditTable` and `@SecondaryAuditTables` annotations. - -If you have a mapping with collection tables, the audit table for them will be generated in the same way (by using the prefix and suffix). -If you wish to overwrite this behavior, you can use the `@CollectionAuditTable` annotations. - -If you'd like to override auditing behavior of some fields/properties inherited from `@MappedSuperclass` or in an embedded component, -you can apply the `@AuditOverride` annotation on the subtype or usage site of the component. - -If you want to audit a relation mapped with `@OneToMany` and `@JoinColumn`, -please see <> for a description of the additional `@AuditJoinTable` annotation that you'll probably want to use. - -If you want to audit a relation, where the target entity is not audited (that is the case for example with dictionary-like entities, which don't change and don't have to be audited), -just annotate it with `@Audited( targetAuditMode = RelationTargetAuditMode.NOT_AUDITED )`. -Then, while reading historic versions of your entity, the relation will always point to the "current" related entity. -By default Envers throws `jakarta.persistence.EntityNotFoundException` when "current" entity does not exist in the database. -Apply `@NotFound( action = NotFoundAction.IGNORE )` annotation to silence the exception and assign null value instead. -The hereby solution causes implicit eager loading of to-one relations. - -If you'd like to audit properties of a superclass of an entity, which are not explicitly audited (they don't have the `@Audited` annotation on any properties or on the class), -you can set the `@AuditOverride( forClass = SomeEntity.class, isAudited = true/false )` annotation. - -[NOTE] -==== -The `@Audited` annotation also features an `auditParents` attribute but it's now deprecated in favor of `@AuditOverride`. -==== - -[[envers-audit-strategy]] -=== Choosing an audit strategy - -After the basic configuration, it is important to choose the audit strategy that will be used to persist and retrieve audit information. -There is a trade-off between the performance of persisting and the performance of querying the audit information. -Currently, there are two audit strategies. - -. The default audit strategy persists the audit data together with a start revision. -For each row inserted, updated or deleted in an audited table, one or more rows are inserted in the audit tables, together with the start revision of its validity. -Rows in the audit tables are never updated after insertion. -Queries of audit information use subqueries to select the applicable rows in the audit tables. -+ -IMPORTANT: These subqueries are notoriously slow and difficult to index. - -. The alternative is a validity audit strategy. -This strategy stores the start-revision and the end-revision of audit information. -For each row inserted, updated or deleted in an audited table, one or more rows are inserted in the audit tables, together with the start revision of its validity. -But at the same time, the end-revision field of the previous audit rows (if available) is set to this revision. -Queries on the audit information can then use 'between start and end revision' instead of subqueries as used by the default audit strategy. -+ -The consequence of this strategy is that persisting audit information will be a bit slower because of the extra updates involved, -but retrieving audit information will be a lot faster. -+ -IMPORTANT: This can be improved even further by adding extra indexes. - -[[envers-audit-ValidityAuditStrategy]] -==== Configuring the `ValidityAuditStrategy` - -To better visualize how the `ValidityAuditStrategy` works, consider the following exercise where -we replay the previous audit logging example for the `Customer` entity. - -First, you need to configure the `ValidityAuditStrategy`: - -[[envers-audited-validity-configuration-example]] -.Configuring the `ValidityAuditStrategy` -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/ValidityStrategyAuditTest.java[tags=envers-audited-validity-configuration-example] ----- -==== - -If, you're using the `persistence.xml` configuration file, -then the mapping will look as follows: - -[source, XML, indent=0] ----- - ----- - -Once you configured the `ValidityAuditStrategy`, the following schema is going to be automatically generated: - -[[envers-audited-validity-mapping-example]] -.Envers schema for the `ValidityAuditStrategy` -==== -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-validity-mapping-example.sql[] ----- -==== - -As you can see, the `REVEND` column is added as well as its foreign key to the `REVINFO` table. - -When rerunning the previous `Customer` audit log queries against the `ValidityAuditStrategy`, -we get the following results: - -[[envers-audited-validity-rev1-example]] -.Getting the first revision for the `Customer` entity -==== -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-audited-validity-rev1-example.sql[] ----- -==== - -[NOTE] -==== -Compared to the default strategy, the `ValidityAuditStrategy` generates simpler queries that can render better SQL execution plans. -==== - -[[envers-revisionlog]] -=== Revision Log - -When Envers starts a new revision, it creates a new revision entity which stores information about the revision. - -By default, that includes just: - -revision number:: -An integral value (`int/Integer` or `long/Long`). Essentially, the primary key of the revision. -+ -[WARNING] -==== -A revision number value should **always** be increasing and never overflows. - -The default implementations provided by Envers use an `int` data type which has an upper bounds of `Integer.MAX_VALUE`. -It is critical that users consider whether this upper bounds is feasible for your application. If a large range is needed, consider using a custom revision entity mapping using a `long` data type. - -In the event that the revision number reaches its upper bounds wrapping around becoming negative, an `AuditException` will be thrown causing the current transaction to be rolled back. -This guarantees that the audit history remains in a valid state that can be queried by the Envers Query API. -==== - -revision timestamp:: -Either a `long/Long` or `java.util.Date` value representing the instant at which the revision was made. -When using a `java.util.Date`, instead of a `long/Long` for the revision timestamp, take care not to store it to a column data type which will lose precision. - -Envers handles this information as an entity. - -[[envers-default-revision-entity]] -==== Default Revision Entity - -By default, Envers uses its own internal class to act as the entity, mapped to the `REVINFO` table. -The entity type that's used depends on a couple configuration properties: <> and <>. Here is a table showing the entity type used based on the configuration values: -[cols="1,1,1"] -|=== -| -| native-id `false` -| native-id `true` - -| track-entities `false` -| `org.hibernate.envers.DefaultRevisionEntity` -| `org.hibernate.envers.enhanced.SequenceIdRevisionEntity` - -| track-entities `true` -| `org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity` -| `org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionEntity` -|=== - -[[envers-custom-revision-entity]] -==== Custom Revision Entity - -You can also supply your own approach to collecting this information which might be useful to capture additional details such as who made a change -or the IP address from which the request came. -There are two things you need to make this work: - -. First, you will need to tell Envers about the entity you wish to use. -Your entity must use the `@org.hibernate.envers.RevisionEntity` annotation. -It must define the two attributes described above annotated with `@org.hibernate.envers.RevisionNumber` and `@org.hibernate.envers.RevisionTimestamp`, respectively. -You can extend from any of the revision mapped superclass types, if you wish, to inherit all these required behaviors: - - org.hibernate.envers.RevisionMapping - org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping - org.hibernate.envers.enhanced.SequenceIdRevisionMapping - org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionMapping - -+ -Simply add the custom revision entity as you do your normal entities and Envers will *find it*. -+ -To understand which mapping you should extend based on configuration see the <> paragraph. -+ -NOTE: It is an error for there to be multiple entities marked as `@org.hibernate.envers.RevisionEntity`. - -. Second, you need to tell Envers how to create instances of your revision entity which is handled by the -https://docs.jboss.org/hibernate/orm/{majorMinorVersion}/javadocs/org/hibernate/envers/RevisionListener.html#newRevision-java.lang.Object-[`newRevision( Object revisionEntity )`] -method of the `org.hibernate.envers.RevisionListener` interface. -+ -You tell Envers your custom `org.hibernate.envers.RevisionListener` implementation to use by specifying it on the `@org.hibernate.envers.RevisionEntity` annotation, using the value attribute. -If your `RevisionListener` class is inaccessible from `@RevisionEntity` (e.g. it exists in a different module), -set `org.hibernate.envers.revision_listener` property to its fully qualified class name. -Class name defined by the configuration parameter overrides the revision entity's value attribute. - -Considering we have a `CurrentUser` utility which stores the currently logged user: - -[[envers-revisionlog-CurrentUser-example]] -.`CurrentUser` utility -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/CustomRevisionEntityTest.java[tags=envers-revisionlog-CurrentUser-example] ----- -==== - -Now, we need to provide a custom `@RevisionEntity` to store the currently logged user - -[[envers-revisionlog-RevisionEntity-example]] -.Custom `@RevisionEntity` example -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/CustomRevisionEntityTest.java[tags=envers-revisionlog-RevisionEntity-example] ----- -==== - -With the custom `RevisionEntity` implementation in place, -we only need to provide the `RevisionEntity` implementation which acts as a factory -of `RevisionEntity` instances. - -[[envers-revisionlog-RevisionListener-example]] -.Custom `@RevisionListener` example -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/CustomRevisionEntityTest.java[tags=envers-revisionlog-RevisionListener-example] ----- -==== - -When generating the database schema, Envers creates the following `RevisionEntity` table: - -[[envers-revisionlog-custom-revision-entity-table-example]] -.Auto-generated `RevisionEntity` Envers table -==== -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-revisionlog-custom-revision-entity-table-example.sql[] ----- -==== - -You can see the `username` column in place. - -Now, when inserting a `Customer` entity, Envers generates the following statements: - -[[envers-revisionlog-RevisionEntity-persist-example]] -.Auditing using the custom `@RevisionEntity` instance -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/CustomRevisionEntityTest.java[tags=envers-revisionlog-RevisionEntity-persist-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-revisionlog-RevisionEntity-persist-example.sql[] ----- -==== - -As demonstrated by the example above, the username is properly set and propagated to the `CUSTOM_REV_INFO` table. - -[WARNING] -==== -**This strategy is deprecated since version 5.2. The alternative is to use dependency injection offered as of version 5.3.** - -An alternative method to using the `org.hibernate.envers.RevisionListener` is to instead call the -[line-through]#https://docs.jboss.org/hibernate/orm/{majorMinorVersion}/javadocs/org/hibernate/envers/AuditReader.html#getCurrentRevision-java.lang.Class-boolean-[`getCurrentRevision( Class revisionEntityClass, boolean persist )`]# -method of the `org.hibernate.envers.AuditReader` interface to obtain the current revision, -and fill it with desired information. - -The method accepts a `persist` parameter indicating whether the revision entity should be persisted prior to returning from this method: - -`true`:: ensures that the returned entity has access to its identifier value (revision number), but the revision entity will be persisted regardless of whether there are any audited entities changed. -`false`:: means that the revision number will be `null`, but the revision entity will be persisted only if some audited entities have changed. -==== - -[NOTE] -==== -As of Hibernate Envers 5.3, dependency injection is now supported for a `RevisionListener`. - -This feature is up to the various dependency frameworks, such as CDI and Spring, to supply the -necessary implementation during Hibernate ORM bootstrap to support injection. If no qualifying -implementation is supplied, the `RevisionListener` will be constructed without injection. -==== - -[[envers-tracking-modified-entities-revchanges]] -=== Tracking entity names modified during revisions - -By default, entity types that have been changed in each revision are not being tracked. -This implies the necessity to query all tables storing audited data in order to retrieve changes made during the specified revision. -Envers provides a simple mechanism that creates `REVCHANGES` table which stores entity names of modified persistent objects. -Single record encapsulates the revision identifier (foreign key to `REVINFO` table) and a string value. - -Tracking of modified entity names can be enabled in three different ways: - -. Set `org.hibernate.envers.track_entities_changed_in_revision` parameter to `true`. - In this case `org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity` will be implicitly used as the revision log entity. -. Create a custom revision entity that extends `org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity` class. -+ -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditDefaultTrackingTest.java[tags=envers-tracking-modified-entities-revchanges-example] ----- -+ -. Mark an appropriate field of a custom revision entity with `@org.hibernate.envers.ModifiedEntityNames` annotation. - The property is required to be of `Set` type. -+ -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTest.java[tags=envers-tracking-modified-entities-revchanges-example] ----- - -Considering we have a `Customer` entity illustrated by the following example: - -[[envers-tracking-modified-entities-revchanges-before-rename-example]] -.`Customer` entity before renaming -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTest.java[tags=envers-tracking-modified-entities-revchanges-before-rename-example] ----- -==== - -If the `Customer` entity class name is changed to `ApplicationCustomer`, -Envers is going to insert a new record in the `REVCHANGES` table with the previous entity class name: - -[[envers-tracking-modified-entities-revchanges-after-rename-example]] -.`Customer` entity after renaming -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTest.java[tags=envers-tracking-modified-entities-revchanges-after-rename-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-tracking-modified-entities-revchanges-after-rename-example.sql[] ----- -==== - -Users, that have chosen one of the approaches listed above, -can retrieve all entities modified in a specified revision by utilizing API described in <>. - -Users are also allowed to implement custom mechanisms of tracking modified entity types. -In this case, they shall pass their own implementation of `org.hibernate.envers.EntityTrackingRevisionListener` -interface as the value of `@org.hibernate.envers.RevisionEntity` annotation. - -`EntityTrackingRevisionListener` interface exposes one method that notifies whenever audited entity instance has been -added, modified or removed within current revision boundaries. - -[[envers-tracking-modified-entities-revchanges-EntityTrackingRevisionListener-example]] -.The `EntityTrackingRevisionListener` implementation -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTrackingRevisionListenerTest.java[tags=envers-tracking-modified-entities-revchanges-EntityTrackingRevisionListener-example] ----- -==== - -The `CustomTrackingRevisionListener` adds the fully-qualified class name to the `modifiedEntityTypes` attribute of the `CustomTrackingRevisionEntity`. - -[[envers-tracking-modified-entities-revchanges-RevisionEntity-example]] -.The `RevisionEntity` using the custom `EntityTrackingRevisionListener` -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTrackingRevisionListenerTest.java[tags=envers-tracking-modified-entities-revchanges-RevisionEntity-example] ----- -==== - -The `CustomTrackingRevisionEntity` contains a `@OneToMany` list of `ModifiedTypeRevisionEntity` - -[[envers-tracking-modified-entities-revchanges-EntityType-example]] -.The `EntityType` encapsulates the entity type name before a class name modification -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTrackingRevisionListenerTest.java[tags=envers-tracking-modified-entities-revchanges-EntityType-example] ----- -==== - -Now, when fetching the `CustomTrackingRevisionEntity`, you can get access to the previous entity class name. - -[[envers-tracking-modified-entities-revchanges-query-example]] -.Getting the `EntityType` through the `CustomTrackingRevisionEntity` -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTrackingRevisionListenerTest.java[tags=envers-tracking-modified-entities-revchanges-query-example] ----- -==== - -[[envers-tracking-properties-changes]] -=== Tracking entity changes at the property level - -By default, the only information stored by Envers are revisions of modified entities. -This approach lets users create audit queries based on historical values of entity properties. -Sometimes it is useful to store additional metadata for each revision, when you are interested also in the type of changes, not only about the resulting values. - -The feature described in <> makes it possible to tell which entities were modified in a given revision. - -The feature described here takes it one step further. -_Modification Flags_ enable Envers to track which properties of audited entities were modified in a given revision. - -Tracking entity changes at the property level can be enabled by: - -. setting `org.hibernate.envers.global_with_modified_flag` configuration property to `true`. - This global switch will cause adding modification flags to be stored for all audited properties of all audited entities. - -. using `@Audited( withModifiedFlag = true )` on a property or on an entity. - -The trade-off coming with this functionality is an increased size of audit tables and a very little, almost negligible, performance drop during audit writes. -This is due to the fact that every tracked property has to have an accompanying boolean column in the schema that stores information about the property modifications. -Of course, it is Enver's job to fill these columns accordingly - no additional work by the developer is required. -Because of costs mentioned, it is recommended to enable the feature selectively, when needed with use of the granular configuration means described above. - -[[envers-tracking-properties-changes-mapping-example]] -.Mapping for tracking entity changes at the property level -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/ModifiedFlagsAuditTest.java[tags=envers-tracking-properties-changes-mapping-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-tracking-properties-changes-mapping-example.sql[] ----- -==== - -As you can see, every property features a `_MOD` column (e.g. `createdOn_MOD`) in the audit log. - -[[envers-tracking-properties-changes-example]] -.Tracking entity changes at the property level example -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/ModifiedFlagsAuditTest.java[tags=envers-tracking-properties-changes-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-tracking-properties-changes-example.sql[] ----- -==== - -To see how "Modified Flags" can be utilized, check out the very simple query API that uses them: <>. - -[[envers-tracking-properties-changes-strategy]] -=== Selecting strategy for tracking property level changes - -By default, Envers uses the `legacy` modified column naming strategy. -This strategy is designed to add columns based on the following rule-set: - -. If property is annotated with `@Audited` and the _modifiedColumnName_ attribute is specified, the column will directly be based on the supplied name. -. If property is not annotated with `@Audited` or if no _modifiedColumnName_ attribute is given, the column will be named after the java class property, appended with the configured suffix, the default being `_MOD`. - -While this strategy has no performance drawbacks, it does present concerns for users who prefer consistency without verbosity. -Lets take the following entity mapping as an example. - -``` -@Audited(withModifiedFlags = true) -@Entity -public class Customer { - @Id - private Integer id; - @Column(name = "customer_name") - private String name; -} -``` - -This mapping will actually lead to some inconsistent naming between columns, see below for how the model's name will be stored in `customer_name` but the modified column that tracks whether this column changes between revisions is named `name_MOD`. - -``` -CREATE TABLE Customer_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint not null, - customer_name varchar(255), - name_MOD boolean, - primary key(id, REV) -) -``` - -An additional strategy called `improved`, aims to address these inconsistent column naming concerns. -This strategy uses the following rule-set: - -. Property is a Basic type (Single Column valued property) -.. Use the _modifiedColumnName_ directly if one is supplied on the property mapping -.. Otherwise use the resolved ORM column name appended with the modified flag suffix configured value -. Property is an Association (to-one mapping) with a Foreign Key using a single column -.. Use the _modifiedColumnName_ directly if one is supplied on the property mapping -.. Otherwise use the resolved ORM column name appended with the modified flag suffix configured value -. Property is an Association (to-one mapping) with a Foreign Key using multiple columns -.. Use the _modifiedColumnName_ directly if one is supplied on the property mapping -.. Otherwise use the property name appended with the modified flag suffix configured value -. Property is an Embeddable -.. Use the _modifiedColumnName_ directly if one is supplied on the property mapping -.. Otherwise use the property name appended with the modified flag suffix configured value - -While using this strategy, the same `Customer` mapping will generate the following table schema: - -``` -CREATE TABLE Customer_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint not null, - customer_name varchar(255), - customer_name_MOD boolean, - primary key(id, REV) -) -``` - -When already using Envers in conjunction with the modified columns flag feature, it is advised not to enable the new strategy immediately as schema changes would be required. -You will need to either migrate your existing schema manually to adhere to the rules above or use the explicit _modifiedColumnName_ attribute on the `@Audited` annotation for existing columns that use the feature. - -To configure a custom strategy implementation or use the improved strategy, the configuration option `org.hibernate.envers.modified_column_naming_strategy` will need to be set. -This option can be the fully qualified class name of a `ModifiedColumnNameStrategy` implementation or `legacy` or `improved` for either of the two provided implementations. - -[[envers-queries]] -=== Queries - -You can think of historic data as having two dimensions: - -horizontal:: The state of the database at a given revision. Thus, you can query for entities as they were at revision N. -vertical:: The revisions, at which entities changed. Hence, you can query for revisions, in which a given entity changed. - -The queries in Envers are similar to Hibernate Criteria queries, so if you are familiar with them, using Envers queries will be much easier. - -The main limitation of the current queries implementation is that you cannot traverse relations. -You can only specify constraints on the ids of the related entities, and only on the "owning" side of the relation. -This, however, will be changed in future releases. - -[NOTE] -==== -The queries on the audited data will be in many cases much slower than corresponding queries on "live" data, -as, especially for the default audit strategy, they involve correlated subselects. - -Queries are improved both in terms of speed and possibilities when using the validity audit strategy, -which stores both start and end revisions for entities. See <> for a more detailed discussion. -==== - -[[entities-at-revision]] -=== Querying for entities of a class at a given revision - -The entry point for this type of queries is: - -[[entities-at-revision-example]] -.Getting the `Customer` entity at a given revision -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=entities-at-revision-example] ----- -==== - -[[entities-filtering]] -=== Querying for entities using filtering criteria - -You can then specify constraints, which should be met by the entities returned, by adding restrictions, -which can be obtained using the `AuditEntity` factory class. - -For example, to select only entities where the `firstName` property is equal to "John": - -[[entities-filtering-example]] -.Getting the `Customer` audit log with a given `firstName` attribute value -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=entities-filtering-example] ----- -==== - -And, to select only entities whose relationships are related to a given entity, -you can use either the target entity or its identifier. - -[[entities-filtering-by-entity-example]] -.Getting the `Customer` entities whose `address` attribute matches the given entity reference -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=entities-filtering-by-entity-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/entities-filtering-by-entity-example.sql[] ----- -==== - -The same SQL is generated even if we provide the identifier instead of the target entity reference. - -[[entities-filtering-by-entity-identifier-example]] -.Getting the `Customer` entities whose `address` identifier matches the given entity identifier -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=entities-filtering-by-entity-identifier-example] ----- -==== - -Apart from strict equality matching, you can also use an `IN` clause to provide multiple entity identifiers: - -[[entities-in-clause-filtering-by-entity-identifier-example]] -.Getting the `Customer` entities whose `address` identifier matches one of the given entity identifiers -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=entities-in-clause-filtering-by-entity-identifier-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/entities-in-clause-filtering-by-entity-identifier-example.sql[] ----- -==== - -You can limit the number of results, order them, and set aggregations and projections (except grouping) in the usual way. -When your query is complete, you can obtain the results by calling the `getSingleResult()` or `getResultList()` methods. - -A full query, can look for example like this: - -[[entities-filtering-and-pagination]] -.Getting the `Customer` entities using filtering and pagination -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=entities-filtering-and-pagination] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/entities-filtering-and-pagination.sql[] ----- -==== - -[[revisions-of-entity]] -=== Querying for revisions, at which entities of a given class changed - -The entry point for this type of queries is: - -[[revisions-of-entity-query-example]] -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=revisions-of-entity-query-example] ----- - -You can add constraints to this query in the same way as to the previous one. - -There are some additional possibilities: - -. using `AuditEntity.revisionNumber()` you can specify constraints, projections and order on the revision number, in which the audited entity was modified. - -. similarly, using `AuditEntity.revisionProperty( propertyName )` you can specify constraints, projections and order on a property of the revision entity, - corresponding to the revision in which the audited entity was modified. - -. `AuditEntity.revisionType()` gives you access as above to the type of the revision (`ADD`, `MOD`, `DEL`). - -Using these methods, you can order the query results by revision number, set projection or constraint the revision number to be greater or less than a specified value, etc. -For example, the following query will select the smallest revision number, at which entity of class `MyEntity` with id `entityId` has changed, after revision number 2: - -[[revisions-of-entity-query-by-revision-number-example]] -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=revisions-of-entity-query-by-revision-number-example] ----- - -The second additional feature you can use in queries for revisions is the ability to _maximize_/_minimize_ a property. - -For example, if you want to select the smallest possible revision at which the value of the `createdOn` -attribute was larger than a given value, -you can run the following query: - -[[revisions-of-entity-query-minimize-example]] -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=revisions-of-entity-query-minimize-example] ----- - -The `minimize()` and `maximize()` methods return a criterion, to which you can add constraints, -which must be met by the entities with the _maximized_/_minimized_ properties. - -You probably also noticed that there are two boolean parameters, passed when creating the query. - -`selectEntitiesOnly`:: The first parameter is only valid when you don't set an explicit projection. -+ -If true, the result of the query will be a list of entities (which changed at revisions satisfying the specified constraints). -+ -If false, the result will be a list of three element arrays: - -* the first element will be the changed entity instance. -* the second will be an entity containing revision data (if no custom entity is used, this will be an instance of the <>). -* the third will be the type of the revision (one of the values of the `RevisionType` enumeration: `ADD`, `MOD`, `DEL`). - -`selectDeletedEntities`:: The second parameter specifies if revisions, -in which the entity was deleted should be included in the results. -+ -If yes, such entities will have the revision type `DEL` and all attributes, except the `id`, will be set to `null`. - -Another useful feature is `AggregatedAuditExpression#computeAggregationInInstanceContext()`. This can be used to create -an aggregate query based on the entity instance primary key. - -For example, if you wanted to locate all customers but only wanted to retrieve the instances with the -maximum revision number, you would use the following query: - -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=aggregate-max-revision-with-entity-example] ----- - -In other words, the result set would contain a list of `Customer` instances, one per primary key. Each instance would -hold the audited property data at the _maximum_ revision number for each `Customer` primary key. - -[[envers-tracking-properties-changes-queries]] -=== Querying for entity revisions that modified a given property - -For the two types of queries described above it's possible to use special `Audit` criteria called `hasChanged()` and `hasNotChanged()` -that make use of the functionality described in <>. - -Let's have a look at various queries that can benefit from these two criteria. - -First, you must make sure that your entity can track _modification flags_: - -[[envers-tracking-properties-changes-queries-entity-example]] -.Valid only when audit logging tracks entity attribute modification flags -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditWithModifiedFlagTest.java[tags=envers-tracking-properties-changes-queries-entity-example] ----- -==== - -The following query will return all revisions of the `Customer` entity with the given `id`, -for which the `lastName` property has changed. - -[[envers-tracking-properties-changes-queries-hasChanged-example]] -.Getting all `Customer` revisions for which the `lastName` attribute has changed -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditWithModifiedFlagTest.java[tags=envers-tracking-properties-changes-queries-hasChanged-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-tracking-properties-changes-queries-hasChanged-example.sql[] ----- -==== - -Using this query we won't get all other revisions in which `lastName` wasn't touched. -From the SQL query you can see that the `lastName_MOD` column is being used in the WHERE clause, -hence the aforementioned requirement for tracking modification flags. - -Of course, nothing prevents users from combining `hasChanged` condition with some additional criteria. - -[[envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example]] -.Getting all `Customer` revisions for which the `lastName` attribute has changed and the `firstName` attribute has not changed -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditWithModifiedFlagTest.java[tags=envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example.sql[] ----- -==== - -To get the `Customer` entities changed at a given `revisionNumber` with `lastName` modified and `firstName` untouched, -we have to use the `forEntitiesModifiedAtRevision` query: - -[[envers-tracking-properties-changes-queries-at-revision-example]] -.Getting the `Customer` entity for a given revision if the `lastName` attribute has changed and the `firstName` attribute has not changed -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditWithModifiedFlagTest.java[tags=envers-tracking-properties-changes-queries-at-revision-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-tracking-properties-changes-queries-at-revision-example.sql[] ----- -==== - -[[envers-tracking-obtain-properties-changed-queries]] -=== Querying for revisions of entity including property names that were modified - -[NOTE] -==== -This feature described here is still considered experimental. -It is subject to change in future releases based on user feedback to improve its usefulness. -==== - -Sometimes it may be useful to query entity revisions and also determine all the properties of that revision which -were modified without having to issue multiple queries using `hasChanged()` and `hasNotChanged()` criteria. - -You can now obtain this information easily by using the following query: - -.Querying entity revisions including property names modified. -==== -[source, java, indent=0] ----- -List results = AuditReaderFactory.get( entityManager ) - .createQuery() - .forRevisionsOfEntityWithChanges( Customer.class, false ) - .add( AuditEntity.id().eq( 1L ) ) - .getResultList(); - -for ( Object entry : results ) { - final Object[] array = (Object[]) entry; - final Set propertiesChanged = (Set) array[3]; - for ( String propertyName : propertiesChanged ) { - /* Do something useful with the modified property `propertyName` */ - } -} ----- -==== - -[[envers-tracking-modified-entities-queries]] -=== Querying for entity types modified in a given revision - -[NOTE] -==== -The methods described below can be used only when the default mechanism of tracking changed entity types is enabled (see <>). -==== - -This basic query allows retrieving entity names and corresponding Java classes changed in a specified revision: - -[[envers-tracking-modified-entities-queries-example]] -.Retrieving entity names and corresponding Java classes changed in a specified revision -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTest.java[tags=envers-tracking-modified-entities-queries-example1] ----- - -[source, java, indent=0] ----- -include::{example-dir-envers}/EntityTypeChangeAuditTest.java[tags=envers-tracking-modified-entities-queries-example2] ----- -==== - -Other queries (also accessible from `org.hibernate.envers.CrossTypeRevisionChangesReader`): - -`List findEntities(Number)`:: - Returns snapshots of all audited entities changed (added, updated and removed) in a given revision. - Executes `N + 1` SQL queries, where `N` is a number of different entity classes modified within specified revision. - -`List findEntities(Number, RevisionType)`:: - Returns snapshots of all audited entities changed (added, updated or removed) in a given revision filtered by modification type. - Executes `N + 1` SQL queries, where `N` is a number of different entity classes modified within specified revision. - -`Map> findEntitiesGroupByRevisionType(Number)`:: - Returns a map containing lists of entity snapshots grouped by modification operation (e.g. addition, update and removal). - Executes `3N + 1` SQL queries, where `N` is a number of different entity classes modified within specified revision. - -[[envers-querying-entity-relation-joins]] -=== Querying for entities using entity relation joins - -[WARNING] -==== -Relation join queries are considered experimental and may change in future releases. -==== - -Audit queries support the ability to apply constraints, projections, and sort operations based on entity relations. In order -to traverse entity relations through an audit query, you must use the relation traversal API with a join type. - -[NOTE] -==== -Relation joins can be applied to `many-to-one` and `one-to-one` mappings only when using `JoinType.LEFT` or `JoinType.INNER`. -==== - -The basis for creating an entity relation join query is as follows: - -[[envers-querying-entity-relation-inner-join]] -.INNER JOIN entity audit query -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=envers-querying-entity-relation-inner-join] ----- -==== - -[[envers-querying-entity-relation-left-join]] -.LEFT JOIN entity audit query -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=envers-querying-entity-relation-left-join] ----- -==== - -Like any other query, constraints may be added to restrict the results. - -For example, to find all `Customer` entities at a given revision whose addresses are in `România`, -you can use the following query: - -[[envers-querying-entity-relation-join-restriction]] -.Filtering the join relation with a WHERE clause predicate -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditTest.java[tags=envers-querying-entity-relation-join-restriction] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-querying-entity-relation-join-restriction.sql[] ----- -==== - -It is also possible to traverse beyond the first relation in an entity graph. - -For example, to find all `Customer` entities at a given revision -with the country attribute of the address property being `România`: - -[[envers-querying-entity-relation-nested-join-restriction]] -.Filtering a nested join relation with a WHERE clause predicate -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditAdressCountryTest.java[tags=envers-querying-entity-relation-nested-join-restriction] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-querying-entity-relation-nested-join-restriction.sql[] ----- -==== - -Constraints may also be added to the properties of nested joined relations, such as testing for `null`. - -For example, the following query illustrates how to find all `Customer` entities at a given revision -having the `address` in `Cluj-Napoca` or the `address` does _not_ have any country entity reference: - -[[envers-querying-entity-relation-join-multiple-restrictions]] -.Filtering a join relation using multiple predicates -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditAdressCountryTest.java[tags=envers-querying-entity-relation-join-multiple-restrictions] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-querying-entity-relation-join-multiple-restrictions.sql[] ----- -==== - -[NOTE] -==== -Queries can use the `up` method to navigate back up the entity graph. -==== - -Disjunction criterion may also be applied to relation join queries. - -For example, the following query will find all `Customer` entities at a given revision -where the country name is `România` or that the `Customer` lives in `Cluj-Napoca`: - -[[envers-querying-entity-relation-nested-join-multiple-restrictions]] -.Filtering a nested join relation using multiple predicates -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditAdressCountryTest.java[tags=envers-querying-entity-relation-nested-join-multiple-restrictions] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-querying-entity-relation-nested-join-multiple-restrictions.sql[] ----- -==== - -Lastly, this example illustrates how related entity properties can be compared in a single constraint. - -Assuming the `Customer` and the `Address` were previously changed as follows: - -[[envers-querying-entity-relation-nested-join-multiple-restrictions-combined-entities]] -.Changing the `Address` to match the `Country` name -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditAdressCountryTest.java[tags=envers-querying-entity-relation-nested-join-multiple-restrictions-combined-entities] ----- -==== - -The following query shows how to find the `Customer` entities -where the `city` property of the `address` attribute equals the `name` of the associated `country` attribute. - -[[envers-querying-entity-relation-nested-join-multiple-restrictions-combined]] -.Filtering a nested join relation using multiple predicates -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditAdressCountryTest.java[tags=envers-querying-entity-relation-nested-join-multiple-restrictions-combined] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-querying-entity-relation-nested-join-multiple-restrictions-combined.sql[] ----- -==== - -[[envers-querying-revision-entities]] -=== Querying for revision information without loading entities - -Sometimes, it may be useful to load information about revisions to find out who performed specific revisions or -to know what entity names were modified but the change log about the related audited entities isn't needed. -This API allows an efficient way to get the revision information entity log without instantiating the actual -entities themselves. - -Here is a simple example: - -[source,java] ----- -AuditQuery query = getAuditReader().createQuery() - .forRevisionsOfEntity( Customer.class, true ) - .add( AuditEntity.revisionNumber().between( 1, 25 ) ); ----- - -This query will return all information for revisions between 1 and 25 including those which are -related to deletions. If deletions are not of interest, you would pass `false` as the second argument. - -Note that this query produces `@RevisionEntity` instances. The obtained instance type will vary depending on the -configuration properties used to configure Envers, like showed in <>, -or if you supply your own revision entity. - -[[envers-querying-revision-info]] -=== Directly querying revision information - -You can also directly query all revision information available on the database by writing HQL or Criteria queries -which select from the revision entity used by your application. For example: - -[source,java] ----- -List resultList = session.createQuery( "from DefaultRevisionEntity where id = 1", DefaultRevisionEntity.class ).getResultList(); ----- - -This query will return all revision entity information for revision numbers equal to 1 (the first revision of each entity). -Often, users who will take advantage of this functionality will be providing a custom revision entity implementation to -obtain additional information being maintained per revision. - -[[envers-conditional-auditing]] -=== Conditional auditing - -Envers persists audit data in reaction to various Hibernate events (e.g. `post update`, `post insert`, and so on), -using a series of event listeners from the `org.hibernate.envers.event.spi` package. -By default, if the Envers jar is in the classpath, the event listeners are auto-registered with Hibernate. - -Conditional auditing can be implemented by overriding some of the Envers event listeners. -To use customized Envers event listeners, the following steps are needed: - -. Turn off automatic Envers event listeners registration by setting the `hibernate.envers.autoRegisterListeners` Hibernate property to `false`. - -. Create subclasses for appropriate event listeners. - For example, if you want to conditionally audit entity insertions, extend the `org.hibernate.envers.event.spi.EnversPostInsertEventListenerImpl` class. - Place the conditional-auditing logic in the subclasses, call the super method if auditing should be performed. - -. Create your own implementation of `org.hibernate.integrator.spi.Integrator`, similar to `org.hibernate.envers.boot.internal.EnversIntegrator`. - Use your event listener classes instead of the default ones. - -. For the integrator to be automatically used when Hibernate starts up, you will need to add a `META-INF/services/org.hibernate.integrator.spi.Integrator` file to your jar. - The file should contain the fully qualified name of the class implementing the interface. - -[NOTE] -==== -The use of `hibernate.listeners.envers.autoRegister` has been deprecated. -The new `hibernate.envers.autoRegisterListeners` configuration setting should be used instead. -==== - -[[envers-schema]] -=== Understanding the Envers Schema - -For each audited entity (that is, for each entity containing at least one audited field), an audit table is created. -By default, the audit table's name is created by adding an "_AUD" suffix to the original table name, -but this can be overridden by specifying a different suffix/prefix in the configuration properties or per-entity using the `@org.hibernate.envers.AuditTable` annotation. - -The audit table contains the following columns: - -id:: `id` of the original entity (this can be more then one column in the case of composite primary keys). -revision number:: an integer, which matches to the revision number in the revision entity table. -revision type:: The `org.hibernate.envers.RevisionType` enumeration ordinal stating if the change represents an INSERT, UPDATE or DELETE. -audited fields:: properties from the original entity being audited. - -The primary key of the audit table is the combination of the original id of the entity and the revision number, -so there can be at most one historic entry for a given entity instance at a given revision. - -The current entity data is stored in the original table and in the audit table. -This is a duplication of data, however, as this solution makes the query system much more powerful, and as memory is cheap, hopefully, this won't be a major drawback for the users. - -A row in the audit table with entity id `ID`, revision `N`, and data `D` means: entity with id `ID` has data `D` from revision `N` upwards. -Hence, if we want to find an entity at revision `M`, we have to search for a row in the audit table, which has the revision number smaller or equal to `M`, but as large as possible. -If no such row is found, or a row with a "deleted" marker is found, it means that the entity didn't exist at that revision. - -The "revision type" field can currently have three values: `0`, `1` and `2`, which means `ADD`, `MOD`, and `DEL`, respectively. -A row with a revision of type `DEL` will only contain the id of the entity and no data (all fields `NULL`), as it only serves as a marker saying "this entity was deleted at that revision". - -Additionally, there is a revision entity table which contains the information about the global revision. -By default, the generated table is named `REVINFO` and contains just two columns: `ID` and `TIMESTAMP`. -A row is inserted into this table on each new revision, that is, on each commit of a transaction, which changes audited data. -The name of this table can be configured, the name of its columns as well as adding additional columns can be achieved as discussed in <>. - -[NOTE] -==== -While global revisions are a good way to provide correct auditing of relations, some people have pointed out that this may be a bottleneck in systems where data is very often modified. - -One viable solution is to introduce an option to have an entity "locally revisioned", that is revisions would be created for it independently. -This would not enable correct versioning of relations, but it would work without the `REVINFO` table. - -Another possibility is to introduce a notion of "revisioning groups", which would group entities sharing the same revision numbering. -Each such group would have to consist of one or more strongly connected components belonging to the entity graph induced by relations between entities. - -Your opinions on the subject are very welcome on the forum. -==== - -[[envers-generateschema]] -=== Generating Envers schema with Hibernate hbm2ddl tool - -If you would like to generate the database schema file with Hibernate, -you simply need to use the hbm2ddl tool. - -This task will generate the definitions of all entities, both of those which are audited by Envers and those which are not. - -See the <> chapter for more info. - -For the following entities, Hibernate is going to generate the following database schema: - -[[envers-generateschema-example]] -.Filtering a nested join relation using multiple predicates -==== -[source, java, indent=0] ----- -include::{example-dir-envers}/QueryAuditAdressCountryTest.java[tags=envers-generateschema-example] ----- - -[source, SQL, indent=0] ----- -include::{extrasdir}/envers-generateschema-example.sql[] ----- -==== - -[[envers-mappingexceptions]] -=== Mapping exceptions - -==== What isn't and will not be supported - -Bags are not supported because they can contain non-unique elements. -Persisting a bag of `String`s violates the relational database principle that each table is a set of tuples. - -In case of bags, however (which require a join table), if there is a duplicate element, the two tuples corresponding to the elements will be the same. -Although Hibernate allows this, Envers (or more precisely the database connector) will throw an exception when trying to persist two identical elements because of a unique constraint violation. - -There are at least two ways out if you need bag semantics: - -. use an indexed collection, with the `@jakarta.persistence.OrderColumn` annotation. -. provide a unique id for your elements with the `@CollectionId` annotation. - -==== What isn't and _will_ be supported - -* Bag style collections with a `@CollectionId` identifier column (see https://hibernate.atlassian.net/browse/HHH-3950[HHH-3950]). - -=== `@OneToMany` with `@JoinColumn` - -When a collection is mapped using these two annotations, Hibernate doesn't generate a join table. -Envers, however, has to do this so that when you read the revisions in which the related entity has changed, you don't get false results. - -To be able to name the additional join table, there is a special annotation: `@AuditJoinTable`, which has similar semantics to Jakarta Persistence `@JoinTable`. - -One special case is to have relations mapped with `@OneToMany` with `@JoinColumn` on the one side, and `@ManyToOne` and `@JoinColumn( insertable = false, updatable = false`) on the many side. -Such relations are, in fact, bidirectional, but the owning side is the collection. - -To properly audit such relations with Envers, you can use the `@AuditMappedBy` annotation. -It enables you to specify the reverse property (using the `mappedBy` element). -In case of indexed collections, the index column must also be mapped in the referenced entity (using `@Column( insertable = false, updatable = false )`, and specified using `positionMappedBy`. -This annotation will affect only the way Envers works. -Please note that the annotation is experimental and may change in the future. - -[[envers-partitioning]] -=== Advanced: Audit table partitioning - -[[envers-partitioning-benefits]] -=== Benefits of audit table partitioning - -Because audit tables tend to grow indefinitely, they can quickly become really large. -When the audit tables have grown to a certain limit (varying per RDBMS and/or operating system) it makes sense to start using table partitioning. -SQL table partitioning offers a lot of advantages including, but certainly not limited to: - -. Improved query performance by selectively moving rows to various partitions (or even purging old rows). -. Faster data loads, index creation, etc. - -[[envers-partitioning-columns]] -=== Suitable columns for audit table partitioning - -Generally, SQL tables must be partitioned on a column that exists within the table. -As a rule, it makes sense to use either the _end revision_ or the _end revision timestamp_ column for partitioning of audit tables. - -[NOTE] -==== -End revision information is not available for the default `AuditStrategy`. - -Therefore the following Envers configuration options are required: - -`org.hibernate.envers.audit_strategy` = `org.hibernate.envers.strategy.ValidityAuditStrategy` - -`org.hibernate.envers.audit_strategy_validity_store_revend_timestamp` = `true` - -Optionally, you can also override the default values using following properties: - -`org.hibernate.envers.audit_strategy_validity_end_rev_field_name` - -`org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name` - -`org.hibernate.envers.audit_strategy_validity_revend_timestamp_numeric` - -For more information, see <>. -==== - -The reason why the end revision information should be used for audit table partitioning is based on the assumption that audit tables should be partitioned on an 'increasing level of relevancy', like so: - -. A couple of partitions with audit data that is not very (or no longer) relevant. - This can be stored on slow media, and perhaps even be purged eventually. -. Some partitions for audit data that is potentially relevant. -. One partition for audit data that is most likely to be relevant. - This should be stored on the fastest media, both for reading and writing. - -[[envers-partitioning-example]] -=== Audit table partitioning example - -In order to determine a suitable column for the 'increasing level of relevancy', -consider a simplified example of a salary registration for an unnamed agency. - -Currently, the salary table contains the following rows for a certain person X: - -.Salaries table -[width="100%",cols="50%,50%",options="header",] -|================== -|Year |Salary (USD) -|2006 |3300 -|2007 |3500 -|2008 |4000 -|2009 |4500 -|================== - -The salary for the current fiscal year (2010) is unknown. -The agency requires that all changes in registered salaries for a fiscal year are recorded (i.e., an audit trail). -The rationale behind this is that decisions made at a certain date are based on the registered salary at that time. -And at any time it must be possible to reproduce the reason why a certain decision was made at a certain date. - -The following audit information is available, sorted in order of occurrence: - -.Salaries - audit table -[width="100%",cols="20%,20%,20%,20%,20%",options="header",] -|======================================================================= -|Year |Revision type |Revision timestamp |Salary (USD) |End revision timestamp -|2006 |ADD |2007-04-01 |3300 |null -|2007 |ADD |2008-04-01 |35 |2008-04-02 -|2007 |MOD |2008-04-02 |3500 |null -|2008 |ADD |2009-04-01 |3700 |2009-07-01 -|2008 |MOD |2009-07-01 |4100 |2010-02-01 -|2008 |MOD |2010-02-01 |4000 |null -|2009 |ADD |2010-04-01 |4500 |null -|======================================================================= - -[[envers-partitioning-example-column]] -=== Determining a suitable partitioning column - -To partition this data, the _level of relevancy_ must be defined. Consider the following: - -. For the fiscal year 2006, there is only one revision. -It has the oldest _revision timestamp_ of all audit rows, -but should still be regarded as relevant because it's the latest modification for this fiscal year in the salary table (its _end revision timestamp_ is null). -+ -Also, note that it would be very unfortunate if in 2011 there would be an update of the salary for the fiscal year 2006 (which is possible until at least 10 years after the fiscal year), -and the audit information would have been moved to a slow disk (based on the age of the __revision timestamp__). -Remember that, in this case, Envers will have to update the _end revision timestamp_ of the most recent audit row. -. There are two revisions in the salary of the fiscal year 2007 which both have nearly the same _revision timestamp_ and a different __end revision timestamp__. - -On first sight, it is evident that the first revision was a mistake and probably not relevant. -The only relevant revision for 2007 is the one with _end revision timestamp_ value of null. - -Based on the above, it is evident that only the _end revision timestamp_ is suitable for audit table partitioning. -The _revision timestamp_ is not suitable. - -[[envers-partitioning-example-scheme]] -=== Determining a suitable partitioning scheme - -A possible partitioning scheme for the salary table would be as follows: - -_end revision timestamp_ year = 2008:: This partition contains audit data that is not very (or no longer) relevant. -_end revision timestamp_ year = 2009:: This partition contains audit data that is potentially relevant. -_end revision timestamp_ year >= 2010 or null:: This partition contains the most relevant audit data. - -This partitioning scheme also covers the potential problem of the update of the __end revision timestamp__, -which occurs if a row in the audited table is modified. -Even though Envers will update the _end revision timestamp_ of the audit row to the system date at the instant of modification, -the audit row will remain in the same partition (the 'extension bucket'). - -And sometime in 2011, the last partition (or 'extension bucket') is split into two new partitions: - -. _end revision timestamp_ year = 2010: This partition contains audit data that is potentially relevant (in 2011). -. _end revision timestamp_ year >= 2011 or null: This partition contains the most interesting audit data and is the new 'extension bucket'. - -[[envers-links]] -=== Envers links - -. https://hibernate.org[Hibernate main page] -. https://hibernate.org/community/[Forum] -. https://hibernate.atlassian.net/[JIRA issue tracker] (when adding issues concerning Envers, be sure to select the "envers" component!) -. https://hibernate.zulipchat.com/#narrow/stream/132096-hibernate-user[Zulip channel] -. https://community.jboss.org/wiki/EnversFAQ[FAQ] - diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-filtering-and-pagination.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-filtering-and-pagination.sql deleted file mode 100644 index a54249260754..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-filtering-and-pagination.sql +++ /dev/null @@ -1,17 +0,0 @@ -select - c.id as id1_3_, - c.REV as REV2_3_, - c.REVTYPE as REVTYPE3_3_, - c.REVEND as REVEND4_3_, - c.created_on as created_5_3_, - c.firstName as firstNam6_3_, - c.lastName as lastName7_3_, - c.address_id as address_8_3_ -from - Customer_AUD c -where - c.address_id = ? -order by - c.lastName desc -limit ? -offset ? \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-filtering-by-entity-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-filtering-by-entity-example.sql deleted file mode 100644 index b005434eb4fa..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-filtering-by-entity-example.sql +++ /dev/null @@ -1,17 +0,0 @@ -select - c.id as id1_3_, - c.REV as REV2_3_, - c.REVTYPE as REVTYPE3_3_, - c.REVEND as REVEND4_3_, - c.created_on as created_5_3_, - c.firstName as firstNam6_3_, - c.lastName as lastName7_3_, - c.address_id as address_8_3_ -from - Customer_AUD c -where - c.address_id = ? -order by - c.REV asc - --- binding parameter [1] as [BIGINT] - [1] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-in-clause-filtering-by-entity-identifier-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-in-clause-filtering-by-entity-identifier-example.sql deleted file mode 100644 index 05d3b85f9c58..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/entities-in-clause-filtering-by-entity-identifier-example.sql +++ /dev/null @@ -1,20 +0,0 @@ -select - c.id as id1_3_, - c.REV as REV2_3_, - c.REVTYPE as REVTYPE3_3_, - c.REVEND as REVEND4_3_, - c.created_on as created_5_3_, - c.firstName as firstNam6_3_, - c.lastName as lastName7_3_, - c.address_id as address_8_3_ -from - Customer_AUD c -where - c.address_id in ( - ? , ? - ) -order by - c.REV asc - --- binding parameter [1] as [BIGINT] - [1] --- binding parameter [2] as [BIGINT] - [2] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-delete-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-delete-example.sql deleted file mode 100644 index ce40f7aaa64c..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-delete-example.sql +++ /dev/null @@ -1,31 +0,0 @@ -delete -from - Customer -where - id = ? - --- binding parameter [1] as [BIGINT] - [1] - -insert -into - REVINFO - (REV, REVTSTMP) -values - (?, ?) - --- binding parameter [1] as [BIGINT] - [3] --- binding parameter [2] as [BIGINT] - [1500906092876] - -insert -into - Customer_AUD - (REVTYPE, created_on, firstName, lastName, id, REV) -values - (?, ?, ?, ?, ?, ?) - --- binding parameter [1] as [INTEGER] - [2] --- binding parameter [2] as [TIMESTAMP] - [null] --- binding parameter [3] as [VARCHAR] - [null] --- binding parameter [4] as [VARCHAR] - [null] --- binding parameter [5] as [BIGINT] - [1] --- binding parameter [6] as [INTEGER] - [3] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-insert-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-insert-example.sql deleted file mode 100644 index e81e86b44b9d..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-insert-example.sql +++ /dev/null @@ -1,35 +0,0 @@ -insert -into - Customer - (created_on, firstName, lastName, id) -values - (?, ?, ?, ?) - --- binding parameter [1] as [TIMESTAMP] - [Mon Jul 24 17:21:32 EEST 2017] --- binding parameter [2] as [VARCHAR] - [John] --- binding parameter [3] as [VARCHAR] - [Doe] --- binding parameter [4] as [BIGINT] - [1] - -insert -into - REVINFO - (REV, REVTSTMP) -values - (?, ?) - --- binding parameter [1] as [BIGINT] - [1] --- binding parameter [2] as [BIGINT] - [1500906092803] - -insert -into - Customer_AUD - (REVTYPE, created_on, firstName, lastName, id, REV) -values - (?, ?, ?, ?, ?, ?) - --- binding parameter [1] as [INTEGER] - [0] --- binding parameter [2] as [TIMESTAMP] - [Mon Jul 24 17:21:32 EEST 2017] --- binding parameter [3] as [VARCHAR] - [John] --- binding parameter [4] as [VARCHAR] - [Doe] --- binding parameter [5] as [BIGINT] - [1] --- binding parameter [6] as [INTEGER] - [1] diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-mapping-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-mapping-example.sql deleted file mode 100644 index 6444cfa64b18..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-mapping-example.sql +++ /dev/null @@ -1,28 +0,0 @@ -create table Customer ( - id bigint not null, - created_on timestamp, - firstName varchar(255), - lastName varchar(255), - primary key (id) -) - -create table Customer_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint, - created_on timestamp, - firstName varchar(255), - lastName varchar(255), - primary key (id, REV) -) - -create table REVINFO ( - REV integer generated by default as identity, - REVTSTMP bigint, - primary key (REV) -) - -alter table Customer_AUD - add constraint FK5ecvi1a0ykunrriib7j28vpdj - foreign key (REV) - references REVINFO \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-rev1-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-rev1-example.sql deleted file mode 100644 index 654b798f09f2..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-rev1-example.sql +++ /dev/null @@ -1,23 +0,0 @@ -select - c.id as id1_1_, - c.REV as REV2_1_, - c.REVTYPE as REVTYPE3_1_, - c.created_on as created_4_1_, - c.firstName as firstNam5_1_, - c.lastName as lastName6_1_ -from - Customer_AUD c -where - c.REV = ( - select - max( c_max.REV ) - from - Customer_AUD c_max - where - c_max.REV <= ? - and c.id = c_max.id - ) - and c.REVTYPE <> ? - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [INTEGER] - [2] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-revisions-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-revisions-example.sql deleted file mode 100644 index 69f0f6d93933..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-revisions-example.sql +++ /dev/null @@ -1,13 +0,0 @@ -select - c.REV as col_0_0_ -from - Customer_AUD c -cross join - REVINFO r -where - c.id = ? - and c.REV = r.REV -order by - c.REV asc - --- binding parameter [1] as [BIGINT] - [1] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-update-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-update-example.sql deleted file mode 100644 index 57bb75402f41..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-update-example.sql +++ /dev/null @@ -1,37 +0,0 @@ -update - Customer -set - created_on=?, - firstName=?, - lastName=? -where - id=? - --- binding parameter [1] as [TIMESTAMP] - [2017-07-24 17:21:32.757] --- binding parameter [2] as [VARCHAR] - [John] --- binding parameter [3] as [VARCHAR] - [Doe Jr.] --- binding parameter [4] as [BIGINT] - [1] - -insert -into - REVINFO - (REV, REVTSTMP) -values - (?, ?) - --- binding parameter [1] as [BIGINT] - [2] --- binding parameter [2] as [BIGINT] - [1500906092853] - -insert -into - Customer_AUD - (REVTYPE, created_on, firstName, lastName, id, REV) -values - (?, ?, ?, ?, ?, ?) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [TIMESTAMP] - [2017-07-24 17:21:32.757] --- binding parameter [3] as [VARCHAR] - [John] --- binding parameter [4] as [VARCHAR] - [Doe Jr.] --- binding parameter [5] as [BIGINT] - [1] --- binding parameter [6] as [INTEGER] - [2] diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-validity-mapping-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-validity-mapping-example.sql deleted file mode 100644 index 3e8088a10a39..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-validity-mapping-example.sql +++ /dev/null @@ -1,34 +0,0 @@ -create table Customer ( - id bigint not null, - created_on timestamp, - firstName varchar(255), - lastName varchar(255), - primary key (id) -) - -create table Customer_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint, - REVEND integer, - created_on timestamp, - firstName varchar(255), - lastName varchar(255), - primary key (id, REV) -) - -create table REVINFO ( - REV integer generated by default as identity, - REVTSTMP bigint, - primary key (REV) -) - -alter table Customer_AUD - add constraint FK5ecvi1a0ykunrriib7j28vpdj - foreign key (REV) - references REVINFO - -alter table Customer_AUD - add constraint FKqd4fy7ww1yy95wi4wtaonre3f - foreign key (REVEND) - references REVINFO \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-validity-rev1-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-validity-rev1-example.sql deleted file mode 100644 index 4d5a7cb9003e..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-audited-validity-rev1-example.sql +++ /dev/null @@ -1,21 +0,0 @@ -select - c.id as id1_1_, - c.REV as REV2_1_, - c.REVTYPE as REVTYPE3_1_, - c.REVEND as REVEND4_1_, - c.created_on as created_5_1_, - c.firstName as firstNam6_1_, - c.lastName as lastName7_1_ -from - Customer_AUD c -where - c.REV <= ? - and c.REVTYPE <> ? - and ( - c.REVEND > ? - or c.REVEND is null - ) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [INTEGER] - [2] --- binding parameter [3] as [INTEGER] - [1] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-generateschema-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-generateschema-example.sql deleted file mode 100644 index 494777730858..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-generateschema-example.sql +++ /dev/null @@ -1,102 +0,0 @@ -create table Address ( - id bigint not null, - city varchar(255), - street varchar(255), - streetNumber varchar(255), - country_id bigint, - primary key (id) -) - -create table Address_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint, - REVEND integer, - city varchar(255), - street varchar(255), - streetNumber varchar(255), - country_id bigint, - primary key (id, REV) -) - -create table Country ( - id bigint not null, - name varchar(255), - primary key (id) -) - -create table Country_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint, - REVEND integer, - name varchar(255), - primary key (id, REV) -) - -create table Customer ( - id bigint not null, - created_on timestamp, - firstName varchar(255), - lastName varchar(255), - address_id bigint, - primary key (id) -) - -create table Customer_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint, - REVEND integer, - created_on timestamp, - firstName varchar(255), - lastName varchar(255), - address_id bigint, - primary key (id, REV) -) - -create table REVINFO ( - REV integer generated by default as identity, - REVTSTMP bigint, - primary key (REV) -) - -alter table Address -add constraint FKpr4rl83u5fv832kdihl6w3kii -foreign key (country_id) -references Country - -alter table Address_AUD -add constraint FKgwp5sek4pjb4awy66sp184hrv -foreign key (REV) -references REVINFO - -alter table Address_AUD -add constraint FK52pqkpismfxg2b9tmwtncnk0d -foreign key (REVEND) -references REVINFO - -alter table Country_AUD -add constraint FKrix4g8hm9ui6sut5sy86ujggr -foreign key (REV) -references REVINFO - -alter table Country_AUD -add constraint FKpjeqmdccv22y1lbtswjb84ghi -foreign key (REVEND) -references REVINFO - -alter table Customer -add constraint FKfok4ytcqy7lovuiilldbebpd9 -foreign key (address_id) -references Address - -alter table Customer_AUD -add constraint FK5ecvi1a0ykunrriib7j28vpdj -foreign key (REV) -references REVINFO - -alter table Customer_AUD -add constraint FKqd4fy7ww1yy95wi4wtaonre3f -foreign key (REVEND) -references REVINFO \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-join-multiple-restrictions.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-join-multiple-restrictions.sql deleted file mode 100644 index b52fb72caf0f..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-join-multiple-restrictions.sql +++ /dev/null @@ -1,48 +0,0 @@ -select - c.id as id1_5_, - c.REV as REV2_5_, - c.REVTYPE as REVTYPE3_5_, - c.REVEND as REVEND4_5_, - c.created_on as created_5_5_, - c.firstName as firstNam6_5_, - c.lastName as lastName7_5_, - c.address_id as address_8_5_ -from - Customer_AUD c -left outer join - Address_AUD a - on ( - c.address_id=a.id - or ( - c.address_id is null - ) - and ( - a.id is null - ) - ) -where - c.REV<=? - and c.REVTYPE<>? - and ( - c.REVEND>? - or c.REVEND is null - ) - and ( - a.REV is null - or a.REV<=? - and ( - a.REVEND>? - or a.REVEND is null - ) - ) - and ( - a.city=? - or a.country_id is null - ) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [INTEGER] - [2] --- binding parameter [3] as [INTEGER] - [1] --- binding parameter [4] as [INTEGER] - [1] --- binding parameter [5] as [INTEGER] - [1] --- binding parameter [6] as [VARCHAR] - [Cluj-Napoca] diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-join-restriction.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-join-restriction.sql deleted file mode 100644 index 865858d31001..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-join-restriction.sql +++ /dev/null @@ -1,42 +0,0 @@ -select - c.id as id1_3_, - c.REV as REV2_3_, - c.REVTYPE as REVTYPE3_3_, - c.REVEND as REVEND4_3_, - c.created_on as created_5_3_, - c.firstName as firstNam6_3_, - c.lastName as lastName7_3_, - c.address_id as address_8_3_ -from - Customer_AUD c -inner join - Address_AUD a - on ( - c.address_id=a.id - or ( - c.address_id is null - ) - and ( - a.id is null - ) - ) -where - c.REV<=? - and c.REVTYPE<>? - and ( - c.REVEND>? - or c.REVEND is null - ) - and a.REV<=? - and a.country=? - and ( - a.REVEND>? - or a.REVEND is null - ) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [INTEGER] - [2] --- binding parameter [3] as [INTEGER] - [1] --- binding parameter [4] as [INTEGER] - [1] --- binding parameter [5] as [VARCHAR] - [România] --- binding parameter [6] as [INTEGER] - [1] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-multiple-restrictions-combined.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-multiple-restrictions-combined.sql deleted file mode 100644 index a41067211b3d..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-multiple-restrictions-combined.sql +++ /dev/null @@ -1,59 +0,0 @@ -select - cu.id as id1_5_, - cu.REV as REV2_5_, - cu.REVTYPE as REVTYPE3_5_, - cu.REVEND as REVEND4_5_, - cu.created_on as created_5_5_, - cu.firstName as firstNam6_5_, - cu.lastName as lastName7_5_, - cu.address_id as address_8_5_ -from - Customer_AUD cu -inner join - Address_AUD a - on ( - cu.address_id=a.id - or ( - cu.address_id is null - ) - and ( - a.id is null - ) - ) -inner join - Country_AUD cr - on ( - a.country_id=cr.id - or ( - a.country_id is null - ) - and ( - cr.id is null - ) - ) -where - cu.REV<=? - and cu.REVTYPE<>? - and a.city=cr.name - and ( - cu.REVEND>? - or cu.REVEND is null - ) - and a.REV<=? - and ( - a.REVEND>? - or a.REVEND is null - ) - and cr.REV<=? - and ( - cr.REVEND>? - or cr.REVEND is null - ) - --- binding parameter [1] as [INTEGER] - [2] --- binding parameter [2] as [INTEGER] - [2] --- binding parameter [3] as [INTEGER] - [2] --- binding parameter [4] as [INTEGER] - [2] --- binding parameter [5] as [INTEGER] - [2] --- binding parameter [6] as [INTEGER] - [2] --- binding parameter [7] as [INTEGER] - [2] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-multiple-restrictions.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-multiple-restrictions.sql deleted file mode 100644 index e21eba04abfd..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-multiple-restrictions.sql +++ /dev/null @@ -1,66 +0,0 @@ -select - cu.id as id1_5_, - cu.REV as REV2_5_, - cu.REVTYPE as REVTYPE3_5_, - cu.REVEND as REVEND4_5_, - cu.created_on as created_5_5_, - cu.firstName as firstNam6_5_, - cu.lastName as lastName7_5_, - cu.address_id as address_8_5_ -from - Customer_AUD cu -inner join - Address_AUD a - on ( - cu.address_id=a.id - or ( - cu.address_id is null - ) - and ( - a.id is null - ) - ) -inner join - Country_AUD co - on ( - a.country_id=co.id - or ( - a.country_id is null - ) - and ( - co.id is null - ) - ) -where - cu.REV<=? - and cu.REVTYPE<>? - and ( - cu.REVEND>? - or cu.REVEND is null - ) - and ( - a.city=? - or co.name=? - ) - and a.REV<=? - and ( - a.REVEND>? - or a.REVEND is null - ) - and co.REV<=? - and ( - co.REVEND>? - or co.REVEND is null - ) -order by - cu.created_on asc - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [INTEGER] - [2] --- binding parameter [3] as [INTEGER] - [1] --- binding parameter [4] as [VARCHAR] - [Cluj-Napoca] --- binding parameter [5] as [VARCHAR] - [România] --- binding parameter [6] as [INTEGER] - [1] --- binding parameter [7] as [INTEGER] - [1] --- binding parameter [8] as [INTEGER] - [1] --- binding parameter [9] as [INTEGER] - [1] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-restriction.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-restriction.sql deleted file mode 100644 index 4ca5a8f788d3..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-querying-entity-relation-nested-join-restriction.sql +++ /dev/null @@ -1,60 +0,0 @@ -select - cu.id as id1_5_, - cu.REV as REV2_5_, - cu.REVTYPE as REVTYPE3_5_, - cu.REVEND as REVEND4_5_, - cu.created_on as created_5_5_, - cu.firstName as firstNam6_5_, - cu.lastName as lastName7_5_, - cu.address_id as address_8_5_ -from - Customer_AUD cu -inner join - Address_AUD a - on ( - cu.address_id=a.id - or ( - cu.address_id is null - ) - and ( - a.id is null - ) - ) -inner join - Country_AUD co - on ( - a.country_id=co.id - or ( - a.country_id is null - ) - and ( - co.id is null - ) - ) -where - cu.REV<=? - and cu.REVTYPE<>? - and ( - cu.REVEND>? - or cu.REVEND is null - ) - and a.REV<=? - and ( - a.REVEND>? - or a.REVEND is null - ) - and co.REV<=? - and co.name=? - and ( - co.REVEND>? - or co.REVEND is null - ) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [INTEGER] - [2] --- binding parameter [3] as [INTEGER] - [1] --- binding parameter [4] as [INTEGER] - [1] --- binding parameter [5] as [INTEGER] - [1] --- binding parameter [6] as [INTEGER] - [1] --- binding parameter [7] as [VARCHAR] - [România] --- binding parameter [8] as [INTEGER] - [1] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-revisionlog-RevisionEntity-persist-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-revisionlog-RevisionEntity-persist-example.sql deleted file mode 100644 index 7a3e12ae59be..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-revisionlog-RevisionEntity-persist-example.sql +++ /dev/null @@ -1,36 +0,0 @@ -insert -into - Customer - (created_on, firstName, lastName, id) -values - (?, ?, ?, ?) - --- binding parameter [1] as [TIMESTAMP] - [Thu Jul 27 15:45:00 EEST 2017] --- binding parameter [2] as [VARCHAR] - [John] --- binding parameter [3] as [VARCHAR] - [Doe] --- binding parameter [4] as [BIGINT] - [1] - -insert -into - CUSTOM_REV_INFO - (timestamp, username, id) -values - (?, ?, ?) - --- binding parameter [1] as [BIGINT] - [1501159500888] --- binding parameter [2] as [VARCHAR] - [Vlad Mihalcea] --- binding parameter [3] as [INTEGER] - [1] - -insert -into - Customer_AUD - (REVTYPE, created_on, firstName, lastName, id, REV) -values - (?, ?, ?, ?, ?, ?) - --- binding parameter [1] as [INTEGER] - [0] --- binding parameter [2] as [TIMESTAMP] - [Thu Jul 27 15:45:00 EEST 2017] --- binding parameter [3] as [VARCHAR] - [John] --- binding parameter [4] as [VARCHAR] - [Doe] --- binding parameter [5] as [BIGINT] - [1] --- binding parameter [6] as [INTEGER] - [1] diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-revisionlog-custom-revision-entity-table-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-revisionlog-custom-revision-entity-table-example.sql deleted file mode 100644 index 5e2884009090..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-revisionlog-custom-revision-entity-table-example.sql +++ /dev/null @@ -1,6 +0,0 @@ -create table CUSTOM_REV_INFO ( - id integer not null, - timestamp bigint not null, - username varchar(255), - primary key (id) -) \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-modified-entities-revchanges-after-rename-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-modified-entities-revchanges-after-rename-example.sql deleted file mode 100644 index b66b68764d95..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-modified-entities-revchanges-after-rename-example.sql +++ /dev/null @@ -1,9 +0,0 @@ -insert -into - REVCHANGES - (REV, ENTITYNAME) -values - (?, ?) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [VARCHAR] - [org.hibernate.userguide.envers.EntityTypeChangeAuditTest$Customer] diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-example.sql deleted file mode 100644 index 9be648011932..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-example.sql +++ /dev/null @@ -1,39 +0,0 @@ -update - Customer -set - created_on = ?, - firstName = ?, - lastName = ? -where - id = ? - --- binding parameter [1] as [TIMESTAMP] - [2017-07-31 15:58:20.342] --- binding parameter [2] as [VARCHAR] - [John] --- binding parameter [3] as [VARCHAR] - [Doe Jr.] --- binding parameter [4] as [BIGINT] - [1] - -insert -into - REVINFO - (REV, REVTSTMP) -values - (null, ?) - --- binding parameter [1] as [BIGINT] - [1501505900439] - -insert -into - Customer_AUD - (REVTYPE, created_on, createdOn_MOD, firstName, firstName_MOD, lastName, lastName_MOD, id, REV) -values - (?, ?, ?, ?, ?, ?, ?, ?, ?) - --- binding parameter [1] as [INTEGER] - [1] --- binding parameter [2] as [TIMESTAMP] - [2017-07-31 15:58:20.342] --- binding parameter [3] as [BOOLEAN] - [false] --- binding parameter [4] as [VARCHAR] - [John] --- binding parameter [5] as [BOOLEAN] - [false] --- binding parameter [6] as [VARCHAR] - [Doe Jr.] --- binding parameter [7] as [BOOLEAN] - [true] --- binding parameter [8] as [BIGINT] - [1] --- binding parameter [9] as [INTEGER] - [2] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-mapping-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-mapping-example.sql deleted file mode 100644 index 8cf1c2896eb3..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-mapping-example.sql +++ /dev/null @@ -1,12 +0,0 @@ -create table Customer_AUD ( - id bigint not null, - REV integer not null, - REVTYPE tinyint, - created_on timestamp, - createdOn_MOD boolean, - firstName varchar(255), - firstName_MOD boolean, - lastName varchar(255), - lastName_MOD boolean, - primary key (id, REV) -) \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-at-revision-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-at-revision-example.sql deleted file mode 100644 index 33ca9a67aa1e..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-at-revision-example.sql +++ /dev/null @@ -1,25 +0,0 @@ -select - c.id as id1_3_, - c.REV as REV2_3_, - c.REVTYPE as REVTYPE3_3_, - c.REVEND as REVEND4_3_, - c.created_on as created_5_3_, - c.createdOn_MOD as createdO6_3_, - c.firstName as firstNam7_3_, - c.firstName_MOD as firstNam8_3_, - c.lastName as lastName9_3_, - c.lastName_MOD as lastNam10_3_, - c.address_id as address11_3_, - c.address_MOD as address12_3_ -from - Customer_AUD c -where - c.REV=? - and c.id=? - and c.lastName_MOD=? - and c.firstName_MOD=? - --- binding parameter [1] as [INTEGER] - [2] --- binding parameter [2] as [BIGINT] - [1] --- binding parameter [3] as [BOOLEAN] - [true] --- binding parameter [4] as [BOOLEAN] - [false] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example.sql deleted file mode 100644 index f3579a041672..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example.sql +++ /dev/null @@ -1,30 +0,0 @@ -select - c.id as id1_3_0_, - c.REV as REV2_3_0_, - defaultrev1_.REV as REV1_4_1_, - c.REVTYPE as REVTYPE3_3_0_, - c.REVEND as REVEND4_3_0_, - c.created_on as created_5_3_0_, - c.createdOn_MOD as createdO6_3_0_, - c.firstName as firstNam7_3_0_, - c.firstName_MOD as firstNam8_3_0_, - c.lastName as lastName9_3_0_, - c.lastName_MOD as lastNam10_3_0_, - c.address_id as address11_3_0_, - c.address_MOD as address12_3_0_, - defaultrev1_.REVTSTMP as REVTSTMP2_4_1_ -from - Customer_AUD c cross -join - REVINFO defaultrev1_ -where - c.id=? - and c.lastName_MOD=? - and c.firstName_MOD=? - and c.REV=defaultrev1_.REV -order by - c.REV asc - --- binding parameter [1] as [BIGINT] - [1] --- binding parameter [2] as [BOOLEAN] - [true] --- binding parameter [3] as [BOOLEAN] - [false] \ No newline at end of file diff --git a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-hasChanged-example.sql b/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-hasChanged-example.sql deleted file mode 100644 index a466fb8f3ec8..000000000000 --- a/documentation/src/main/asciidoc/userguide/chapters/envers/extras/envers-tracking-properties-changes-queries-hasChanged-example.sql +++ /dev/null @@ -1,28 +0,0 @@ -select - c.id as id1_3_0_, - c.REV as REV2_3_0_, - defaultrev1_.REV as REV1_4_1_, - c.REVTYPE as REVTYPE3_3_0_, - c.REVEND as REVEND4_3_0_, - c.created_on as created_5_3_0_, - c.createdOn_MOD as createdO6_3_0_, - c.firstName as firstNam7_3_0_, - c.firstName_MOD as firstNam8_3_0_, - c.lastName as lastName9_3_0_, - c.lastName_MOD as lastNam10_3_0_, - c.address_id as address11_3_0_, - c.address_MOD as address12_3_0_, - defaultrev1_.REVTSTMP as REVTSTMP2_4_1_ -from - Customer_AUD c cross -join - REVINFO defaultrev1_ -where - c.id = ? - and c.lastName_MOD = ? - and c.REV=defaultrev1_.REV -order by - c.REV asc - --- binding parameter [1] as [BIGINT] - [1] --- binding parameter [2] as [BOOLEAN] - [true] \ No newline at end of file diff --git a/hibernate-envers/hibernate-envers.gradle b/hibernate-envers/hibernate-envers.gradle deleted file mode 100644 index 5f474acac11f..000000000000 --- a/hibernate-envers/hibernate-envers.gradle +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later. - * See the lgpl.txt file in the root directory or . - */ - -plugins { - id "local.publishing-java-module" - id "local.publishing-group-relocation" - - id "org.hibernate.matrix-test" -} - -description = "Hibernate's entity version (audit/history) support" - -dependencies { - api project( ':hibernate-core' ) - - implementation libs.hibernateModels - implementation jakartaLibs.jaxbApi - implementation jakartaLibs.jaxb - implementation libs.jandex - implementation libs.hibernateModels - - compileOnly libs.ant - - annotationProcessor project( ':hibernate-processor' ) - compileOnly jakartaLibs.annotation - - testImplementation project( ':hibernate-testing' ) -} - -test { - include '**/**' -} - -sourceSets { - test { - ext { - enversDemoJavaDir = file( "src/demo/java" ) - enversDemoResourcesDir = file( "src/demo/resources" ) - } - java { - srcDir enversDemoJavaDir - } - resources { - srcDir enversDemoResourcesDir - } - } -} - -configurations { - tests { - description = 'Configuration for the produced test jar' - } -} - -tasks.withType( Test.class ).each { test -> - if ( project.db == "h2" || project.db == "hsqldb" ) { - // Parallel test runs when running with in-memory databases - test.maxParallelForks = Runtime.runtime.availableProcessors().intdiv( 2 ) ?: 1 - } -} - -sourcesJar { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE -} - -task testJar(type: Jar, dependsOn: testClasses) { - duplicatesStrategy = DuplicatesStrategy.EXCLUDE - archiveClassifier.set( 'test' ) - from sourceSets.test.output -} - -artifacts { - tests testJar -} - -tasks."matrix_mariadb" { - beforeTest { descriptor -> - println "Starting test: " + descriptor - } -} \ No newline at end of file diff --git a/hibernate-envers/src/demo/java/org/hibernate/envers/demo/Address.java b/hibernate-envers/src/demo/java/org/hibernate/envers/demo/Address.java deleted file mode 100644 index b266eacf833a..000000000000 --- a/hibernate-envers/src/demo/java/org/hibernate/envers/demo/Address.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.demo; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class Address { - @Id - @GeneratedValue - private int id; - - @Audited - private String streetName; - - @Audited - private Integer houseNumber; - - @Audited - private Integer flatNumber; - - @Audited - @OneToMany(mappedBy = "address") - private Set persons; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getStreetName() { - return streetName; - } - - public void setStreetName(String streetName) { - this.streetName = streetName; - } - - public Integer getHouseNumber() { - return houseNumber; - } - - public void setHouseNumber(Integer houseNumber) { - this.houseNumber = houseNumber; - } - - public Integer getFlatNumber() { - return flatNumber; - } - - public void setFlatNumber(Integer flatNumber) { - this.flatNumber = flatNumber; - } - - public Set getPersons() { - return persons; - } - - public void setPersons(Set persons) { - this.persons = persons; - } - - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Address)) return false; - - Address address = (Address) o; - - if (id != address.id) return false; - if (flatNumber != null ? !flatNumber.equals(address.flatNumber) : address.flatNumber != null) return false; - if (houseNumber != null ? !houseNumber.equals(address.houseNumber) : address.houseNumber != null) return false; - if (streetName != null ? !streetName.equals(address.streetName) : address.streetName != null) return false; - - return true; - } - - public int hashCode() { - int result; - result = id; - result = 31 * result + (streetName != null ? streetName.hashCode() : 0); - result = 31 * result + (houseNumber != null ? houseNumber.hashCode() : 0); - result = 31 * result + (flatNumber != null ? flatNumber.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/demo/java/org/hibernate/envers/demo/Person.java b/hibernate-envers/src/demo/java/org/hibernate/envers/demo/Person.java deleted file mode 100644 index 6f6642f0a9fc..000000000000 --- a/hibernate-envers/src/demo/java/org/hibernate/envers/demo/Person.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.demo; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class Person { - @Id - @GeneratedValue - private int id; - - @Audited - private String name; - - @Audited - private String surname; - - @Audited - @ManyToOne - private Address address; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getSurname() { - return surname; - } - - public void setSurname(String surname) { - this.surname = surname; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Person)) return false; - - Person person = (Person) o; - - if (id != person.id) return false; - if (name != null ? !name.equals(person.name) : person.name != null) return false; - if (surname != null ? !surname.equals(person.surname) : person.surname != null) return false; - - return true; - } - - public int hashCode() { - int result; - result = id; - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (surname != null ? surname.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/demo/java/org/hibernate/envers/demo/TestConsole.java b/hibernate-envers/src/demo/java/org/hibernate/envers/demo/TestConsole.java deleted file mode 100644 index a99867b80fd4..000000000000 --- a/hibernate-envers/src/demo/java/org/hibernate/envers/demo/TestConsole.java +++ /dev/null @@ -1,455 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.demo; -import java.io.PrintStream; -import java.util.HashMap; -import java.util.HashSet; -import java.util.InputMismatchException; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Scanner; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.Persistence; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.DefaultRevisionEntity; -import org.hibernate.envers.query.AuditEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class TestConsole { - private EntityManager entityManager; - - public TestConsole(EntityManager entityManager) { - this.entityManager = entityManager; - } - - private String convertString(String s, String def) { - if ("NULL".equals(s)) { return null; } - if ("".equals(s)) { return def; } - return s; - } - - private int convertStringToInteger(String s, int def) { - if ("".equals(s)) { return def; } - try { - return Integer.parseInt(s); - } catch (NumberFormatException e) { - System.err.println("Invalid number, returning 0."); - return 0; - } - } - - private void printPerson(StringBuilder sb, Person p) { - sb.append("id = ").append(p.getId()).append(", name = ").append(p.getName()) - .append(", surname = ").append(p.getSurname()); - - Address a = p.getAddress(); - if (a != null) { - sb.append(", address = <").append(a.getId()).append("> ").append(a.getStreetName()).append(" ") - .append(a.getHouseNumber()).append("/").append(a.getFlatNumber()); - } - } - - @SuppressWarnings("unchecked") - private void printPersons(StringBuilder sb) { - List persons = entityManager.createQuery( - "select p from Person p order by p.id").getResultList(); - - sb.append("Persons:\n"); - for (Person p : persons) { - printPerson(sb, p); - sb.append("\n"); - } - } - - private void printPersonHistory(StringBuilder sb, int personId) { - AuditReader reader = AuditReaderFactory.get(entityManager); - - List personHistory = reader.createQuery() - .forRevisionsOfEntity(Person.class, false, true) - .add(AuditEntity.id().eq(personId)) - .getResultList(); - - if (personHistory.size() == 0) { - sb.append("A person with id ").append(personId).append(" does not exist.\n"); - } else { - for (Object historyObj : personHistory) { - Object[] history = (Object[]) historyObj; - DefaultRevisionEntity revision = (DefaultRevisionEntity) history[1]; - sb.append("revision = ").append(revision.getId()).append(", "); - printPerson(sb, (Person) history[0]); - sb.append(" (").append(revision.getRevisionDate()).append(")\n"); - } - } - } - - private void printPersonAtRevision(StringBuilder sb, int personId, int revision) { - AuditReader reader = AuditReaderFactory.get(entityManager); - - Person p = reader.find(Person.class, personId, revision); - if (p == null) { - sb.append("This person does not exist at that revision."); - } else { - printPerson(sb, p); - } - } - - private void readAndSetAddress(Scanner scanner, Person p) { - Address old = p.getAddress(); - - String input = scanner.nextLine(); - if ("NULL".equals(input)) { - p.setAddress(null); - if (old != null) { - old.getPersons().remove(p); - } - } else if ("".equals(input)) { - } else { - try { - Integer id = Integer.valueOf(input); - - Address a = entityManager.find(Address.class, id); - - if (a == null) { - System.err.println("Unknown address id, setting to NULL."); - p.setAddress(null); - if (old != null) { - old.getPersons().remove(p); - } - } else { - p.setAddress(a); - - a.getPersons().add(p); - - if (old != null) { - old.getPersons().remove(p); - } - } - } catch (NumberFormatException e) { - System.err.println("Invalid address id, setting to NULL."); - p.setAddress(null); - if (old != null) { - old.getPersons().remove(p); - } - } - } - } - - private Person readNewPerson(PrintStream out, Scanner scanner) { - Person p = new Person(); - - out.print("Person name (NULL for null): "); - p.setName(convertString(scanner.nextLine(), "")); - - out.print("Person surname (NULL for null): "); - p.setSurname(convertString(scanner.nextLine(), "")); - - out.print("Person address id (NULL for null): "); - readAndSetAddress(scanner, p); - - return p; - } - - private void readModifyPerson(PrintStream out, Scanner scanner, int personId) { - Person current = entityManager.find(Person.class, personId); - - if (current == null) { - out.println("Person with id " + personId + " does not exist."); - return; - } - - out.print("Person name (NULL for null, enter for no change, current - " + current.getName() + "): "); - current.setName(convertString(scanner.nextLine(), current.getName())); - - out.print("Person surname (NULL for null, enter for no change, current - " + current.getSurname() + "): "); - current.setSurname(convertString(scanner.nextLine(), current.getSurname())); - - out.print("Person address id (NULL for null, enter for no change, current - " + - (current.getAddress() == null ? "NULL" : current.getAddress().getId()) + "): "); - readAndSetAddress(scanner, current); - } - - private void printAddress(StringBuilder sb, Address a) { - sb.append("id = ").append(a.getId()).append(", streetName = ").append(a.getStreetName()) - .append(", houseNumber = ").append(a.getHouseNumber()) - .append(", flatNumber = ").append(a.getFlatNumber()) - .append(", persons = ("); - - Iterator iter = a.getPersons().iterator(); - while (iter.hasNext()) { - Person p = iter.next(); - sb.append("<").append(p.getId()).append("> ").append(p.getName()).append(" ").append(p.getSurname()); - if (iter.hasNext()) { - sb.append(", "); - } - } - - sb.append(")"); - } - - @SuppressWarnings("unchecked") - private void printAddresses(StringBuilder sb) { - List
addresses = entityManager.createQuery( - "select a from Address a order by a.id").getResultList(); - - sb.append("Addresses:\n"); - for (Address a : addresses) { - printAddress(sb, a); - sb.append("\n"); - } - } - - private void printAddressHistory(StringBuilder sb, int addressId) { - AuditReader reader = AuditReaderFactory.get(entityManager); - - List addressHistory = reader.createQuery() - .forRevisionsOfEntity(Address.class, false, true) - .add(AuditEntity.id().eq(addressId)) - .getResultList(); - - if (addressHistory.size() == 0) { - sb.append("A address with id ").append(addressId).append(" does not exist.\n"); - } else { - for (Object historyObj : addressHistory) { - Object[] history = (Object[]) historyObj; - DefaultRevisionEntity revision = (DefaultRevisionEntity) history[1]; - sb.append("revision = ").append(revision.getId()).append(", "); - printAddress(sb, (Address) history[0]); - sb.append(" (").append(revision.getRevisionDate()).append(")\n"); - } - } - } - - private void printAddressAtRevision(StringBuilder sb, int addressId, int revision) { - AuditReader reader = AuditReaderFactory.get(entityManager); - - Address a = reader.find(Address.class, addressId, revision); - if (a == null) { - sb.append("This address does not exist at that revision."); - } else { - printAddress(sb, a); - } - } - - private Address readNewAddress(PrintStream out, Scanner scanner) { - Address a = new Address(); - - out.print("Street name (NULL for null): "); - a.setStreetName(convertString(scanner.nextLine(), "")); - - out.print("House number: "); - a.setHouseNumber(convertStringToInteger(scanner.nextLine(), 0)); - - out.print("Flat number: "); - a.setFlatNumber(convertStringToInteger(scanner.nextLine(), 0)); - - a.setPersons(new HashSet()); - - return a; - } - - private void readModifyAddress(PrintStream out, Scanner scanner, int addressId) { - Address current = entityManager.find(Address.class, addressId); - - if (current == null) { - out.println("Address with id " + addressId + " does not exist."); - return; - } - - out.print("Street name (NULL for null, enter for no change, current - " + current.getStreetName() + "): "); - current.setStreetName(convertString(scanner.nextLine(), current.getStreetName())); - - out.print("House number (enter for no change, current - " + current.getHouseNumber() + "): "); - current.setHouseNumber(convertStringToInteger(scanner.nextLine(), current.getHouseNumber())); - - out.print("Flat number (enter for no change, current - " + current.getFlatNumber() + "): "); - current.setFlatNumber(convertStringToInteger(scanner.nextLine(), current.getFlatNumber())); - } - - private void start() { - Scanner scanner = new Scanner(System.in); - PrintStream out = System.out; - - while (true) { - out.println("-----------------------------------------------"); - out.println("1 - list persons 5 - list addresses"); - out.println("2 - list person history 6 - list addresses history"); - out.println("3 - new person 7 - new address"); - out.println("4 - modify person 8 - modify address"); - out.println("9 - get person at revision 10 - get address at revision"); - out.println(" 0 - end"); - - try { - int choice = scanner.nextInt(); - - scanner.nextLine(); - - entityManager.getTransaction().begin(); - - StringBuilder sb; - int personId; - int addressId; - int revision; - switch (choice) { - case 1: - sb = new StringBuilder(); - printPersons(sb); - out.println(sb.toString()); - break; - case 2: - out.print("Person id: "); - personId = scanner.nextInt(); scanner.nextLine(); - sb = new StringBuilder(); - printPersonHistory(sb, personId); - out.println(sb.toString()); - break; - case 3: - Person p = readNewPerson(out, scanner); - entityManager.persist(p); - break; - case 4: - out.print("Person id: "); - personId = scanner.nextInt(); scanner.nextLine(); - readModifyPerson(out, scanner, personId); - break; - case 5: - sb = new StringBuilder(); - printAddresses(sb); - out.println(sb.toString()); - break; - case 6: - out.print("Address id: "); - addressId = scanner.nextInt(); scanner.nextLine(); - sb = new StringBuilder(); - printAddressHistory(sb, addressId); - out.println(sb.toString()); - break; - case 7: - Address a = readNewAddress(out, scanner); - entityManager.persist(a); - break; - case 8: - out.print("Address id: "); - addressId = scanner.nextInt(); scanner.nextLine(); - readModifyAddress(out, scanner, addressId); - break; - case 9: - out.print("Person id: "); - personId = scanner.nextInt(); scanner.nextLine(); - out.print("Revision number: "); - revision = scanner.nextInt(); scanner.nextLine(); - if (revision <= 0) { - System.out.println("Revision must be greater then 0!"); - continue; - } - sb = new StringBuilder(); - printPersonAtRevision(sb, personId, revision); - out.println(sb.toString()); - break; - case 10: - out.print("Address id: "); - addressId = scanner.nextInt(); scanner.nextLine(); - out.print("Revision number: "); - revision = scanner.nextInt(); scanner.nextLine(); - if (revision <= 0) { - System.out.println("Revision must be greater then 0!"); - continue; - } - sb = new StringBuilder(); - printAddressAtRevision(sb, addressId, revision); - out.println(sb.toString()); - break; - - case 0: - return; - } - } catch (InputMismatchException e) { - // continuing - } finally { - entityManager.getTransaction().commit(); - } - } - } - - private boolean hasData() { - return (((Long) entityManager.createQuery("select count(a) from Address a").getSingleResult()) + - ((Long) entityManager.createQuery("select count(p) from Person p").getSingleResult())) > 0; - } - - private void populateTestData() { - entityManager.getTransaction().begin(); - - if (!hasData()) { - Person p1 = new Person(); - Person p2 = new Person(); - Person p3 = new Person(); - - Address a1 = new Address(); - Address a2 = new Address(); - - p1.setName("James"); - p1.setSurname("Bond"); - p1.setAddress(a1); - - p2.setName("John"); - p2.setSurname("McClane"); - p2.setAddress(a2); - - p3.setName("Holly"); - p3.setSurname("Gennaro"); - p3.setAddress(a2); - - a1.setStreetName("MI6"); - a1.setHouseNumber(18); - a1.setFlatNumber(25); - a1.setPersons(new HashSet()); - a1.getPersons().add(p1); - - a2.setStreetName("Nakatomi Plaza"); - a2.setHouseNumber(10); - a2.setFlatNumber(34); - a2.setPersons(new HashSet()); - a2.getPersons().add(p2); - a2.getPersons().add(p3); - - entityManager.persist(a1); - entityManager.persist(a2); - - entityManager.persist(p1); - entityManager.persist(p2); - entityManager.persist(p3); - - System.out.println("The DB was populated with example data."); - } - - entityManager.getTransaction().commit(); - } - - public static void main(String[] args) { - Map configurationOverrides = new HashMap(); - EntityManagerFactory emf = Persistence.createEntityManagerFactory("ConsolePU", configurationOverrides); - EntityManager entityManager = emf.createEntityManager(); - - TestConsole console = new TestConsole(entityManager); - - System.out.println(""); - System.out.println("Welcome to EntityVersions demo!"); -// If you would like to use HSQLDB, uncomment relevant entries in -// hibernate-envers/src/demo/resources/META-INF/persistence.xml descriptor and add required JAR libraries. -// String userDbFile = System.getProperty("java.io.tmpdir") + File.separator + "_versions_demo.db"; -// System.out.println("HSQLDB database file location: " + userDbFile); - - console.populateTestData(); - console.start(); - - entityManager.close(); - emf.close(); - } -} diff --git a/hibernate-envers/src/demo/resources/META-INF/persistence.xml b/hibernate-envers/src/demo/resources/META-INF/persistence.xml deleted file mode 100644 index f1e27239bd88..000000000000 --- a/hibernate-envers/src/demo/resources/META-INF/persistence.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - org.hibernate.jpa.HibernatePersistenceProvider - org.hibernate.envers.demo.Address - org.hibernate.envers.demo.Person - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditJoinTable.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditJoinTable.java deleted file mode 100644 index e8faea618a9a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditJoinTable.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import jakarta.persistence.JoinColumn; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.METHOD}) -public @interface AuditJoinTable { - /** - * Name of the join table. Defaults to a concatenation of the names of the primary table of the entity - * owning the association and of the primary table of the entity referenced by the association. - */ - String name() default ""; - - /** - * The schema of the join table. Defaults to the schema of the entity owning the association. - */ - String schema() default ""; - - /** - * The catalog of the join table. Defaults to the catalog of the entity owning the association. - */ - String catalog() default ""; - - /** - * The foreign key columns of the join table which reference the primary table of the entity that does not - * own the association (i.e. the inverse side of the association). - */ - JoinColumn[] inverseJoinColumns() default {}; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditMappedBy.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditMappedBy.java deleted file mode 100644 index 9b93d0054c34..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditMappedBy.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - *

- * Annotation to specify a "fake" bi-directional relation. Such a relation uses {@code @OneToMany} + - * {@code @JoinColumn} on the one side, and {@code @ManyToOne} + {@code @Column(insertable=false, updatable=false)} on - * the many side. Then, Envers won't use a join table to audit this relation, but will store changes as in a normal - * bi-directional relation. - *

- *

- * This annotation is experimental and may change in future releases. - *

- * - * @author Adam Warski (adam at warski dot org) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.FIELD}) -public @interface AuditMappedBy { - /** - * Name of the property in the related entity which maps back to this entity. The property should be - * mapped with {@code @ManyToOne} and {@code @Column(insertable=false, updatable=false)}. - */ - String mappedBy(); - - /** - * Name of the property in the related entity which maps to the position column. Should be specified only - * for indexed collection, when {@link jakarta.persistence.OrderColumn} is used on the collection. The - * property should be mapped with {@code @Column(insertable=false, updatable=false)}. - */ - String positionMappedBy() default ""; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditOverride.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditOverride.java deleted file mode 100644 index 111f448d0fc6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditOverride.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.Repeatable; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * The {@code AuditingOverride} annotation is used to override the auditing - * behavior of a superclass or single property inherited from {@link jakarta.persistence.MappedSuperclass} - * type, or attribute inside an embedded component. - * - * @author Erik-Berndt Scheper - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * - * @see jakarta.persistence.Embedded - * @see jakarta.persistence.Embeddable - * @see jakarta.persistence.MappedSuperclass - * @see jakarta.persistence.AssociationOverride - * @see AuditJoinTable - */ -@Target({TYPE, METHOD, FIELD}) -@Retention(RUNTIME) -@Repeatable(AuditOverrides.class) -public @interface AuditOverride { - - /** - * Name of the field (or property) whose mapping is being overridden. Allows empty value if - * {@link AuditOverride} is used to change auditing behavior of all attributes inherited from - * {@link jakarta.persistence.MappedSuperclass} type. - */ - String name() default ""; - - /** - * Indicates if the field (or property) is audited; defaults to {@code true}. - */ - boolean isAudited() default true; - - /** - * New {@link AuditJoinTable} used for this field (or property). Its value - * is ignored if {@link #isAudited()} equals to {@code false}. - */ - AuditJoinTable auditJoinTable() default @AuditJoinTable; - - /** - * Specifies class which field (or property) mapping is being overridden. Required if - * {@link AuditOverride} is used to change auditing behavior of attributes inherited from - * {@link jakarta.persistence.MappedSuperclass} type. - */ - Class forClass() default void.class; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditOverrides.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditOverrides.java deleted file mode 100644 index 23f75e0c5f0c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditOverrides.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.FIELD; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * The {@code AuditingOverrides} annotation is used to override the auditing - * behavior for one ore more fields (or properties) inside an embedded - * component. - * - * @author Erik-Berndt Scheper - * @see jakarta.persistence.Embedded - * @see jakarta.persistence.Embeddable - * @see jakarta.persistence.MappedSuperclass - * @see jakarta.persistence.AssociationOverride - * @see jakarta.persistence.AssociationOverrides - * @see AuditJoinTable - * @see AuditOverride - */ -@Target({TYPE, METHOD, FIELD}) -@Retention(RUNTIME) -public @interface AuditOverrides { - /** - * An array of {@link AuditOverride} values, to define the new auditing - * behavior. - */ - AuditOverride[] value(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditReader.java deleted file mode 100644 index 46b399b4117e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditReader.java +++ /dev/null @@ -1,373 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.HibernateException; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.envers.query.AuditQueryCreator; - -/** - * Provides access to past versions of {@linkplain Audited audited} entities based on - * a global revision. A new revision is created every time any audited entity - * is created, updated, or deleted. - *

- * By default, each revision is defined by: - *

    - *
  • a strictly-increasing global revision number, and - *
  • the Unix epoch at which the revision was made. - *
- * The method {@link #getRevisionNumberForDate(LocalDateTime)} obtains the revision - * number which was current at the given instant. - *

- * Given a revision number, we may obtain historical versions of any entity. For example, - * {@link #find(Class, Object, Number)} retrieves the version of an entity with the given - * id which was current in the given revision. Much more complex queries are possible via - * {@link #createQuery()}. - * - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public interface AuditReader { - /** - * Find an entity by primary key at the given revision. - * - * @param cls Class of the entity. - * @param primaryKey Primary key of the entity. - * @param revision Revision in which to get the entity. - * @param The type of the entity to find - * - * @return The found entity instance at the given revision (its properties may be partially filled - * if not all properties are audited) or null, if an entity with that id didn't exist at that - * revision. - * - * @throws IllegalArgumentException If cls or primaryKey is null or revision is less or equal to 0. - * @throws NotAuditedException When entities of the given class are not audited. - * @throws IllegalStateException If the associated entity manager is closed. - */ - T find(Class cls, Object primaryKey, Number revision) throws - IllegalArgumentException, NotAuditedException, IllegalStateException; - - /** - * Find an entity by primary key on the given date. The date specifies restricting - * the result to any entity created on or before the date with the highest revision - * number. - * - * @param cls Class of the entity. - * @param primaryKey Primary key of the entity. - * @param date Date for which to get entity revision. - * - * @return The found entity instance at created on or before the specified date with the highest - * revision number or null, if an entity with the id had not been created on or before the - * specified date. - * - * @throws IllegalArgumentException if cls, primaryKey, or date is null. - * @throws NotAuditedException When entities of the given class are not audited. - * @throws RevisionDoesNotExistException If the given date is before the first revision. - * @throws IllegalStateException If the associated entity manager is closed. - */ - T find(Class cls, Object primaryKey, Date date) throws - IllegalArgumentException, NotAuditedException, RevisionDoesNotExistException, IllegalStateException; - - /** - * Find an entity by primary key on the given datetime. The datetime specifies - * restricting the result to any entity created on or before the date with the highest - * revision number. - * - * @param cls Class of the entity. - * @param primaryKey Primary key of the entity. - * @param datetime Datetime for which to get entity revision. - * - * @return The found entity instance at created on or before the specified date with the highest - * revision number or null, if an entity with the id had not been created on or before the - * specified date. - * - * @throws IllegalArgumentException if cls, primaryKey, or date is null. - * @throws NotAuditedException When entities of the given class are not audited. - * @throws RevisionDoesNotExistException If the given date is before the first revision. - * @throws IllegalStateException If the associated entity manager is closed. - */ - T find(Class cls, Object primaryKey, LocalDateTime datetime) throws - IllegalArgumentException, NotAuditedException, RevisionDoesNotExistException, IllegalStateException; - - /** - * Find an entity by primary key at the given revision with the specified entityName. - * - * @param cls Class of the entity. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code cls}). - * @param primaryKey Primary key of the entity. - * @param revision Revision in which to get the entity. - * @param The type of the entity to find - * - * @return The found entity instance at the given revision (its properties may be partially filled - * if not all properties are audited) or null, if an entity with that id didn't exist at that - * revision. - * - * @throws IllegalArgumentException If cls or primaryKey is null or revision is less or equal to 0. - * @throws NotAuditedException When entities of the given class are not audited. - * @throws IllegalStateException If the associated entity manager is closed. - */ - T find( - Class cls, String entityName, Object primaryKey, - Number revision) throws IllegalArgumentException, - NotAuditedException, IllegalStateException; - - /** - * Find an entity by primary key at the given revision with the specified entityName, - * possibly including deleted entities in the search. - * - * @param cls Class of the entity. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code cls}). - * @param primaryKey Primary key of the entity. - * @param revision Revision in which to get the entity. - * @param includeDeletions Whether to include deleted entities in the search. - * @param The type of the entity to find - * - * @return The found entity instance at the given revision (its properties may be partially filled - * if not all properties are audited) or null, if an entity with that id didn't exist at that - * revision. - * - * @throws IllegalArgumentException If cls or primaryKey is null or revision is less or equal to 0. - * @throws NotAuditedException When entities of the given class are not audited. - * @throws IllegalStateException If the associated entity manager is closed. - */ - T find( - Class cls, String entityName, Object primaryKey, - Number revision, boolean includeDeletions) throws IllegalArgumentException, - NotAuditedException, IllegalStateException; - - /** - * Get a list of revision numbers, at which an entity was modified. - * - * @param cls Class of the entity. - * @param primaryKey Primary key of the entity. - * - * @return A list of revision numbers, at which the entity was modified, sorted in ascending order (so older - * revisions come first). - * - * @throws NotAuditedException When entities of the given class are not audited. - * @throws IllegalArgumentException If cls or primaryKey is null. - * @throws IllegalStateException If the associated entity manager is closed. - */ - List getRevisions(Class cls, Object primaryKey) - throws IllegalArgumentException, NotAuditedException, IllegalStateException; - - /** - * Get a list of revision numbers, at which an entity was modified, looking by entityName. - * - * @param cls Class of the entity. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code cls}). - * @param primaryKey Primary key of the entity. - * - * @return A list of revision numbers, at which the entity was modified, sorted in ascending order (so older - * revisions come first). - * - * @throws NotAuditedException When entities of the given class are not audited. - * @throws IllegalArgumentException If cls or primaryKey is null. - * @throws IllegalStateException If the associated entity manager is closed. - */ - List getRevisions(Class cls, String entityName, Object primaryKey) - throws IllegalArgumentException, NotAuditedException, - IllegalStateException; - - /** - * Get the date, at which a revision was created. - * - * @param revision Number of the revision for which to get the date. - * - * @return Date of commiting the given revision. - * - * @throws IllegalArgumentException If revision is less or equal to 0. - * @throws RevisionDoesNotExistException If the revision does not exist. - * @throws IllegalStateException If the associated entity manager is closed. - */ - Date getRevisionDate(Number revision) throws IllegalArgumentException, RevisionDoesNotExistException, - IllegalStateException; - - /** - * Gets the revision number, that corresponds to the given date. More precisely, returns - * the number of the highest revision, which was created on or before the given date. So: - * getRevisionDate(getRevisionNumberForDate(date)) <= date and - * getRevisionDate(getRevisionNumberForDate(date)+1) > date. - * - * @param date Date for which to get the revision. - * - * @return Revision number corresponding to the given date. - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws RevisionDoesNotExistException If the given date is before the first revision. - * @throws IllegalArgumentException If date is null. - */ - Number getRevisionNumberForDate(Date date) throws IllegalStateException, RevisionDoesNotExistException, - IllegalArgumentException; - - /** - * Gets the revision number, that corresponds to the given date. More precisely, returns - * the number of the highest revision, which was created on or before the given date. So: - * getRevisionDate(getRevisionNumberForDate(date)) <= date and - * getRevisionDate(getRevisionNumberForDate(date)+1) > date. - * - * @param date Date for which to get the revision. - * - * @return Revision number corresponding to the given date. - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws RevisionDoesNotExistException If the given date is before the first revision. - * @throws IllegalArgumentException If date is null. - */ - Number getRevisionNumberForDate(LocalDateTime date) throws IllegalStateException, - RevisionDoesNotExistException, IllegalArgumentException; - - /** - * Gets the revision number, that corresponds to the given date. More precisely, returns - * the number of the highest revision, which was created on or before the given date. So: - * getRevisionDate(getRevisionNumberForDate(date)) <= date and - * getRevisionDate(getRevisionNumberForDate(date)+1) > date. - * - * @param date Date for which to get the revision. - * - * @return Revision number corresponding to the given date. - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws RevisionDoesNotExistException If the given date is before the first revision. - * @throws IllegalArgumentException If date is null. - */ - Number getRevisionNumberForDate(Instant date) throws IllegalStateException, - RevisionDoesNotExistException, IllegalArgumentException; - - /** - * A helper method; should be used only if a custom revision entity is used. See also {@link RevisionEntity}. - * - * @param revisionEntityClass Class of the revision entity. Should be annotated with {@link RevisionEntity}. - * @param revision Number of the revision for which to get the data. - * @param The type of the revision entity to find - * - * @return Entity containing data for the given revision. - * - * @throws IllegalArgumentException If revision is less or equal to 0 or if the class of the revision entity - * is invalid. - * @throws RevisionDoesNotExistException If the revision does not exist. - * @throws IllegalStateException If the associated entity manager is closed. - */ - T findRevision(Class revisionEntityClass, Number revision) throws IllegalArgumentException, - RevisionDoesNotExistException, IllegalStateException; - - /** - * Find a map of revisions using the revision numbers specified. - * - * @param revisionEntityClass Class of the revision entity. Should be annotated with - * {@link RevisionEntity}. - * @param revisions Revision numbers of the revision for which to get the data. - * @param The type of the revision entity to find - * - * @return A map of revision number and the given revision entity. - * - * @throws IllegalArgumentException If a revision number is less or equal to 0 or if the class of - * the revision entity is invalid. - * @throws IllegalStateException If the associated entity manager is closed. - */ - Map findRevisions( - Class revisionEntityClass, - Set revisions) throws IllegalArgumentException, - IllegalStateException; - - /** - * Gets an instance of the current revision entity, to which any entries in the audit tables will be bound. - * Please note the if {@code persist} is {@code false}, and no audited entities are modified in this session, - * then the obtained revision entity instance won't be persisted. If {@code persist} is {@code true}, the revision - * entity instance will always be persisted, regardless of whether audited entities are changed or not. - * - * @param revisionEntityClass Class of the revision entity. Should be annotated with {@link RevisionEntity}. - * @param persist If the revision entity is not yet persisted, should it become persisted. This way, the primary - * identifier (id) will be filled (if it's assigned by the DB) and available, but the revision entity will be - * persisted even if there are no changes to audited entities. Otherwise, the revision number (id) can be - * {@code null}. - * @param The type of the revision entity to find - * - * @return The current revision entity, to which any entries in the audit tables will be bound. - * @deprecated use {@link RevisionListener} instead. While this method is - * being deprecated, expect a new API for this in 6.0. - */ - @Deprecated(since = "5.2") - T getCurrentRevision(Class revisionEntityClass, boolean persist); - - /** - * Creates an audit query - * - * @return A query creator, associated with this AuditReader instance, with which queries can be - * created and later executed. Shouldn't be used after the associated Session or EntityManager - * is closed. - */ - AuditQueryCreator createQuery(); - - /** - * Checks if the entityClass was configured to be audited. Calling - * isEntityNameAudited() with the string of the class name will return the - * same value. - * - * @param entityClass Class of the entity asking for audit support - * - * @return true if the entityClass is audited. - */ - boolean isEntityClassAudited(Class entityClass); - - /** - * Checks if the entityName was configured to be audited. - * - * @param entityName EntityName of the entity asking for audit support. - * - * @return true if the entityName is audited. - */ - boolean isEntityNameAudited(String entityName); - - - /** - * Get the entity name of an instance of an entity returned by this AuditReader. - *

- * Each AuditReader maintains its own internal cache of objects which it has provided the caller, much like - * the {@link org.hibernate.Session} maintains a first-level cache. It is this specific cache which this - * call uses to find and return the entity-name. This means if the supplied three values do not correlate - * to an existing entry in the AuditReader's first-level cache, this method will result in throwing a - * {@link HibernateException} since that entity has not yet been loaded. - * - * @param primaryKey the primary key of the associated entity instance. - * @param revision the revision of the associated entity of interest. - * @param entity the entity instance that was obtained previously from the same AuditReader. - * - * @return the entityName for the given entity. - * @throws HibernateException if one of the following conditions are satisfied: - *

    - *
  • The supplied entity has yet to be returned by this AuditReader instance, e.g. it isn't in the reader's cache.
  • - *
  • The supplied entity, primary key, and revision triplet is not a valid combination.
  • - *
- */ - String getEntityName(Object primaryKey, Number revision, Object entity) - throws HibernateException; - - /** - * @return Basic implementation of {@link CrossTypeRevisionChangesReader} interface. Raises an exception if the default - * mechanism of tracking entity names modified during revisions has not been enabled. - * - * @throws AuditException If none of the following conditions is satisfied: - *
    - *
  • org.hibernate.envers.track_entities_changed_in_revision - * parameter is set to true.
  • - *
  • Custom revision entity (annotated with {@link RevisionEntity}) - * extends {@link DefaultTrackingModifiedEntitiesRevisionEntity} base class.
  • - *
  • Custom revision entity (annotated with {@link RevisionEntity}) encapsulates a field - * marked with {@link ModifiedEntityNames} interface.
  • - *
- */ - CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() throws AuditException; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java deleted file mode 100644 index 78fa1c90643f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditReaderFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import jakarta.persistence.EntityManager; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.reader.AuditReaderImpl; -import org.hibernate.service.ServiceRegistry; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class AuditReaderFactory { - private AuditReaderFactory() { - } - - /** - * Create an audit reader associated with an open session. - * - * @param session An open session. - * - * @return An audit reader associated with the given sesison. It shouldn't be used - * after the session is closed. - * - * @throws AuditException When the given required listeners aren't installed. - */ - public static AuditReader get(Session session) throws AuditException { - SessionImplementor sessionImpl; - if ( !(session instanceof SessionImplementor) ) { - sessionImpl = (SessionImplementor) session.getSessionFactory().getCurrentSession(); - } - else { - sessionImpl = (SessionImplementor) session; - } - - final ServiceRegistry serviceRegistry = sessionImpl.getFactory().getServiceRegistry(); - final EnversService enversService = serviceRegistry.getService( EnversService.class ); - - return new AuditReaderImpl( enversService, session, sessionImpl ); - } - - /** - * Create an audit reader associated with an open entity manager. - * - * @param entityManager An open entity manager. - * - * @return An audit reader associated with the given entity manager. It shouldn't be used - * after the entity manager is closed. - * - * @throws AuditException When the given entity manager is not based on Hibernate, or if the required - * listeners aren't installed. - */ - public static AuditReader get(EntityManager entityManager) throws AuditException { - if ( entityManager.getDelegate() instanceof Session ) { - return get( (Session) entityManager.getDelegate() ); - } - - if ( entityManager.getDelegate() instanceof EntityManager ) { - return get( (EntityManager) entityManager.getDelegate() ); - } - - throw new AuditException( "Hibernate EntityManager not present!" ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/AuditTable.java b/hibernate-envers/src/main/java/org/hibernate/envers/AuditTable.java deleted file mode 100644 index 354b4e921494..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/AuditTable.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface AuditTable { - /** - * The name of the table - */ - String value(); - - /** - * The schema of the table. Defaults to the schema of the annotated entity. - */ - String schema() default ""; - - /** - * The catalog of the table. Defaults to the catalog of the annotated entity. - */ - String catalog() default ""; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/Audited.java b/hibernate-envers/src/main/java/org/hibernate/envers/Audited.java deleted file mode 100644 index bc3966de1c02..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/Audited.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.hibernate.Incubating; - -/** - * When applied to a class, indicates that all of its properties should be audited. - * When applied to a field, indicates that this field should be audited. - * - * @author Adam Warski (adam at warski dot org) - * @author Tomasz Bech - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD}) -public @interface Audited { - /** - * Specifies if the entity that is the target of the relation should be audited or not. If not, then when - * reading a historic version an audited entity, the relation will always point to the "current" entity. - * This is useful for dictionary-like entities, which don't change and don't need to be audited. - */ - RelationTargetAuditMode targetAuditMode() default RelationTargetAuditMode.AUDITED; - - /** - * Specifies if the entity that is the relation target isn't found, how should the system react. - * - * The default is to use the behavior configured based on the system property: - * {@link org.hibernate.envers.configuration.EnversSettings#GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG}. - * - * When the configuration property is {@code true}, this is to use the legacy behavior which - * implies that the system should throw the {@code EntityNotFoundException} errors unless - * the user has explicitly specified the value {@link RelationTargetNotFoundAction#IGNORE}. - * - * When the configuration property is {@code false}, this is to use the new behavior which - * implies that the system should ignore the {@code EntityNotFoundException} errors unless - * the user has explicitly specified the value {@link RelationTargetNotFoundAction#ERROR}. - */ - @Incubating - RelationTargetNotFoundAction targetNotFoundAction() default RelationTargetNotFoundAction.DEFAULT; - - /** - * Specifies the superclasses for which properties should be audited, even if the superclasses are not - * annotated with {@link Audited}. Causes all properties of the listed classes to be audited, just as if the - * classes had {@link Audited} annotation applied on the class level. - *

- * The scope of this functionality is limited to the class hierarchy of the annotated entity. - *

- * If a parent type lists any of its parent types using this attribute, all properties in the specified classes - * will also be audited. - * - * @deprecated Use {@code @AuditOverride(forClass=SomeEntity.class)} instead. - */ - @Deprecated - Class[] auditParents() default {}; - - /** - * Should a modification flag be stored for each property in the annotated class or for the annotated - * property. The flag stores information if a property has been changed at a given revision. - * This can be used for example in queries. - */ - boolean withModifiedFlag() default false; - - /** - * The column name of the modified field. Analogous to the name attribute of the @{@link jakarta.persistence.Column} - * annotation. Ignored if withModifiedFlag is false. - */ - String modifiedColumnName() default ""; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/CollectionAuditTable.java b/hibernate-envers/src/main/java/org/hibernate/envers/CollectionAuditTable.java deleted file mode 100644 index 34c3a7504775..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/CollectionAuditTable.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import org.hibernate.Incubating; - -/** - * Allows for the customization of an Envers audit collection table. - * - * @author Chris Cranford - */ -@Incubating -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.METHOD}) -public @interface CollectionAuditTable { - /** - * The name of the table - */ - String name(); - - /** - * The schema of the table. Defaults to the schema of the mapping. - */ - String schema() default ""; - - /** - * The catalog of the table. Defaults to the catalog of the mapping. - */ - String catalog() default ""; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/CrossTypeRevisionChangesReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/CrossTypeRevisionChangesReader.java deleted file mode 100644 index 214d906711cc..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/CrossTypeRevisionChangesReader.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.envers.tools.Pair; - -/** - * Queries that allow retrieving snapshots of all entities (regardless of their particular type) changed in the given - * revision. Note that this API can be legally used only when default mechanism of tracking modified entity names - * is enabled. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public interface CrossTypeRevisionChangesReader { - /** - * Find all entities changed (added, updated and removed) in a given revision. Executes n+1 SQL queries, - * where n is a number of different entity classes modified within specified revision. - * - * @param revision Revision number. - * - * @return Snapshots of all audited entities changed in a given revision. - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws IllegalArgumentException If a revision number is null, less or equal to 0. - */ - List findEntities(Number revision) throws IllegalStateException, IllegalArgumentException; - - /** - * Find all entities changed (added, updated or removed) in a given revision. Executes n+1 SQL queries, - * where n is a number of different entity classes modified within specified revision. - * - * @param revision Revision number. - * @param revisionType Type of modification. - * - * @return Snapshots of all audited entities changed in a given revision and filtered by modification type. - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws IllegalArgumentException If a revision number is {@code null}, less or equal to 0. - */ - List findEntities(Number revision, RevisionType revisionType) throws IllegalStateException, - IllegalArgumentException; - - /** - * Find all entities changed (added, updated and removed) in a given revision grouped by modification type. - * Executes mn+1 SQL queries, where: - *
    - *
  • n - number of different entity classes modified within specified revision. - *
  • m - number of different revision types. See {@link RevisionType} enum. - *
- * - * @param revision Revision number. - * - * @return Map containing lists of entity snapshots grouped by modification operation (e.g. addition, update, removal). - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws IllegalArgumentException If a revision number is {@code null}, less or equal to 0. - */ - Map> findEntitiesGroupByRevisionType(Number revision) - throws IllegalStateException, - IllegalArgumentException; - - /** - * Returns set of entity names and corresponding Java classes modified in a given revision. - * - * @param revision Revision number. - * - * @return Set of entity names and corresponding Java classes modified in a given revision. - * - * @throws IllegalStateException If the associated entity manager is closed. - * @throws IllegalArgumentException If a revision number is {@code null}, less or equal to 0. - */ - Set> findEntityTypes(Number revision) - throws IllegalStateException, IllegalArgumentException; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/DateTimeFormatter.java b/hibernate-envers/src/main/java/org/hibernate/envers/DateTimeFormatter.java deleted file mode 100644 index 5f4540e481b7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/DateTimeFormatter.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.text.DateFormat; -import java.util.Locale; - -/** - * Utility class that provides access to a {@link DateFormat} instance. - * - * @author Chris Cranford - */ -public class DateTimeFormatter { - - public static DateFormat INSTANCE = DateFormat.getDateTimeInstance( - DateFormat.DEFAULT, - DateFormat.DEFAULT, - Locale.ENGLISH ); - - private DateTimeFormatter() { - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/DefaultRevisionEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/DefaultRevisionEntity.java deleted file mode 100644 index 2aefe1337c6a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/DefaultRevisionEntity.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import jakarta.persistence.Entity; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -@Entity -public final class DefaultRevisionEntity extends RevisionMapping { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/DefaultTrackingModifiedEntitiesRevisionEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/DefaultTrackingModifiedEntitiesRevisionEntity.java deleted file mode 100644 index 0c4e6cd1ae49..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/DefaultTrackingModifiedEntitiesRevisionEntity.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import jakarta.persistence.Entity; - -/** - * Extension of standard {@link DefaultRevisionEntity} that allows tracking entity names changed in each revision. - * This revision entity is implicitly used when {@code org.hibernate.envers.track_entities_changed_in_revision} - * parameter is set to {@code true}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public final class DefaultTrackingModifiedEntitiesRevisionEntity extends TrackingModifiedEntitiesRevisionMapping { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/EntityTrackingRevisionListener.java b/hibernate-envers/src/main/java/org/hibernate/envers/EntityTrackingRevisionListener.java deleted file mode 100644 index 29a1d4db21cb..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/EntityTrackingRevisionListener.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -/** - * Extension of standard {@link RevisionListener} that notifies whenever an entity instance has been - * added, modified or removed within current revision boundaries. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @see RevisionListener - */ -public interface EntityTrackingRevisionListener extends RevisionListener { - /** - * Called after audited entity data has been persisted. - * @param entityClass Audited entity class. - * @param entityName Name of the audited entity. May be useful when Java class is mapped multiple times, - * potentially to different tables. - * @param entityId Identifier of modified entity. - * @param revisionType Modification type (addition, update or removal). - * @param revisionEntity An instance of the entity annotated with {@link RevisionEntity}. - */ - void entityChanged( - Class entityClass, String entityName, Object entityId, RevisionType revisionType, - Object revisionEntity); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/ModifiedEntityNames.java b/hibernate-envers/src/main/java/org/hibernate/envers/ModifiedEntityNames.java deleted file mode 100644 index 608609195961..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/ModifiedEntityNames.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks a property which holds entity names that have been modified during each revision. - * This annotation expects field of {@literal Set} type. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.FIELD}) -public @interface ModifiedEntityNames { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/NotAudited.java b/hibernate-envers/src/main/java/org/hibernate/envers/NotAudited.java deleted file mode 100644 index a424631889bd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/NotAudited.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * When applied to a field, indicates that this field should not be audited. - * - * @author Sebastian Komander - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.FIELD}) -public @interface NotAudited { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RelationTargetAuditMode.java b/hibernate-envers/src/main/java/org/hibernate/envers/RelationTargetAuditMode.java deleted file mode 100644 index df953f5459b1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RelationTargetAuditMode.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - - -/** - * @author Tomasz Bech - */ -public enum RelationTargetAuditMode { - AUDITED, - NOT_AUDITED -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RelationTargetNotFoundAction.java b/hibernate-envers/src/main/java/org/hibernate/envers/RelationTargetNotFoundAction.java deleted file mode 100644 index 5a4e10fff64d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RelationTargetNotFoundAction.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -/** - * Defines the actions on how to handle {@code EntityNotFoundException} cases when a relation - * between two entities (audited or not) cannot be found in the data store. - * - * @author Chris Cranford - * @see org.hibernate.annotations.NotFoundAction - */ -public enum RelationTargetNotFoundAction { - /** - * Specifies that exception handling should be based on the global system property: - * {@link org.hibernate.envers.configuration.EnversSettings#GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG}. - */ - DEFAULT, - - /** - * Specifies that exceptions should be thrown regardless of the global system property: - * {@link org.hibernate.envers.configuration.EnversSettings#GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG}. - */ - ERROR, - - /** - * Specifies that exceptions should be ignored regardless of the global system property: - * {@link org.hibernate.envers.configuration.EnversSettings#GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG}. - */ - IGNORE -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/RevisionEntity.java deleted file mode 100644 index cb3cbf7a2446..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks an entity to be created whenever a new revision is generated. The revisions entity must have - * an integer-valued unique property (preferably the primary id) annotated with {@link RevisionNumber} - * and a long-valued property annotated with {@link RevisionTimestamp}. The {@link DefaultRevisionEntity} - * already has those two fields, so you may extend it, but you may also write your own revision entity - * from scratch. - * - * @author Adam Warski (adam at warski dot org) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface RevisionEntity { - /** - * The optional listener that will be used to fill in the custom revision entity. - * May also be specified using the {@code org.hibernate.envers.revision_listener} configuration property. - */ - Class value() default RevisionListener.class; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionListener.java b/hibernate-envers/src/main/java/org/hibernate/envers/RevisionListener.java deleted file mode 100644 index 21d689e41571..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionListener.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - - -/** - * An implementation of this class, having a no-arg constructor, should be passed as an argument to the - * {@link RevisionEntity} annotation. - * - * @author Adam Warski (adam at warski dot org) - */ -public interface RevisionListener { - /** - * Called when a new revision is created. - * - * @param revisionEntity An instance of the entity annotated with {@link RevisionEntity}, which will be persisted - * after this method returns. All properties on this entity that are to be persisted should be set by this method. - */ - void newRevision(Object revisionEntity); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionMapping.java b/hibernate-envers/src/main/java/org/hibernate/envers/RevisionMapping.java deleted file mode 100644 index da1351d026e2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionMapping.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.Transient; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -@MappedSuperclass -public class RevisionMapping implements Serializable { - private static final long serialVersionUID = 8530213963961662300L; - - @Id - @GeneratedValue - @RevisionNumber - private int id; - - @RevisionTimestamp - private long timestamp; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - @Transient - public Date getRevisionDate() { - return new Date( timestamp ); - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RevisionMapping) ) { - return false; - } - - final RevisionMapping that = (RevisionMapping) o; - return id == that.id - && timestamp == that.timestamp; - } - - @Override - public int hashCode() { - int result; - result = id; - result = 31 * result + (int) (timestamp ^ (timestamp >>> 32)); - return result; - } - - @Override - public String toString() { - return "DefaultRevisionEntity(id = " + id - + ", revisionDate = " + DateTimeFormatter.INSTANCE.format(getRevisionDate() ) + ")"; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionNumber.java b/hibernate-envers/src/main/java/org/hibernate/envers/RevisionNumber.java deleted file mode 100644 index d3f46c2a4cf6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionNumber.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks a property which will hold the number of the revision in a revision entity, see - * {@link RevisionListener}. Values of this property should form a strictly-increasing sequence - * of numbers. The value of this property won't be set by Envers. In most cases, this should be - * an auto-generated database-assigned primary id. - * - * @author Adam Warski (adam at warski dot org) - * @author Sanne Grinovero - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.FIELD}) -public @interface RevisionNumber { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionTimestamp.java b/hibernate-envers/src/main/java/org/hibernate/envers/RevisionTimestamp.java deleted file mode 100644 index 6e6be00b33f1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionTimestamp.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks a property which will hold the timestamp of the revision in a revision entity, see - * {@link RevisionListener}. The value of this property will be automatically set by Envers. - * - * @author Adam Warski (adam at warski dot org) - * @author Sanne Grinovero - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.FIELD}) -public @interface RevisionTimestamp { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionType.java b/hibernate-envers/src/main/java/org/hibernate/envers/RevisionType.java deleted file mode 100644 index bba3ca35a720..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/RevisionType.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - - -/** - * Type of the revision. - * - * @author Adam Warski (adam at warski dot org) - */ -public enum RevisionType { - /** - * Indicates that the entity was added (persisted) at that revision. - */ - ADD( (byte) 0 ), - /** - * Indicates that the entity was modified (one or more of its fields) at that revision. - */ - MOD( (byte) 1 ), - /** - * Indicates that the entity was deleted (removed) at that revision. - */ - DEL( (byte) 2 ); - - private Byte representation; - - RevisionType(byte representation) { - this.representation = representation; - } - - public Byte getRepresentation() { - return representation; - } - - public static RevisionType fromRepresentation(Object representation) { - if ( !( representation instanceof Byte ) ) { - return null; - } - return fromRepresentation( (byte) representation ); - } - - public static RevisionType fromRepresentation(byte representation) { - switch ( representation ) { - case 0: { - return ADD; - } - case 1: { - return MOD; - } - case 2: { - return DEL; - } - default: { - throw new IllegalArgumentException( "Unknown representation: " + representation ); - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/SecondaryAuditTable.java b/hibernate-envers/src/main/java/org/hibernate/envers/SecondaryAuditTable.java deleted file mode 100644 index 071220c1bca8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/SecondaryAuditTable.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Repeatable; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -@Repeatable(SecondaryAuditTables.class) -public @interface SecondaryAuditTable { - String secondaryTableName(); - - String secondaryAuditTableName(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/SecondaryAuditTables.java b/hibernate-envers/src/main/java/org/hibernate/envers/SecondaryAuditTables.java deleted file mode 100644 index b38bc3b942c9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/SecondaryAuditTables.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface SecondaryAuditTables { - SecondaryAuditTable[] value(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/TrackingModifiedEntitiesRevisionMapping.java b/hibernate-envers/src/main/java/org/hibernate/envers/TrackingModifiedEntitiesRevisionMapping.java deleted file mode 100644 index 37c815974274..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/TrackingModifiedEntitiesRevisionMapping.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.MappedSuperclass; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; - -import java.util.HashSet; -import java.util.Set; - -/** - * Extension of standard {@link RevisionMapping} that allows tracking entity names changed in each revision. - * This revision entity is implicitly used when {@code org.hibernate.envers.track_entities_changed_in_revision} - * parameter is set to {@code true}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -public class TrackingModifiedEntitiesRevisionMapping extends RevisionMapping { - @ElementCollection(fetch = FetchType.EAGER) - @JoinTable(name = "REVCHANGES", joinColumns = @JoinColumn(name = "REV")) - @Column(name = "ENTITYNAME") - @Fetch(FetchMode.JOIN) - @ModifiedEntityNames - private Set modifiedEntityNames = new HashSet<>(); - - public Set getModifiedEntityNames() { - return modifiedEntityNames; - } - - public void setModifiedEntityNames(Set modifiedEntityNames) { - this.modifiedEntityNames = modifiedEntityNames; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof TrackingModifiedEntitiesRevisionMapping) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - final TrackingModifiedEntitiesRevisionMapping that = (TrackingModifiedEntitiesRevisionMapping) o; - - if ( modifiedEntityNames != null ? !modifiedEntityNames.equals( that.modifiedEntityNames ) - : that.modifiedEntityNames != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (modifiedEntityNames != null ? modifiedEntityNames.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "DefaultTrackingModifiedEntitiesRevisionEntity(" + super.toString() + ", modifiedEntityNames = " + modifiedEntityNames + ")"; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/EnversBootLogger.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/EnversBootLogger.java deleted file mode 100644 index 76cd8ea0b06e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/EnversBootLogger.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot; - -import org.hibernate.internal.log.SubSystemLogging; - -import org.jboss.logging.BasicLogger; -import org.jboss.logging.Logger; -import org.jboss.logging.annotations.LogMessage; -import org.jboss.logging.annotations.Message; -import org.jboss.logging.annotations.MessageLogger; -import org.jboss.logging.annotations.ValidIdRange; - -import java.lang.invoke.MethodHandles; - -import static org.jboss.logging.Logger.Level.INFO; - -/** - * @author Steve Ebersole - */ -@MessageLogger( projectCode = "HHH" ) -@ValidIdRange( min = 90005601, max = 90005700 ) -@SubSystemLogging( - name = EnversBootLogger.LOGGER_NAME, - description = "Logging related to bootstrapping an Envers (currently just its in-flight generation " + - "of `hbm.xml` mappings for Hibernate ORM to process)" -) -public interface EnversBootLogger extends BasicLogger { - String LOGGER_NAME = "org.hibernate.envers.boot"; - - EnversBootLogger BOOT_LOGGER = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversBootLogger.class, - LOGGER_NAME - ); - - boolean TRACE_ENABLED = BOOT_LOGGER.isTraceEnabled(); - boolean DEBUG_ENABLED = BOOT_LOGGER.isDebugEnabled(); - - static String subLoggerName(String subName) { - return LOGGER_NAME + '.' + subName; - } - - static Logger subLogger(String subName) { - return Logger.getLogger( subLoggerName( subName ) ); - } - - /** - * Log about usage of deprecated Scanner setting - */ - @LogMessage( level = INFO ) - @Message( - value = "Envers-generated HBM mapping...%n%s", - id = 90005601 - ) - void jaxbContribution(String hbm); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/EnversMappingException.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/EnversMappingException.java deleted file mode 100644 index 291dca21bf47..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/EnversMappingException.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot; - -import org.hibernate.boot.MappingException; -import org.hibernate.boot.jaxb.Origin; -import org.hibernate.boot.jaxb.SourceType; - -/** - * Indicates an error happened during the Envers mapping boot process. - * - * @author Chris Cranford - */ -public class EnversMappingException extends MappingException { - - public EnversMappingException(String message) { - super( message, new Origin( SourceType.OTHER, "envers" ) ); - } - - public EnversMappingException(String message, Throwable t) { - super( message, t, new Origin( SourceType.OTHER, "envers" ) ); - } - - public EnversMappingException(Throwable t) { - this( "", t ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AbstractModifiedColumnNamingStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AbstractModifiedColumnNamingStrategy.java deleted file mode 100644 index cd2f51350148..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AbstractModifiedColumnNamingStrategy.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.envers.boot.model.BasicAttribute; -import org.hibernate.envers.boot.model.Column; -import org.hibernate.envers.boot.spi.ModifiedColumnNamingStrategy; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; - -/** - * @author Chris Cranford - * @since 6.0 - */ -public abstract class AbstractModifiedColumnNamingStrategy implements ModifiedColumnNamingStrategy { - - protected BasicAttribute createModifiedFlagAttribute( - PropertyAuditingData propertyAuditingData, - Configuration configuration, - String columnName) { - return createModifiedFlagAttribute( - propertyAuditingData.getName(), - configuration.getModifiedFlagsSuffix(), - propertyAuditingData.getModifiedFlagName(), - columnName - ); - } - - protected BasicAttribute createModifiedFlagAttribute(String name, String suffix, String flagName, String columnName) { - final BasicAttribute attribute = new BasicAttribute( - ( flagName != null ) ? flagName : ModifiedColumnNameResolver.getName( name, suffix ), - "boolean", - true, - false, - false - ); - attribute.addColumn( new Column(columnName ) ); - return attribute; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AdditionalMappingContributorImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AdditionalMappingContributorImpl.java deleted file mode 100644 index 4ece189334ad..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AdditionalMappingContributorImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.HibernateException; -import org.hibernate.boot.ResourceStreamLocator; -import org.hibernate.boot.spi.AdditionalMappingContributions; -import org.hibernate.boot.spi.AdditionalMappingContributor; -import org.hibernate.boot.spi.InFlightMetadataCollector; -import org.hibernate.boot.spi.MetadataBuildingContext; -import org.hibernate.boot.spi.MetadataBuildingOptions; -import org.hibernate.service.ServiceRegistry; - -import static org.hibernate.cfg.AvailableSettings.XML_MAPPING_ENABLED; - -/** - * @author Steve Ebersole - */ -public class AdditionalMappingContributorImpl implements AdditionalMappingContributor { - @Override - public String getContributorName() { - return "envers"; - } - - @Override - public void contribute( - AdditionalMappingContributions contributions, - InFlightMetadataCollector metadata, - ResourceStreamLocator resourceStreamLocator, - MetadataBuildingContext buildingContext) { - final MetadataBuildingOptions metadataBuildingOptions = metadata.getMetadataBuildingOptions(); - final ServiceRegistry serviceRegistry = metadataBuildingOptions.getServiceRegistry(); - final EnversService enversService = serviceRegistry.getService( EnversService.class ); - - if ( !enversService.isEnabled() ) { - // short-circuit if envers integration has been disabled. - return; - } - - if ( !metadataBuildingOptions.isXmlMappingEnabled() ) { - throw new HibernateException( "Hibernate Envers currently requires XML mapping to be enabled." - + " Please don't disable setting `" + XML_MAPPING_ENABLED - + "`; alternatively disable Hibernate Envers." ); - } - - enversService.initialize( metadata, contributions::contributeBinding, contributions.getEffectiveMappingDefaults() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AuditStrategyRegistrationProvider.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AuditStrategyRegistrationProvider.java deleted file mode 100644 index 21311224f904..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/AuditStrategyRegistrationProvider.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.registry.selector.SimpleStrategyRegistrationImpl; -import org.hibernate.boot.registry.selector.StrategyRegistration; -import org.hibernate.boot.registry.selector.StrategyRegistrationProvider; -import org.hibernate.boot.registry.selector.spi.StrategySelector; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.envers.strategy.DefaultAuditStrategy; -import org.hibernate.envers.strategy.ValidityAuditStrategy; - -/** - * Provides the audit strategy implementations to the {@link StrategySelector} service. - * - * @author Chris Cranford - * @since 6.0 - */ -public class AuditStrategyRegistrationProvider implements StrategyRegistrationProvider { - - private static final List STRATEGIES = new ArrayList<>(); - - static { - STRATEGIES.add( - new SimpleStrategyRegistrationImpl( - AuditStrategy.class, - DefaultAuditStrategy.class, - "default", - DefaultAuditStrategy.class.getName(), - DefaultAuditStrategy.class.getSimpleName(), - org.hibernate.envers.strategy.internal.DefaultAuditStrategy.class.getName() - ) - ); - STRATEGIES.add( - new SimpleStrategyRegistrationImpl( - AuditStrategy.class, - ValidityAuditStrategy.class, - "validity", - ValidityAuditStrategy.class.getName(), - ValidityAuditStrategy.class.getSimpleName(), - org.hibernate.envers.strategy.internal.ValidityAuditStrategy.class.getName() - ) - ); - } - - @Override - public Iterable getStrategyRegistrations() { - return STRATEGIES; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversIntegrator.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversIntegrator.java deleted file mode 100644 index b6116d5fc7f9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversIntegrator.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.HibernateException; -import org.hibernate.boot.Metadata; -import org.hibernate.boot.spi.BootstrapContext; -import org.hibernate.engine.config.spi.ConfigurationService; -import org.hibernate.engine.config.spi.StandardConverters; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.event.spi.EnversListenerDuplicationStrategy; -import org.hibernate.envers.event.spi.EnversPostCollectionRecreateEventListenerImpl; -import org.hibernate.envers.event.spi.EnversPostDeleteEventListenerImpl; -import org.hibernate.envers.event.spi.EnversPostInsertEventListenerImpl; -import org.hibernate.envers.event.spi.EnversPostUpdateEventListenerImpl; -import org.hibernate.envers.event.spi.EnversPreCollectionRemoveEventListenerImpl; -import org.hibernate.envers.event.spi.EnversPreCollectionUpdateEventListenerImpl; -import org.hibernate.envers.event.spi.EnversPreUpdateEventListenerImpl; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.event.service.spi.EventListenerRegistry; -import org.hibernate.event.spi.EventType; -import org.hibernate.integrator.spi.Integrator; -import org.hibernate.service.ServiceRegistry; -import org.hibernate.service.spi.SessionFactoryServiceRegistry; - -import org.jboss.logging.Logger; - -/** - * Hooks up Envers event listeners. - * - * @author Steve Ebersole - * @author Chris Cranford - */ -public class EnversIntegrator implements Integrator { - private static final Logger log = Logger.getLogger( EnversIntegrator.class ); - - public static final String AUTO_REGISTER = "hibernate.envers.autoRegisterListeners"; - - public void integrate( - Metadata metadata, - BootstrapContext bootstrapContext, - SessionFactoryImplementor sessionFactory) { - final ServiceRegistry serviceRegistry = sessionFactory.getServiceRegistry(); - final EnversService enversService = serviceRegistry.getService( EnversService.class ); - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Opt-out of registration if EnversService is disabled - if ( !enversService.isEnabled() ) { - log.debug( "Skipping Envers listener registrations : EnversService disabled" ); - return; - } - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Opt-out of registration if asked to not register - final boolean autoRegister = serviceRegistry.getService( ConfigurationService.class ).getSetting( - AUTO_REGISTER, - StandardConverters.BOOLEAN, - true - ); - if ( !autoRegister ) { - log.debug( "Skipping Envers listener registrations : Listener auto-registration disabled" ); - return; - } - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Verify that the EnversService is fully initialized and ready to go. - if ( !enversService.isInitialized() ) { - throw new HibernateException( - "Expecting EnversService to have been initialized prior to call to EnversIntegrator#integrate" - ); - } - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Opt-out of registration if no audited entities found - if ( !enversService.getEntitiesConfigurations().hasAuditedEntities() ) { - log.debug( "Skipping Envers listener registrations : No audited entities found" ); - return; - } - - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // Do the registrations - final EventListenerRegistry listenerRegistry = serviceRegistry.getService( EventListenerRegistry.class ); - listenerRegistry.addDuplicationStrategy( EnversListenerDuplicationStrategy.INSTANCE ); - - if ( enversService.getEntitiesConfigurations().hasAuditedEntities() ) { - listenerRegistry.appendListeners( - EventType.POST_DELETE, - new EnversPostDeleteEventListenerImpl( enversService ) - ); - listenerRegistry.appendListeners( - EventType.POST_INSERT, - new EnversPostInsertEventListenerImpl( enversService ) - ); - listenerRegistry.appendListeners( - EventType.PRE_UPDATE, - new EnversPreUpdateEventListenerImpl( enversService ) - ); - listenerRegistry.appendListeners( - EventType.POST_UPDATE, - new EnversPostUpdateEventListenerImpl( enversService ) - ); - listenerRegistry.appendListeners( - EventType.POST_COLLECTION_RECREATE, - new EnversPostCollectionRecreateEventListenerImpl( enversService ) - ); - listenerRegistry.appendListeners( - EventType.PRE_COLLECTION_REMOVE, - new EnversPreCollectionRemoveEventListenerImpl( enversService ) - ); - listenerRegistry.appendListeners( - EventType.PRE_COLLECTION_UPDATE, - new EnversPreCollectionUpdateEventListenerImpl( enversService ) - ); - } - } - - @Override - public void disintegrate(SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { - ReflectionTools.reset(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversMetadataBuildingContextImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversMetadataBuildingContextImpl.java deleted file mode 100644 index 708934b221cb..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversMetadataBuildingContextImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.boot.model.TypeDefinitionRegistry; -import org.hibernate.boot.model.naming.ObjectNameNormalizer; -import org.hibernate.boot.spi.BootstrapContext; -import org.hibernate.boot.spi.EffectiveMappingDefaults; -import org.hibernate.boot.spi.InFlightMetadataCollector; -import org.hibernate.boot.spi.MetadataBuildingOptions; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.MappingCollector; -import org.hibernate.envers.configuration.internal.metadata.AuditEntityConfigurationRegistry; -import org.hibernate.envers.configuration.internal.metadata.AuditEntityNameRegister; -import org.hibernate.models.spi.ClassDetailsRegistry; -import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.service.ServiceRegistry; - -/** - * @author Chris Cranford - */ -public class EnversMetadataBuildingContextImpl implements EnversMetadataBuildingContext { - - private static final String CONTRiBUTOR = "envers"; - - private final Configuration configuration; - private final InFlightMetadataCollector metadataCollector; - private final EffectiveMappingDefaults effectiveMappingDefaults; - private final MappingCollector mappingCollector; - private final ObjectNameNormalizer objectNameNormalizer; - private final AuditEntityNameRegister auditEntityNameRegistry; - private final AuditEntityConfigurationRegistry auditEntityConfigurationRegistry; - - public EnversMetadataBuildingContextImpl( - Configuration configuration, - InFlightMetadataCollector metadataCollector, - EffectiveMappingDefaults effectiveMappingDefaults, - MappingCollector mappingCollector) { - this.configuration = configuration; - this.metadataCollector = metadataCollector; - this.effectiveMappingDefaults = effectiveMappingDefaults; - this.mappingCollector = mappingCollector; - this.auditEntityNameRegistry = new AuditEntityNameRegister(); - this.auditEntityConfigurationRegistry = new AuditEntityConfigurationRegistry(); - - this.objectNameNormalizer = new ObjectNameNormalizer(this); - } - - @Override - public BootstrapContext getBootstrapContext() { - return metadataCollector.getBootstrapContext(); - } - - @Override - public MetadataBuildingOptions getBuildingOptions() { - return metadataCollector.getMetadataBuildingOptions(); - } - - @Override - public EffectiveMappingDefaults getEffectiveDefaults() { - return effectiveMappingDefaults; - } - - @Override - public InFlightMetadataCollector getMetadataCollector() { - return metadataCollector; - } - - @Override - public ObjectNameNormalizer getObjectNameNormalizer() { - return objectNameNormalizer; - } - - @Override - public TypeDefinitionRegistry getTypeDefinitionRegistry() { - return metadataCollector.getTypeDefinitionRegistry(); - } - - @Override - public String getCurrentContributorName() { - return CONTRiBUTOR; - } - - @Override - public Configuration getConfiguration() { - return configuration; - } - - @Override - public MappingCollector getMappingCollector() { - return mappingCollector; - } - - @Override - public ServiceRegistry getServiceRegistry() { - return metadataCollector.getBootstrapContext().getServiceRegistry(); - } - - @Override - public SourceModelBuildingContext getSourceModelBuildingContext() { - return metadataCollector.getSourceModelBuildingContext(); - } - - @Override - public ClassDetailsRegistry getClassDetailsRegistry() { - return metadataCollector.getClassDetailsRegistry(); - } - - @Override - public AuditEntityNameRegister getAuditEntityNameRegistry() { - return auditEntityNameRegistry; - } - - @Override - public AuditEntityConfigurationRegistry getAuditEntityConfigurationRegistry() { - return auditEntityConfigurationRegistry; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversService.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversService.java deleted file mode 100644 index f08e14e7b39e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversService.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; -import org.hibernate.boot.spi.EffectiveMappingDefaults; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.MappingCollector; -import org.hibernate.envers.internal.entities.EntitiesConfigurations; -import org.hibernate.envers.internal.revisioninfo.ModifiedEntityNamesReader; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoNumberReader; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoQueryCreator; -import org.hibernate.envers.internal.synchronization.AuditProcessManager; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.service.Service; -import org.hibernate.service.ServiceRegistry; - -/** - * Provides central access to Envers' configuration. - * - * In many ways, this replaces the legacy static map Envers used originally as - * a means to share the old AuditConfiguration. - * - * @author Steve Ebersole - * @author Chris Cranford - */ -public interface EnversService extends Service { - /** - * The name of the configuration setting used to control whether the Envers integration - * is enabled. Default is true - */ - String INTEGRATION_ENABLED = "hibernate.integration.envers.enabled"; - - /** - * Is the Envers integration enabled? This is generally used as a - * protection for other Envers services (in the ServiceLoader sense) - * determine whether they should do their work. - * - * @return {@code true} If the integration is enabled; {@code false} otherwise. - */ - boolean isEnabled(); - - /** - * Assuming {@link #isEnabled()} is {@code true}, has {@link #initialize} - * been called yet? - * - * @return {@code true} indicates {@link #initialize} has been called; {@code false} - * indicates that {@link #initialize} has not (yet) been called. - */ - boolean isInitialized(); - - void initialize( - MetadataImplementor metadata, - MappingCollector mappingCollector, - EffectiveMappingDefaults effectiveMappingDefaults); - - Configuration getConfig(); - - AuditProcessManager getAuditProcessManager(); - - AuditStrategy getAuditStrategy(); - - EntitiesConfigurations getEntitiesConfigurations(); - - RevisionInfoQueryCreator getRevisionInfoQueryCreator(); - - RevisionInfoNumberReader getRevisionInfoNumberReader(); - - ModifiedEntityNamesReader getModifiedEntityNamesReader(); - - ClassLoaderService getClassLoaderService(); - - ServiceRegistry getServiceRegistry(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceContributor.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceContributor.java deleted file mode 100644 index 8429d499e439..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceContributor.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.service.spi.ServiceContributor; - -/** - * ServiceContributor implementation pushing the EnversService into - * the registry - * - * @author Steve Ebersole - */ -public class EnversServiceContributor implements ServiceContributor { - @Override - public void contribute(StandardServiceRegistryBuilder serviceRegistryBuilder) { - serviceRegistryBuilder.addInitiator( EnversServiceInitiator.INSTANCE ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceImpl.java deleted file mode 100644 index 007eb302137b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceImpl.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import java.util.Map; -import java.util.Properties; - -import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; -import org.hibernate.boot.spi.EffectiveMappingDefaults; -import org.hibernate.boot.spi.InFlightMetadataCollector; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.engine.config.spi.ConfigurationService; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.EntitiesConfigurator; -import org.hibernate.envers.configuration.internal.MappingCollector; -import org.hibernate.envers.internal.entities.EntitiesConfigurations; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.revisioninfo.ModifiedEntityNamesReader; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoNumberReader; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoQueryCreator; -import org.hibernate.envers.internal.synchronization.AuditProcessManager; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.envers.strategy.spi.AuditStrategyContext; -import org.hibernate.internal.util.config.ConfigurationHelper; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.service.ServiceRegistry; -import org.hibernate.service.spi.Configurable; -import org.hibernate.service.spi.Stoppable; - -import org.jboss.logging.Logger; - -/** - * Provides central access to Envers' configuration. - * - * In many ways, this replaces the legacy static map Envers used originally as - * a means to share the old AuditConfiguration. - * - * @author Steve Ebersole - * @author Chris Cranford - */ -public class EnversServiceImpl implements EnversService, Configurable, Stoppable { - private static final Logger log = Logger.getLogger( EnversServiceImpl.class ); - - private static final String LEGACY_AUTO_REGISTER = "hibernate.listeners.envers.autoRegister"; - - private boolean integrationEnabled; - private boolean initialized; - - private ServiceRegistry serviceRegistry; - private ClassLoaderService classLoaderService; - - // todo : not at all a fan of all these... - // 2) AuditProcessManager is a glorified Map of AuditProcess instances (BeforeTransactionCompletionProcess) - // keyed by Transaction (Session) - private Configuration configuration; - private AuditProcessManager auditProcessManager; - private EntitiesConfigurations entitiesConfigurations; - - @Override - public void configure(Map configurationValues) { - if ( configurationValues.containsKey( LEGACY_AUTO_REGISTER ) ) { - log.debugf( - "Encountered deprecated Envers setting [%s]; use [%s] or [%s] instead", - LEGACY_AUTO_REGISTER, - INTEGRATION_ENABLED, - EnversIntegrator.AUTO_REGISTER - ); - } - this.integrationEnabled = ConfigurationHelper.getBoolean( INTEGRATION_ENABLED, configurationValues, true ); - - log.infof( "Envers integration enabled? : %s", integrationEnabled ); - } - - @Override - public boolean isEnabled() { - return integrationEnabled; - } - - @Override - public boolean isInitialized() { - return initialized; - } - - @Override - public void initialize( - MetadataImplementor metadata, - MappingCollector mappingCollector, - EffectiveMappingDefaults effectiveMappingDefaults) { - if ( initialized ) { - throw new UnsupportedOperationException( "EnversService#initialize should be called only once" ); - } - - initialized = true; - - final InFlightMetadataCollector metadataCollector = (InFlightMetadataCollector) metadata; - this.serviceRegistry = metadata.getMetadataBuildingOptions().getServiceRegistry(); - this.classLoaderService = serviceRegistry.getService( ClassLoaderService.class ); - - final ConfigurationService cfgService = serviceRegistry.getService( ConfigurationService.class ); - final Properties properties = new Properties(); - properties.putAll( cfgService.getSettings() ); - - this.configuration = new Configuration( properties, this, metadataCollector ); - this.auditProcessManager = new AuditProcessManager( configuration.getRevisionInfo().getRevisionInfoGenerator() ); - - final EnversMetadataBuildingContext metadataBuildingContext = new EnversMetadataBuildingContextImpl( - configuration, - metadataCollector, - effectiveMappingDefaults, - mappingCollector - ); - - // Strategy-specific initialization - configuration.getAuditStrategy().postInitialize( - new AuditStrategyContext() { - @Override - public Class getRevisionInfoClass() { - return configuration.getRevisionInfo().getRevisionInfoClass(); - } - - @Override - public Getter getRevisionInfoTimestampAccessor() { - final PropertyData pd = configuration.getRevisionInfo().getRevisionInfoTimestampData(); - return ReflectionTools.getGetter( getRevisionInfoClass(), pd, serviceRegistry ); - } - } - ); - - this.entitiesConfigurations = new EntitiesConfigurator().configure( metadataBuildingContext ); - } - - @Override - public Configuration getConfig() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return configuration; - } - - @Override - public AuditProcessManager getAuditProcessManager() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return auditProcessManager; - } - - @Override - @Deprecated - public AuditStrategy getAuditStrategy() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return configuration.getAuditStrategy(); - } - - @Override - public EntitiesConfigurations getEntitiesConfigurations() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return entitiesConfigurations; - } - - @Override - public RevisionInfoQueryCreator getRevisionInfoQueryCreator() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return configuration.getRevisionInfo().getRevisionInfoQueryCreator(); - } - - @Override - public RevisionInfoNumberReader getRevisionInfoNumberReader() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return configuration.getRevisionInfo().getRevisionInfoNumberReader(); - } - - @Override - public ModifiedEntityNamesReader getModifiedEntityNamesReader() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return configuration.getRevisionInfo().getModifiedEntityNamesReader(); - } - - @Override - public ClassLoaderService getClassLoaderService() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return classLoaderService; - } - - @Override - public ServiceRegistry getServiceRegistry() { - if ( !initialized ) { - throw new IllegalStateException( "Service is not yet initialized" ); - } - return serviceRegistry; - } - - @Override - public void stop() { - // anything to release? - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceInitiator.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceInitiator.java deleted file mode 100644 index 059adb1446fc..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/EnversServiceInitiator.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import java.util.Map; - -import org.hibernate.boot.registry.StandardServiceInitiator; -import org.hibernate.service.spi.ServiceRegistryImplementor; - -/** - * @author Steve Ebersole - */ -public class EnversServiceInitiator implements StandardServiceInitiator { - /** - * Singleton access - */ - public static final EnversServiceInitiator INSTANCE = new EnversServiceInitiator(); - - @Override - public EnversService initiateService( - Map configurationValues, - ServiceRegistryImplementor registry) { - return new EnversServiceImpl(); - } - - @Override - public Class getServiceInitiated() { - return EnversService.class; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/FunctionContributorImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/FunctionContributorImpl.java deleted file mode 100644 index 2dfb7a8a639c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/FunctionContributorImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.boot.model.FunctionContributions; -import org.hibernate.boot.model.FunctionContributor; -import org.hibernate.envers.function.OrderByFragmentFunction; - -/** - * Envers specific FunctionContributor - * - * @author Christian Beikov - */ -public class FunctionContributorImpl implements FunctionContributor { - - @Override - public void contributeFunctions(FunctionContributions functionContributions) { - final EnversService enversService = functionContributions.getServiceRegistry().getService( EnversService.class ); - if ( !enversService.isEnabled() ) { - return; - } - - functionContributions.getFunctionRegistry().register( OrderByFragmentFunction.FUNCTION_NAME, OrderByFragmentFunction.INSTANCE ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ImprovedModifiedColumnNamingStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ImprovedModifiedColumnNamingStrategy.java deleted file mode 100644 index 0bc8fe78caf0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ImprovedModifiedColumnNamingStrategy.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.spi.ModifiedColumnNamingStrategy; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Selectable; -import org.hibernate.mapping.Value; -import org.hibernate.type.BasicType; -import org.hibernate.type.ManyToOneType; -import org.hibernate.type.OneToOneType; - -/** - * A {@link ModifiedColumnNamingStrategy} that adds modified columns with the following rules: - *
    - *
  • For basic types, prioritizes audit annotation naming followed by physical column name appended with suffix.
  • - *
  • For associations with single column foreign keys, behaves like basic types.
  • - *
  • For associations with multiple column foreign keys, prioritizes audit annotation naming followed by using property name.
  • - *
  • For embeddables, behaves like associations with multiple column foreign keys
  • - *
- * - * @author Chris Cranford - * @since 5.4.7 - */ -public class ImprovedModifiedColumnNamingStrategy extends LegacyModifiedColumnNamingStrategy { - @Override - public void addModifiedColumns( - Configuration configuration, - Value value, - AttributeContainer mapping, - PropertyAuditingData propertyAuditingData) { - - boolean basicType = value.getType() instanceof BasicType; - boolean toOneType = value.getType() instanceof ManyToOneType || value.getType() instanceof OneToOneType; - - if ( basicType || toOneType ) { - if ( value.getColumnSpan() == 1 ) { - Selectable selectable = value.getSelectables().get( 0 ); - if ( selectable instanceof Column ) { - // This should not be applied for formulas - final String columnName; - if ( !propertyAuditingData.isModifiedFlagNameExplicitlySpecified() ) { - columnName = ( (Column) selectable ).getName() + configuration.getModifiedFlagsSuffix(); - } - else { - columnName = propertyAuditingData.getExplicitModifiedFlagName(); - } - - mapping.addAttribute( createModifiedFlagAttribute( propertyAuditingData, configuration, columnName ) ); - - return; - } - } - } - - // Default legacy behavior - super.addModifiedColumns( configuration, value, mapping, propertyAuditingData ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/LegacyModifiedColumnNamingStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/LegacyModifiedColumnNamingStrategy.java deleted file mode 100644 index c804aaa422ce..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/LegacyModifiedColumnNamingStrategy.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.spi.ModifiedColumnNamingStrategy; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.mapping.Value; - -/** - * A {@link ModifiedColumnNamingStrategy} that adds modified columns with the following rules: - *
    - *
  • If an audit annotation modified column name is supplied, use it directly with no suffix.
  • - *
  • If no audit annotation modified column name is present, use the property name appended with suffix.
  • - *
- * - * This is the default Envers modified column naming behavior. - * - * @author Chris Cranford - * @since 5.4.7 - */ -public class LegacyModifiedColumnNamingStrategy extends AbstractModifiedColumnNamingStrategy { - @Override - public void addModifiedColumns( - Configuration configuration, - Value value, - AttributeContainer mapping, - PropertyAuditingData propertyAuditingData) { - final String columnName; - if ( propertyAuditingData.isModifiedFlagNameExplicitlySpecified() ) { - columnName = propertyAuditingData.getExplicitModifiedFlagName(); - } - else { - columnName = propertyAuditingData.getModifiedFlagName(); - } - mapping.addAttribute( createModifiedFlagAttribute( propertyAuditingData, configuration, columnName ) ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ModifiedColumnNameResolver.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ModifiedColumnNameResolver.java deleted file mode 100644 index a1e8739a9dd2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ModifiedColumnNameResolver.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -/** - * @author Chris Cranford - */ -public class ModifiedColumnNameResolver { - public static String getName(String propertyName, String suffix) { - return propertyName + suffix; - } - - private ModifiedColumnNameResolver() { - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ModifiedColumnNamingStrategyRegistrationProvider.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ModifiedColumnNamingStrategyRegistrationProvider.java deleted file mode 100644 index c3abdf2a5ee5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/ModifiedColumnNamingStrategyRegistrationProvider.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.registry.selector.SimpleStrategyRegistrationImpl; -import org.hibernate.boot.registry.selector.StrategyRegistration; -import org.hibernate.boot.registry.selector.StrategyRegistrationProvider; -import org.hibernate.envers.boot.spi.ModifiedColumnNamingStrategy; - -/** - * A {@link StrategyRegistrationProvider} for {@link ModifiedColumnNamingStrategy}s. - * - * @author Chris Cranford - */ -public class ModifiedColumnNamingStrategyRegistrationProvider implements StrategyRegistrationProvider { - @Override - public Iterable getStrategyRegistrations() { - final List registrations = new ArrayList<>(); - - registrations.add( - new SimpleStrategyRegistrationImpl( - ModifiedColumnNamingStrategy.class, - LegacyModifiedColumnNamingStrategy.class, - "default", "legacy" - ) - ); - - registrations.add( - new SimpleStrategyRegistrationImpl( - ModifiedColumnNamingStrategy.class, - ImprovedModifiedColumnNamingStrategy.class, - "improved" - ) - ); - - return registrations; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/TypeContributorImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/TypeContributorImpl.java deleted file mode 100644 index 44f93de97e2e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/internal/TypeContributorImpl.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.internal; - -import org.hibernate.boot.model.TypeContributions; -import org.hibernate.boot.model.TypeContributor; -import org.hibernate.envers.internal.entities.RevisionTypeType; -import org.hibernate.service.ServiceRegistry; - -/** - * Envers specific TypeContributor - * - * @author Brett Meyer - */ -public class TypeContributorImpl implements TypeContributor { - @Override - public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { - final EnversService enversService = serviceRegistry.getService( EnversService.class ); - if ( !enversService.isEnabled() ) { - return; - } - - typeContributions.contributeType( - new RevisionTypeType(), - new String[] { RevisionTypeType.class.getName() } - ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/AbstractIdentifier.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/AbstractIdentifier.java deleted file mode 100644 index bb1bd9efbab5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/AbstractIdentifier.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.List; - -/** - * Base abstract implementation of {@link Identifier}. - * - * @author Chris Cranford - */ -public abstract class AbstractIdentifier implements Identifier { - - private final String propertyName; - private final List attributes; - - public AbstractIdentifier(String propertyName) { - this.propertyName = propertyName; - this.attributes = new ArrayList<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - this.attributes.add( attribute ); - } - - @Override - public String getName() { - return propertyName; - } - - @Override - public List getAttributes() { - return attributes; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Attribute.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Attribute.java deleted file mode 100644 index 7867dfa7d9c2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Attribute.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.io.Serializable; - -/** - * Contract for a mapping attribute. - * - * @author Chris Cranford - */ -public interface Attribute extends ColumnContainer, Bindable, Cloneable { - /** - * Get the name of the attribute - * @return the attribute's name - */ - String getName(); - - /** - * Set the name of the attribute - * @param name the attribute's name - */ - void setName(String name); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/AttributeContainer.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/AttributeContainer.java deleted file mode 100644 index d71f1c548576..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/AttributeContainer.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * Defines a contract for the Envers mapping model in terms of being able to contain attributes. - * - * @author Chris Cranford - */ -public interface AttributeContainer { - /** - * Add an attribute to the container. - * - * @param attribute the attribute, should not be {@code null} - */ - void addAttribute(Attribute attribute); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/BasicAttribute.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/BasicAttribute.java deleted file mode 100644 index 7adf67d401a9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/BasicAttribute.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmBasicAttributeType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmCompositeKeyBasicAttributeType; - -/** - * Contract for a basic, singular attribute. - * - * @author Chris Cranford - */ -public class BasicAttribute implements SingularAttribute, Keyable { - - private final List columns; - private final boolean updatable; - private final String explicitType; - - private String name; - private final String type; - private boolean insertable; - private boolean key; - private TypeSpecification typeDefinition; - - /** - * Create a basic attribute - * - * @param name the attribute name - * @param type the attribute type - * @param insertable whether the attribute is insertable - * @param key whether the attribute participates in a key - */ - public BasicAttribute(String name, String type, boolean insertable, boolean key) { - this( name, type, insertable, false, key ); - } - - /** - * Create a basic attribute - * - * @param name the attribute name - * @param type the attribute type - * @param insertable whether the attribute is insertable - * @param key whether the attribute participates in a key - * @param explicitType the explicit class type - */ - public BasicAttribute(String name, String type, boolean insertable, boolean key, String explicitType) { - this( name, type, insertable, false, key, explicitType ); - } - - /** - * Create a basic attribute - * - * @param name the attribute name - * @param type the attribute type - * @param insertable whether the attribute is insertable - * @param updatable whether the attribute is updatable - * @param key whether the attribute participates in a key - */ - public BasicAttribute(String name, String type, boolean insertable, boolean updatable, boolean key) { - this( name, type, insertable, updatable, key, null ); - } - - /** - * Creates a basic attribute - * - * @param name the attribute name - * @param type the attribute type - * @param insertable whether the attribute is insertable - * @param updatable whether the attribute is updatable - * @param key whether the attribute participates in a key - * @param explicitType the explicit class type - */ - public BasicAttribute(String name, String type, boolean insertable, boolean updatable, boolean key, String explicitType) { - this.name = name; - this.type = type; - this.insertable = insertable; - this.updatable = updatable; - this.key = key; - this.explicitType = explicitType; - this.columns = new ArrayList<>(); - } - - /** - * A copy constructor that performs a deep-copy. - * - * @param other the object to be copied - */ - public BasicAttribute(BasicAttribute other) { - this.name = other.name; - this.type = other.type; - this.explicitType = other.explicitType; - this.insertable = other.insertable; - this.updatable = other.updatable; - this.key = other.key; - if ( other.typeDefinition != null ) { - this.typeDefinition = new TypeSpecification( other.typeDefinition ); - } - - this.columns = new ArrayList<>(); - other.columns.forEach( c -> this.columns.add( c.deepCopy() ) ); - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - } - - @Override - public void setKey(boolean key) { - this.key = key; - } - - @Override - public boolean isKey() { - return key; - } - - @Override - public List getColumns() { - return Collections.unmodifiableList( columns ); - } - - @Override - public void addColumn(Column column) { - this.columns.add( column ); - } - - public void setInsertable(boolean insertable) { - this.insertable = insertable; - } - - public TypeSpecification getType() { - return typeDefinition; - } - - public void setType(TypeSpecification type) { - this.typeDefinition = type; - } - - @Override - public BasicAttribute deepCopy() { - return new BasicAttribute( this ); - } - - @Override - public Serializable build() { - if ( key ) { - return buildCompositeKeyBasicAttribute(); - } - return buildBasicAttribute(); - } - - private JaxbHbmCompositeKeyBasicAttributeType buildCompositeKeyBasicAttribute() { - // Define key-based, basic attribute. - // Attribute is always assumed insertable and updatable. - final JaxbHbmCompositeKeyBasicAttributeType basic = new JaxbHbmCompositeKeyBasicAttributeType(); - basic.setName( name ); - basic.setTypeAttribute( resolveType() ); - - for ( Column column : columns ) { - basic.getColumn().add( column.build() ); - } - - if ( typeDefinition != null ) { - basic.setType( typeDefinition.build() ); - } - - return basic; - } - - private JaxbHbmBasicAttributeType buildBasicAttribute() { - // Define basic, non-key attribute. - final JaxbHbmBasicAttributeType basic = new JaxbHbmBasicAttributeType(); - basic.setName( name ); - basic.setTypeAttribute( resolveType() ); - basic.setInsert( insertable ); - basic.setUpdate( updatable ); - - for ( Column column : columns ) { - basic.getColumnOrFormula().add( column.build() ); - } - - if ( typeDefinition != null ) { - basic.setType( typeDefinition.build() ); - } - - return basic; - } - - private String resolveType() { - return explicitType == null ? type : explicitType; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Bindable.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Bindable.java deleted file mode 100644 index 1d3a21fdf1c1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Bindable.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * Defines a contract for objects that are bindable. - * - * @author Chris Cranford - */ -public interface Bindable { - /** - * Builds the specified binded class type. - * - * @return instance of the bindable class type, never {@code null} - */ - T build(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Cloneable.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Cloneable.java deleted file mode 100644 index 2d692729f634..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Cloneable.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * Contract for an object that is cloneable. - * - * @author Chris Cranford - */ -public interface Cloneable { - /** - * Creates a new, deep-copied instance of this object - * @return a deep-copy clone of the referenced object - */ - T deepCopy(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Column.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Column.java deleted file mode 100644 index e8df4a21ce14..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Column.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmColumnType; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.Selectable; - -/** - * An implementation of {@link Selection} that represents a logical column. - * - * @author Chris Cranford - */ -public class Column extends Selection implements Cloneable { - - private final Long length; - private final Integer scale; - private final Integer precision; - private final String sqlType; - private final String read; - private final String write; - private String name; - - /** - * Create a column with just a name. - * - * @param name the name of the column - */ - public Column(String name) { - this( name, false ); - } - - /** - * Create a column with just a name. - * - * @param name the name of the column - * @param quoted whether the name is to be quoted or not - */ - public Column(String name, boolean quoted) { - this( name, null, null, null, null, null, null, quoted ); - } - - /** - * Creates a column without a non-quoted name. - * - * @param name the name of the column, never {@code null} - * @param length the length, may be {@code null} - * @param scale the scale, may be {@code null} - * @param precision the precision, may be {@code null} - * @param sqlType the sql-type, may be {@code null} - * @param read the custom read, may be {@code null} - * @param write the custom write, may be {@code null} - */ - public Column(String name, Long length, Integer scale, Integer precision, String sqlType, String read, String write) { - this( name, length, scale, precision, sqlType, read, write, false ); - } - - /** - * Creates a column - * - * @param name the name of the column, never {@code null} - * @param length the length, may be {@code null} - * @param scale the scale, may be {@code null} - * @param precision the precision, may be {@code null} - * @param sqlType the sql-type, may be {@code null} - * @param read the custom read, may be {@code null} - * @param write the custom write, may be {@code null} - * @param quoted whether to quote the column name or not - */ - public Column(String name, Long length, Integer scale, Integer precision, String sqlType, String read, String write, boolean quoted) { - super ( SelectionType.COLUMN ); - this.name = quoted ? getQuotedName( name ) : name; - this.length = length; - this.scale = scale; - this.precision = precision; - this.sqlType = sqlType; - this.read = read; - this.write = write; - } - - /** - * Copy constructor that performs a deep-copy. - * - * @param other the column to copy - */ - public Column(Column other) { - super( other.getSelectionType() ); - this.name = other.name; - this.length = other.length; - this.scale = other.scale; - this.precision = other.precision; - this.sqlType = other.sqlType; - this.read = other.read; - this.write = other.write; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public Column deepCopy() { - return new Column( this ); - } - - @Override - public JaxbHbmColumnType build() { - final JaxbHbmColumnType column = new JaxbHbmColumnType(); - column.setName( name ); - - if ( length != null ) { - column.setLength( length.intValue() ); - } - - if ( scale != null ) { - column.setScale( scale ); - } - - if ( precision != null ) { - column.setPrecision( precision ); - } - - if ( !StringTools.isEmpty( sqlType ) ) { - column.setSqlType( sqlType ); - } - - if ( !StringTools.isEmpty( read ) ) { - column.setRead( read ); - } - - if ( !StringTools.isEmpty( write ) ) { - column.setWrite( write ); - } - - return column; - } - - /** - * Creates an Envers column mapping from an Hibernate ORM column mapping. - * - * @param selectable the ORM column mapping - * @return the envers column mapping - */ - public static Column from(Selectable selectable) { - if ( !( selectable instanceof org.hibernate.mapping.Column ) ) { - throw new EnversMappingException( "Cannot create audit column mapping from " + selectable.getClass().getName() ); - } - final org.hibernate.mapping.Column column = (org.hibernate.mapping.Column) selectable; - return new Column( - column.getName(), - column.getLength(), - column.getScale(), - column.getPrecision(), - column.getSqlType(), - column.getCustomRead(), - column.getCustomWrite(), - column.isQuoted() - ); - } - - /** - * Returns the specified name quoted. - * - * @param name the name to be quoted, never {@code null} - * @return the quoted column name - */ - private static String getQuotedName(String name) { - return "`" + name + "`"; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ColumnContainer.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ColumnContainer.java deleted file mode 100644 index 863debb3bb7b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ColumnContainer.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.List; - -import org.hibernate.mapping.Selectable; -import org.hibernate.mapping.Value; - -/** - * Contract for a container of columns. - * - * @author Chris Cranford - */ -public interface ColumnContainer { - - /** - * Get all columns that are part of this property - * @return unmodifiable list of property columns - */ - List getColumns(); - - /** - * Add a column to the container. - * - * @param column the column, must not be {@code null} - */ - void addColumn(Column column); - - /** - * Takes a {@link Value} and injects its columns into the Envers container mapping. - * - * @param value the value mapping - */ - default void addColumnsFromValue(Value value) { - final List selectables = value.getSelectables(); - for ( Selectable s : selectables ) { - addColumn( Column.from( s ) ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/CompositeIdentifier.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/CompositeIdentifier.java deleted file mode 100644 index e58d0e989e7f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/CompositeIdentifier.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmCompositeIdType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmToolingHintContainer; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; - -/** - * Represents an identifier based on a {@code composite-id} mapping. - * - * @author Chris Cranford - */ -public class CompositeIdentifier extends AbstractIdentifier { - - public CompositeIdentifier(EnversMetadataBuildingContext metadataBuildingContext) { - super( metadataBuildingContext.getConfiguration().getOriginalIdPropertyName() ); - } - - @Override - public JaxbHbmCompositeIdType build() { - final JaxbHbmCompositeIdType identifier = new JaxbHbmCompositeIdType(); - identifier.setName( getName() ); - - // For all mapped attributes, add them to the list of key properties - for ( Attribute attribute : getAttributes() ) { - identifier.getKeyPropertyOrKeyManyToOne().add( (JaxbHbmToolingHintContainer) attribute.build() ); - } - - return identifier; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ConfigParameterContainer.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ConfigParameterContainer.java deleted file mode 100644 index 56660a2e4143..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ConfigParameterContainer.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.Map; - -/** - * Contract for a model object that stores configuration parameters - * - * @author Chris Cranford - */ -public interface ConfigParameterContainer { - /** - * Get the configuration parameters - * - * @return an immutable map of configuration parameters - */ - Map getParameters(); - - /** - * Set a parameter - * - * @param name the parameter name, should never be {@code null} - * @param value the parameter value, should never be {@code null} - */ - void setParameter(String name, String value); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/DiscriminatorPersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/DiscriminatorPersistentEntity.java deleted file mode 100644 index 646255012c53..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/DiscriminatorPersistentEntity.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmDiscriminatorSubclassEntityType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.PersistentClass; - -/** - * A persistent entity mapping that uses a single table to store entities based on a discriminator. - * - * @author Chris Cranford - */ -public class DiscriminatorPersistentEntity extends SubclassPersistentEntity implements JoinAwarePersistentEntity { - - private final List joins; - private final List attributes; - private String discriminatorValue; - - public DiscriminatorPersistentEntity(AuditTableData auditTableData, PersistentClass persistentClass) { - super( auditTableData, persistentClass ); - this.attributes = new ArrayList<>(); - this.joins = new ArrayList<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - attributes.add( attribute ); - } - - @Override - public boolean isJoinAware() { - return true; - } - - public String getDiscriminatorValue() { - return discriminatorValue; - } - - public void setDiscriminatorValue(String discriminatorValue) { - this.discriminatorValue = discriminatorValue; - } - - @Override - public List getJoins() { - return Collections.unmodifiableList( joins ); - } - - @Override - public void addJoin(Join join) { - this.joins.add( join ); - } - - @Override - public void build(JaxbHbmHibernateMapping mapping) { - mapping.getSubclass().add( buildJaxbMapping() ); - } - - public JaxbHbmDiscriminatorSubclassEntityType buildJaxbMapping() { - final JaxbHbmDiscriminatorSubclassEntityType entity = new JaxbHbmDiscriminatorSubclassEntityType(); - entity.setExtends( getExtends() ); - - // Set common stuff - if ( getPersistentClass() != null ) { - entity.setAbstract( getPersistentClass().isAbstract() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getAuditEntityName() ) ) { - entity.setEntityName( getAuditTableData().getAuditEntityName() ); - } - - // Initialize attributes - for ( Attribute attribute : attributes ) { - entity.getAttributes().add( attribute.build() ); - } - - if ( !StringTools.isEmpty( discriminatorValue ) ) { - entity.setDiscriminatorValue( discriminatorValue ); - } - - for ( Join join : joins ) { - entity.getJoin().add( join.build() ); - } - - return entity; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/DiscriminatorType.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/DiscriminatorType.java deleted file mode 100644 index 7895c12e0f34..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/DiscriminatorType.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.Iterator; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmEntityDiscriminatorType; -import org.hibernate.mapping.Selectable; -import org.hibernate.mapping.Value; - -/** - * Contract for a persistent entity discriminator type. - * - * @author Chris Cranford - */ -public class DiscriminatorType implements Bindable { - - private final Value discriminator; - - public DiscriminatorType(Value discriminator) { - this.discriminator = discriminator; - } - - @Override - public JaxbHbmEntityDiscriminatorType build() { - final JaxbHbmEntityDiscriminatorType mapping = new JaxbHbmEntityDiscriminatorType(); - mapping.setType( discriminator.getType().getName() ); - - final Iterator iterator = discriminator.getSelectables().iterator(); - while ( iterator.hasNext() ) { - final Selectable selectable = iterator.next(); - if ( selectable.isFormula() ) { - mapping.setFormula( Formula.from( selectable ).build() ); - } - else { - mapping.setColumn( Column.from( selectable ).build() ); - } - } - - return mapping; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Formula.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Formula.java deleted file mode 100644 index 398472c5082c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Formula.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.mapping.Selectable; - -/** - * An implementation of {@link Selection} that represents a formula. - * - * @author Chris Cranford - */ -public class Formula extends Selection { - - private final String formula; - - public Formula(String formula) { - super( SelectionType.FORMULA ); - this.formula = formula; - } - - @Override - public String build() { - return formula; - } - - /** - * Create an Envers Formula mapping from an Hibernate ORM formula. - * - * @param formula the ORM formula - * @return the envers formula mapping - */ - public static Formula from(Selectable formula) { - if ( !formula.isFormula() ) { - throw new EnversMappingException( "Cannot create audit formula mapping from " + formula.getClass().getName() ); - } - return new Formula( formula.getText() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Identifier.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Identifier.java deleted file mode 100644 index a3be1364d320..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Identifier.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.io.Serializable; -import java.util.List; - -/** - * Common contract for an identifier. - * - * @author Chris Cranford - */ -public interface Identifier extends AttributeContainer, Bindable { - /** - * Get the property name. - * - * @return the property name - */ - String getName(); - - /** - * Get the collection of property attributes. - * - * @return unmodifiable list of attributes - */ - List getAttributes(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/IdentifierRelation.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/IdentifierRelation.java deleted file mode 100644 index 56576157dd77..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/IdentifierRelation.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.hibernate.envers.configuration.internal.metadata.ColumnNameIterator; -import org.hibernate.mapping.Selectable; - -/** - * A contract for identifier relations between persisted entities - * - * All attributes stored here are stored in their non-key form, see IdMetadataGenerator. - * - * Whenever this container is consulted and attributes are requested to be prefixed, a distinction - * at the call site determines whether attributes here are to be promoted or not. - * - * @author Chris Cranford - */ -public class IdentifierRelation implements AttributeContainer { - - private final List attributes; - - public IdentifierRelation() { - this.attributes = new ArrayList<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - this.attributes.add( attribute ); - } - - public List getAttributesPrefixed( - String prefix, - Iterator iterator, - boolean makeKey, - boolean insertable) { - return getAttributesPrefixed(prefix, ColumnNameIterator.from( iterator ), makeKey, insertable ); - } - - public List getAttributesPrefixed( - String prefix, - ColumnNameIterator columnNameIterator, - boolean makeKey, - boolean insertable) { - List prefixedAttributes = new ArrayList<>(); - for ( Attribute attribute : attributes ) { - Attribute prefixedAttribute = attribute.deepCopy(); - - String name = prefixedAttribute.getName(); - if ( name != null ) { - prefixedAttribute.setName( prefix + prefixedAttribute.getName() ); - } - - changeNamesInColumns( prefixedAttribute, columnNameIterator ); - - if ( makeKey ) { - if ( prefixedAttribute instanceof Keyable ){ - ( (Keyable) prefixedAttribute ).setKey( true ); - } - - // HHH-11463 when cloning a many-to-one to be a key-many-to-one, the FK attribute - // should be explicitly set to 'none' or added to be 'none' to avoid issues with - // making references to the main schema. - if ( prefixedAttribute instanceof ManyToOneAttribute ) { - final ManyToOneAttribute manyToOne = (ManyToOneAttribute) prefixedAttribute; - manyToOne.setForeignKey( "none" ); - } - } - - if ( prefixedAttribute instanceof BasicAttribute ) { - ( (BasicAttribute) prefixedAttribute ).setInsertable( insertable ); - } - - prefixedAttributes.add( prefixedAttribute ); - } - return prefixedAttributes; - } - - private static void changeNamesInColumns(Attribute attribute, ColumnNameIterator columnNameIterator) { - for ( Column column : attribute.getColumns() ) { - if ( column.getName() != null ) { - column.setName( columnNameIterator.next() ); - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Join.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Join.java deleted file mode 100644 index 914604c18385..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Join.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmKeyType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmSecondaryTableType; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.Selectable; -import org.hibernate.mapping.Value; - -/** - * Contract that represents a secondary table join that is part of an entity hierarchy. - * - * @author Chris Cranford - */ -public class Join implements AttributeContainer, Bindable { - - private final List keyColumns; - private final List attributes; - - private boolean inverse; - private boolean optional; - private String tableName; - private String schema; - private String catalog; - - public Join(String catalogName, String schemaName, String tableName) { - this.catalog = catalogName; - this.schema = schemaName; - this.tableName = tableName; - this.keyColumns = new ArrayList<>(); - this.attributes = new ArrayList<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - this.attributes.add( attribute ); - } - - public void setTable(String tableName) { - this.tableName = tableName; - } - - public void setSchema(String schema) { - this.schema = schema; - } - - public void setCatalog(String catalog) { - this.catalog = catalog; - } - - public void setOptional(boolean optional) { - this.optional = optional; - } - - public void setInverse(boolean inverse) { - this.inverse = inverse; - } - - public void addKeyColumn(Column keyColumn) { - this.keyColumns.add( keyColumn ); - } - - public void addKeyColumnsFromValue(Value value) { - final List selectables = value.getSelectables(); - for ( Selectable s : selectables ) { - keyColumns.add( Column.from( s ) ); - } - } - - @Override - public JaxbHbmSecondaryTableType build() { - final JaxbHbmSecondaryTableType join = new JaxbHbmSecondaryTableType(); - - if ( !StringTools.isEmpty( catalog ) ) { - join.setCatalog( catalog ); - } - - if ( !StringTools.isEmpty( schema ) ) { - join.setSchema( schema ); - } - - join.setTable( tableName ); - join.setOptional( optional ); - join.setInverse( inverse ); - - final JaxbHbmKeyType key = new JaxbHbmKeyType(); - join.setKey( key ); - - for ( Column keyColumn : keyColumns ) { - key.getColumn().add( keyColumn.build() ); - } - - for ( Attribute attribute : attributes ) { - join.getAttributes().add( attribute.build() ); - } - - return join; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/JoinAwarePersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/JoinAwarePersistentEntity.java deleted file mode 100644 index 481552fe8a62..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/JoinAwarePersistentEntity.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.List; - -/** - * Contract for entity mappings that support secondary table joins. - * - * @author Chris Cranford - */ -public interface JoinAwarePersistentEntity { - /** - * Get an unmodifiable list of joins associated with entity mapping. - * @return list of joins - */ - List getJoins(); - - /** - * Add a secondary table join to the entity mapping. - * @param join the secondary table join, should never be {@code null} - */ - void addJoin(Join join); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/JoinedSubclassPersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/JoinedSubclassPersistentEntity.java deleted file mode 100644 index 92723e370581..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/JoinedSubclassPersistentEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmJoinedSubclassEntityType; -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.PersistentClass; - -/** - * A persistent entity mapping that uses joined table(s) to store the hierarchy of entity types. - * - * @author Chris Cranford - */ -public class JoinedSubclassPersistentEntity extends SubclassPersistentEntity { - - private final List attributes; - private String discriminatorValue; - private Key key; - - public JoinedSubclassPersistentEntity(AuditTableData auditTableData, PersistentClass persistentClass) { - super( auditTableData, persistentClass ); - this.attributes = new ArrayList<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - attributes.add( attribute ); - } - - public void setKey(Key key) { - this.key = key; - } - - public String getDiscriminatorValue() { - return discriminatorValue; - } - - public void setDiscriminatorValue(String discriminatorValue) { - this.discriminatorValue = discriminatorValue; - } - -// @Override -// public List getJoins() { -// throw new UnsupportedOperationException(); -// } -// -// @Override -// public void addJoin(Join join) { -// throw new UnsupportedOperationException(); -// } - - @Override - public void build(JaxbHbmHibernateMapping mapping) { - mapping.getJoinedSubclass().add( buildJaxbMapping() ); - } - - public JaxbHbmJoinedSubclassEntityType buildJaxbMapping() { - final JaxbHbmJoinedSubclassEntityType entity = new JaxbHbmJoinedSubclassEntityType(); - entity.setExtends( getExtends() ); - - // Set common stuff - if ( getPersistentClass() != null ) { - entity.setAbstract( getPersistentClass().isAbstract() ); - } - - if ( !StringTools.isEmpty(getAuditTableData().getAuditEntityName() ) ) { - entity.setEntityName( getAuditTableData().getAuditEntityName() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getAuditTableName() ) ) { - entity.setTable( getAuditTableData().getAuditTableName() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getSchema() ) ) { - entity.setSchema( getAuditTableData().getSchema() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getCatalog() ) ) { - entity.setCatalog( getAuditTableData().getCatalog() ); - } - - for ( Attribute attribute : attributes ) { - entity.getAttributes().add( attribute.build() ); - } - - entity.setKey( key.build() ); - - if ( !StringTools.isEmpty( discriminatorValue ) ) { - entity.setDiscriminatorValue( discriminatorValue ); - } - - return entity; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Key.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Key.java deleted file mode 100644 index 8540dac23753..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Key.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmKeyType; - -/** - * Contract for declaring a column name of a foreign key. - * - * @author Chris Cranford - */ -public class Key implements ColumnContainer, Bindable, Cloneable { - - private final List columns; - - public Key() { - this.columns = new ArrayList<>(); - } - - public Key(Key key) { - this.columns = new ArrayList<>(); - for ( Column column : key.columns ) { - this.columns.add( new Column( column ) ); - } - } - - - @Override - public List getColumns() { - return columns; - } - - @Override - public void addColumn(Column column) { - this.columns.add( column ); - } - - @Override - public Key deepCopy() { - return new Key( this ); - } - - @Override - public JaxbHbmKeyType build() { - final JaxbHbmKeyType key = new JaxbHbmKeyType(); - for ( Column column : columns ) { - key.getColumn().add( column.build() ); - } - return key; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Keyable.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Keyable.java deleted file mode 100644 index 8f5e96029cd2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Keyable.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * Contract that defines an attribute that can participate in a key. - * - * @author Chris Cranford - */ -public interface Keyable { - /** - * Get whether the attribute is already participatig in a key. - * @return true if the attribute is in the key; false otherwise - */ - boolean isKey(); - - /** - * Set whether this attribute should or shouldn't participate as a key attribute. - * @param key specifies if the attribute is part of the key - */ - void setKey(boolean key); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ManyToOneAttribute.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ManyToOneAttribute.java deleted file mode 100644 index c6f859eb9d11..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/ManyToOneAttribute.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmCompositeKeyManyToOneType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmManyToOneType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmOnDeleteEnum; -import org.hibernate.envers.internal.tools.StringTools; - -/** - * Represents a plural attribute mapping of a {@code many-to-one} or {@code key-many-to-one}. - * - * @author Chris Cranford - */ -public class ManyToOneAttribute implements PluralAttribute, Keyable { - - private final List columns; - - private final String type; - private final boolean insertable; - private final boolean updatable; - private boolean key; - private final String clazz; - private String onDelete; - private String name; - private String foreignKey; - - public ManyToOneAttribute(String name, String type, boolean insertable, boolean updatable, boolean key, String explicitType) { - this.name = name; - this.type = type; - this.insertable = insertable; - this.updatable = updatable; - this.key = key; - this.clazz = explicitType; - this.columns = new ArrayList<>(); - } - - public ManyToOneAttribute(ManyToOneAttribute other) { - this.name = other.name; - this.type = other.type; - this.insertable = other.insertable; - this.updatable = other.updatable; - this.key = other.key; - this.clazz = other.clazz; - this.onDelete = other.onDelete; - this.foreignKey = other.foreignKey; - - this.columns = new ArrayList<>(); - for ( Column column : other.columns ) { - this.columns.add( column.deepCopy() ); - } - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - } - - @Override - public void setKey(boolean key) { - this.key = key; - } - - @Override - public boolean isKey() { - return key; - } - - public String getOnDelete() { - return onDelete; - } - - public void setOnDelete(String onDelete) { - this.onDelete = onDelete; - } - - @Override - public List getColumns() { - return Collections.unmodifiableList( columns ); - } - - @Override - public void addColumn(Column column) { - this.columns.add( column ); - } - - public void setForeignKey(String foreignKey) { - this.foreignKey = foreignKey; - } - - @Override - public ManyToOneAttribute deepCopy() { - return new ManyToOneAttribute( this ); - } - - @Override - public Serializable build() { - if ( key ) { - return buildKeyManyToOne(); - } - return buildManyToOne(); - } - - private JaxbHbmCompositeKeyManyToOneType buildKeyManyToOne() { - final JaxbHbmCompositeKeyManyToOneType manyToOne = new JaxbHbmCompositeKeyManyToOneType(); - manyToOne.setName( name ); - manyToOne.setClazz( clazz ); - manyToOne.setOnDelete( getOnDeleteEnum() ); - - if ( !StringTools.isEmpty( foreignKey ) ) { - manyToOne.setForeignKey(foreignKey); - } - - for ( Column column : columns ) { - manyToOne.getColumn().add( column.build() ); - } - - return manyToOne; - } - - private JaxbHbmManyToOneType buildManyToOne() { - final JaxbHbmManyToOneType manyToOne = new JaxbHbmManyToOneType(); - manyToOne.setName( name ); - manyToOne.setClazz( clazz ); - manyToOne.setInsert( insertable ); - manyToOne.setUpdate( updatable ); - manyToOne.setOnDelete( getOnDeleteEnum() ); - - if ( !StringTools.isEmpty( foreignKey ) ) { - manyToOne.setForeignKey(foreignKey); - } - - for ( Column column : columns ) { - manyToOne.getColumnOrFormula().add( column.build() ); - } - - return manyToOne; - } - - private JaxbHbmOnDeleteEnum getOnDeleteEnum() { - if ( onDelete != null ) { - return JaxbHbmOnDeleteEnum.fromValue( onDelete ); - } - return null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/PersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/PersistentEntity.java deleted file mode 100644 index a93aafb1c984..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/PersistentEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.mapping.PersistentClass; - -/** - * Contract for a persisted entity mapping. - * - * @author Chris Cranford - */ -public abstract class PersistentEntity implements AttributeContainer { - - private final AuditTableData auditTableData; - private final PersistentClass persistentClass; - - public PersistentEntity(AuditTableData auditTableData, PersistentClass persistentClass) { - this.auditTableData = auditTableData; - this.persistentClass = persistentClass; - } - - public AuditTableData getAuditTableData() { - return auditTableData; - } - - protected PersistentClass getPersistentClass() { - return persistentClass; - } - - public boolean isJoinAware() { - return false; - } - - public abstract void build(JaxbHbmHibernateMapping mapping); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/PluralAttribute.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/PluralAttribute.java deleted file mode 100644 index 9b54dc83a803..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/PluralAttribute.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * Contract for an attribute that represents multiple values. - * - * @author Chris Cranford - */ -public interface PluralAttribute extends Attribute { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/RootPersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/RootPersistentEntity.java deleted file mode 100644 index f1b3303a3276..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/RootPersistentEntity.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.hibernate.HibernateException; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmCompositeIdType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmRootEntityType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmSimpleIdType; -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.PersistentClass; - -/** - * A persistent entity mapping that represents the root entity of an entity hierarchy. - * - * @author Chris Cranford - */ -public class RootPersistentEntity extends PersistentEntity implements JoinAwarePersistentEntity { - - private final List attributes; - private final List joins; - - private Identifier identifier; - private String className; - private String entityName; - private String tableName; - private String whereClause; - private DiscriminatorType discriminator; - private String discriminatorValue; - - public RootPersistentEntity(AuditTableData auditTableData, PersistentClass persistentClass) { - super( auditTableData, persistentClass ); - this.attributes = new ArrayList<>(); - this.joins = new ArrayList<>(); - } - - public RootPersistentEntity(AuditTableData auditTableData, Class clazz, String entityName, String tableName) { - super( auditTableData, null ); - this.attributes = new ArrayList<>(); - this.joins = new ArrayList<>(); - this.className = clazz.getName(); - this.entityName = entityName; - this.tableName = tableName; - } - - @Override - public boolean isJoinAware() { - return true; - } - - @Override - public void addAttribute(Attribute attribute) { - attributes.add( attribute ); - } - - public Identifier getIdentifier() { - return identifier; - } - - public void setIdentifier(Identifier identifier) { - this.identifier = identifier; - } - - public DiscriminatorType getDiscriminator() { - return discriminator; - } - - public void setDiscriminator(DiscriminatorType discriminator) { - this.discriminator = discriminator; - } - - public String getDiscriminatorValue() { - return discriminatorValue; - } - - public void setDiscriminatorValue(String discriminatorValue) { - this.discriminatorValue = discriminatorValue; - } - - public void setWhereClause(String whereClause) { - this.whereClause = whereClause; - } - - @Override - public List getJoins() { - return Collections.unmodifiableList( joins ); - } - - @Override - public void addJoin(Join join) { - this.joins.add( join ); - } - - @Override - public void build(JaxbHbmHibernateMapping mapping) { - mapping.getClazz().add( buildJaxbMapping() ); - } - - private JaxbHbmRootEntityType buildJaxbMapping() { - final JaxbHbmRootEntityType entity = new JaxbHbmRootEntityType(); - - // Set common stuff - if ( getPersistentClass() != null ) { - entity.setAbstract(getPersistentClass().isAbstract()); - } - - if ( !StringTools.isEmpty( getAuditTableData().getAuditEntityName() ) ) { - entity.setEntityName( getAuditTableData().getAuditEntityName() ); - } - else if ( !StringTools.isEmpty( className ) ) { - entity.setName( className ); - if ( !StringTools.isEmpty( entityName ) ) { - entity.setEntityName( entityName ); - } - } - - if ( !StringTools.isEmpty( getAuditTableData().getAuditTableName() ) ) { - entity.setTable( getAuditTableData().getAuditTableName() ); - } - else if ( !StringTools.isEmpty( tableName ) ) { - entity.setTable( tableName ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getSchema() ) ) { - entity.setSchema( getAuditTableData().getSchema() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getCatalog() ) ) { - entity.setCatalog( getAuditTableData().getCatalog() ); - } - - Object id = identifier.build(); - if (id instanceof JaxbHbmSimpleIdType) { - entity.setId( (JaxbHbmSimpleIdType) id ); - } - else if (id instanceof JaxbHbmCompositeIdType) { - entity.setCompositeId( (JaxbHbmCompositeIdType) id ); - } - else { - throw new HibernateException( "Unknown identifier type: " + id.getClass().getName() ); - } - - // Initialize attributes - for (Attribute attribute : attributes) { - entity.getAttributes().add( attribute.build() ); - } - - for (Join join : joins) { - entity.getJoin().add( join.build() ); - } - - if ( !StringTools.isEmpty( whereClause ) ) { - entity.setWhere( whereClause ); - } - - if ( discriminator != null ) { - entity.setDiscriminator( discriminator.build() ); - } - - if ( !StringTools.isEmpty( discriminatorValue ) ) { - entity.setDiscriminatorValue( discriminatorValue ); - } - - return entity; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Selection.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Selection.java deleted file mode 100644 index 060eaaf7fea4..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/Selection.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * A contract for a selection, can be a column or a formula. - * - * @author Chris Cranford - */ -public abstract class Selection implements Bindable { - - public enum SelectionType { - COLUMN, - FORMULA - } - - private final SelectionType selectionType; - - public Selection(SelectionType selectionType) { - this.selectionType = selectionType; - } - - public SelectionType getSelectionType() { - return selectionType; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SetAttribute.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SetAttribute.java deleted file mode 100644 index 404d0b18eee1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SetAttribute.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.io.Serializable; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmBasicCollectionElementType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmFetchStyleWithSubselectEnum; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmKeyType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmLazyWithExtraEnum; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmSetType; -import org.hibernate.envers.boot.EnversMappingException; - -/** - * A plural attribute that represents a {@code set}. - * - * This attribute binds Hibernate's persistence model to a {@link JaxbHbmSetType} mapping that - * will be contributed by Envers back to Hibernate for the audit entity mappings. This does - * not bind all JAXB model attributes, only those which are applicable to Envers's metamodel. - * - * @author Chris Cranford - */ -public class SetAttribute implements PluralAttribute { - - private final String tableName; - private final String schemaName; - private final String catalogName; - - private String name; - private String cascade; - private String fetch; - private String keyColumn; - private String elementType; - private String columnName; - private String lazy; - - public SetAttribute(String name, String tableName, String schemaName, String catalogName) { - this.name = name; - this.tableName = tableName; - this.schemaName = schemaName; - this.catalogName = catalogName; - } - - public void setCascade(String cascade) { - this.cascade = cascade; - } - - public void setFetch(String fetch) { - this.fetch = fetch; - } - - public void setKeyColumn(String keyColumn) { - this.keyColumn = keyColumn; - } - - public void setElementType(String elementType) { - this.elementType = elementType; - } - - public void setLazy(String lazy) { - this.lazy = lazy; - } - - public void setColumnName(String columnName) { - this.columnName = columnName; - } - - @Override - public String getName() { - return name; - } - - @Override - public void setName(String name) { - this.name = name; - } - - // todo: can these be removed somehow? - - @Override - public List getColumns() { - throw new EnversMappingException( "Operation not supported" ); - } - - @Override - public void addColumn(Column column) { - throw new EnversMappingException( "Operation not supported" ); - } - - @Override - public Attribute deepCopy() { - throw new EnversMappingException( "Operation not supported" ); - } - - @Override - public Serializable build() { - // Initialize the set - final JaxbHbmSetType set = new JaxbHbmSetType(); - set.setName( name ); - set.setTable( tableName ); - set.setSchema( schemaName ); - set.setCatalog( catalogName ); - set.setCascade( cascade ); - set.setFetch( JaxbHbmFetchStyleWithSubselectEnum.fromValue( fetch ) ); - set.setLazy( JaxbHbmLazyWithExtraEnum.fromValue( lazy ) ); - - // Initialize the set's key - final JaxbHbmKeyType key = new JaxbHbmKeyType(); - key.setColumnAttribute( keyColumn ); - set.setKey( key ); - - // Initialize the set's element - final JaxbHbmBasicCollectionElementType element = new JaxbHbmBasicCollectionElementType(); - element.setTypeAttribute( elementType ); - element.setColumnAttribute( columnName ); - set.setElement( element ); - - return set; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SimpleIdentifier.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SimpleIdentifier.java deleted file mode 100644 index b41e81bd2147..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SimpleIdentifier.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmConfigParameterType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmGeneratorSpecificationType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmSimpleIdType; - -/** - * Represents a simple identifier mapping. - * - * @author Chris Cranford - */ -public class SimpleIdentifier extends AbstractIdentifier { - - private final String type; - private final List columns; - private final Map parameters; - private String generatorClazz; - - public SimpleIdentifier(String name, String type) { - super( name ); - this.type = type; - this.columns = new ArrayList<>(); - this.parameters = new HashMap<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - throw new IllegalStateException( "Simple generated identifiers don't support attributes?" ); - } - - public void addColumn(Column column) { - this.columns.add( column ); - } - - public void setParameter(String name, String value) { - this.parameters.put( name, value ); - } - - public String getGeneratorClass() { - return generatorClazz; - } - - public void setGeneratorClass(String generatorClazz) { - this.generatorClazz = generatorClazz; - } - - @Override - public JaxbHbmSimpleIdType build() { - final JaxbHbmSimpleIdType identifier = new JaxbHbmSimpleIdType(); - identifier.setName( getName() ); - identifier.setTypeAttribute( type ); - - final JaxbHbmGeneratorSpecificationType generator = new JaxbHbmGeneratorSpecificationType(); - generator.setClazz( generatorClazz ); - - for ( Map.Entry entry : parameters.entrySet() ) { - final JaxbHbmConfigParameterType param = new JaxbHbmConfigParameterType(); - param.setName( entry.getKey() ); - param.setValue( entry.getValue() ); - generator.getConfigParameters().add( param ); - } - - identifier.setGenerator( generator ); - - for ( Column column : columns ) { - identifier.getColumn().add( column.build() ); - } - - return identifier; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SingularAttribute.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SingularAttribute.java deleted file mode 100644 index bbc1594b022b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SingularAttribute.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -/** - * Contract for an attribute that represents a singular value. - * - * @author Chris Cranford - */ -public interface SingularAttribute extends Attribute { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SubclassPersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SubclassPersistentEntity.java deleted file mode 100644 index 4da56e16bec2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/SubclassPersistentEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.mapping.PersistentClass; - -/** - * @author Chris Cranford - */ -public abstract class SubclassPersistentEntity extends PersistentEntity { - - private String extendsEntityName; - - public SubclassPersistentEntity(AuditTableData auditTableData, PersistentClass persistentClass) { - super( auditTableData, persistentClass ); - } - - public String getExtends() { - return extendsEntityName; - } - - public void setExtends(String extendsEntityName) { - this.extendsEntityName = extendsEntityName; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/TypeSpecification.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/TypeSpecification.java deleted file mode 100644 index cfc955227cb7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/TypeSpecification.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmConfigParameterType; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmTypeSpecificationType; - -/** - * Contract for a type specification mapping. - * - * @author Chris Cranford - */ -public class TypeSpecification implements ConfigParameterContainer, Bindable, Cloneable { - - private final String name; - private final Map parameters; - - public TypeSpecification(String name) { - this.name = name; - this.parameters = new HashMap<>(); - } - - public TypeSpecification(TypeSpecification other) { - this.name = other.name; - this.parameters = new HashMap<>(); - for ( Map.Entry entry : other.parameters.entrySet() ) { - setParameter( entry.getKey(), entry.getValue() ); - } - } - - @Override - public Map getParameters() { - return Collections.unmodifiableMap( parameters ); - } - - @Override - public void setParameter(String name, String value) { - this.parameters.put( name, value ); - } - - @Override - public JaxbHbmTypeSpecificationType build() { - final JaxbHbmTypeSpecificationType definition = new JaxbHbmTypeSpecificationType(); - definition.setName(name); - - for ( Map.Entry entry : parameters.entrySet() ) { - final JaxbHbmConfigParameterType param = new JaxbHbmConfigParameterType(); - param.setName( entry.getKey() ); - param.setValue( entry.getValue() ); - - definition.getConfigParameters().add( param ); - } - - return definition; - } - - @Override - public TypeSpecification deepCopy() { - return new TypeSpecification( this ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/UnionSubclassPersistentEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/UnionSubclassPersistentEntity.java deleted file mode 100644 index a9141d5e2811..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/model/UnionSubclassPersistentEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.model; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmUnionSubclassEntityType; -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.PersistentClass; - -/** - * A persistent entity mapping that uses the table-per-class inheritance strategy. - * - * @author Chris Cranford - */ -public class UnionSubclassPersistentEntity extends SubclassPersistentEntity { - - private final List attributes; - - public UnionSubclassPersistentEntity(AuditTableData auditTableData, PersistentClass persistentClass) { - super( auditTableData, persistentClass ); - this.attributes = new ArrayList<>(); - } - - @Override - public void addAttribute(Attribute attribute) { - attributes.add( attribute ); - } - -// @Override -// public List getJoins() { -// throw new UnsupportedOperationException(); -// } -// -// @Override -// public void addJoin(Join join) { -// throw new UnsupportedOperationException(); -// } - - @Override - public void build(JaxbHbmHibernateMapping mapping) { - mapping.getUnionSubclass().add( buildJaxbMapping() ); - } - - public JaxbHbmUnionSubclassEntityType buildJaxbMapping() { - final JaxbHbmUnionSubclassEntityType entity = new JaxbHbmUnionSubclassEntityType(); - entity.setExtends( getExtends() ); - - // Set common stuff - if ( getPersistentClass() != null ) { - entity.setAbstract( getPersistentClass().isAbstract() ); - } - - if ( !StringTools.isEmpty(getAuditTableData().getAuditEntityName() ) ) { - entity.setEntityName( getAuditTableData().getAuditEntityName() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getAuditTableName() ) ) { - entity.setTable( getAuditTableData().getAuditTableName() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getSchema() ) ) { - entity.setSchema( getAuditTableData().getSchema() ); - } - - if ( !StringTools.isEmpty( getAuditTableData().getCatalog() ) ) { - entity.setCatalog( getAuditTableData().getCatalog() ); - } - - // Initialize attributes - for ( Attribute attribute : attributes ) { - entity.getAttributes().add( attribute.build() ); - } - - return entity; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/registry/classloading/ClassLoaderAccessHelper.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/registry/classloading/ClassLoaderAccessHelper.java deleted file mode 100644 index ccd685f77a02..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/registry/classloading/ClassLoaderAccessHelper.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.registry.classloading; - -import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; -import org.hibernate.boot.spi.ClassLoaderAccess; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; - -/** - * Utility class that facilitates loading of a class. - * - * @author Chris Cranford - */ -public final class ClassLoaderAccessHelper { - - /** - * Loads a class by name. - * - * @param metadataBuildingContext the metadata building context - * @param className the class to be loaded - * @return the loaded class instance - * @throws ClassLoadingException if there was an error loading the named class - */ - public static Class loadClass(EnversMetadataBuildingContext metadataBuildingContext, String className) { - ClassLoaderAccess classLoaderAccess = metadataBuildingContext.getBootstrapContext().getClassLoaderAccess(); - return classLoaderAccess.classForName( className ); - } - - private ClassLoaderAccessHelper() { - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/spi/EnversMetadataBuildingContext.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/spi/EnversMetadataBuildingContext.java deleted file mode 100644 index 35b329168d9a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/spi/EnversMetadataBuildingContext.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.spi; - -import org.hibernate.boot.spi.MetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.MappingCollector; -import org.hibernate.envers.configuration.internal.metadata.AuditEntityConfigurationRegistry; -import org.hibernate.envers.configuration.internal.metadata.AuditEntityNameRegister; -import org.hibernate.models.spi.ClassDetailsRegistry; -import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.service.ServiceRegistry; - -/** - * Metadata building context for Hibernate Envers - * - * @author Chris Cranford - */ -public interface EnversMetadataBuildingContext extends MetadataBuildingContext { - Configuration getConfiguration(); - - MappingCollector getMappingCollector(); - - ServiceRegistry getServiceRegistry(); - - SourceModelBuildingContext getSourceModelBuildingContext(); - - ClassDetailsRegistry getClassDetailsRegistry(); - - AuditEntityNameRegister getAuditEntityNameRegistry(); - - AuditEntityConfigurationRegistry getAuditEntityConfigurationRegistry(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/boot/spi/ModifiedColumnNamingStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/boot/spi/ModifiedColumnNamingStrategy.java deleted file mode 100644 index 3f56ff546073..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/boot/spi/ModifiedColumnNamingStrategy.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.boot.spi; - -import org.hibernate.Incubating; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.mapping.Value; - -/** - * Defines a naming strategy for applying modified columns to the audited entity metamodel. - * - * @author Chris Cranford - * @since 5.4.7 - */ -@Incubating -public interface ModifiedColumnNamingStrategy { - /** - * Adds modified columns to the audited entity metamodel. - * - * @param configuration the envers configuration - * @param value the property value - * @param mapping the entity mapping model - * @param propertyAuditingData the property auditing data - */ - void addModifiedColumns( - Configuration configuration, - Value value, - AttributeContainer mapping, - PropertyAuditingData propertyAuditingData); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/Configuration.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/Configuration.java deleted file mode 100644 index 1e06e9fc6599..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/Configuration.java +++ /dev/null @@ -1,440 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration; - -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; -import java.util.concurrent.Callable; - -import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; -import org.hibernate.boot.registry.selector.spi.StrategySelector; -import org.hibernate.boot.spi.InFlightMetadataCollector; -import org.hibernate.cfg.Environment; -import org.hibernate.dialect.HSQLDialect; -import org.hibernate.envers.RevisionListener; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy; -import org.hibernate.envers.boot.spi.ModifiedColumnNamingStrategy; -import org.hibernate.envers.configuration.internal.RevisionInfoConfiguration; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.envers.strategy.DefaultAuditStrategy; -import org.hibernate.internal.util.config.ConfigurationHelper; - -/** - * Envers configuration. - * - * @author Chris Cranford - */ -public class Configuration { - - private static final String OPERATOR_IN = "in"; - private static final String OPERATOR_EQUALS = "="; - - private static final String DEFAULT_PREFIX = ""; - private static final String DEFAULT_SUFFIX = "_AUD"; - private static final String DEFAULT_MODIFIED_FLAG_SUFFIX = "_MOD"; - private static final String DEFAULT_ORIGINAL_ID = "originalId"; - private static final String DEFAULT_REV_FIELD = "REV"; - private static final String DEFAULT_REVTYPE_FIELD = "REVTYPE"; - private static final String DEFAULT_REVTYPE_TYPE = "byte"; - private static final String DEFAULT_REVEND_FIELD = "REVEND"; - private static final String DEFAULT_REV_TSTMP_FIELD = "REVEND_TSTMP"; - private static final String DEFAULT_SETORDINAL_FIELD = "SETORDINAL"; - - private final EnversService enversService; - - private final String defaultCatalogName; - private final String defaultSchemaName; - private final String modifiedFlagsSuffix; - private final String correlatedSubqueryOperator; - - private final Class revisionListenerClass; - - private final AuditStrategy auditStrategy; - private final ModifiedColumnNamingStrategy modifiedColumnNamingStrategy; - - private final boolean nativeIdEnabled; - private final boolean allowIdentifierReuse; - private final boolean generateRevisionsForCollections; - private final boolean doNotAuditOptimisticLockingField; - private final boolean storeDeleteData; - private final boolean cascadeDeleteRevision; - private final boolean modifiedFlagsEnabled; - private final boolean modifiedFlagsDefined; - private final boolean findByRevisionExactMatch; - private final boolean globalLegacyRelationTargetNotFound; - - private final boolean trackEntitiesChanged; - private boolean trackEntitiesOverride; - - private final String auditTablePrefix; - private final String auditTableSuffix; - private final String originalIdPropertyName; - private final String revisionFieldName; - private final String revisionNumberPath; - private final String revisionPropertyBasePath; - private final String revisionTypePropertyName; - private final String revisionTypePropertyType; - private final String revisionEndFieldName; - private final String revisionEndTimestampFieldName; - private final String embeddableSetOrdinalPropertyName; - private final boolean revisionEndTimestampEnabled; - private final boolean revisionEndTimestampNumeric; - private final boolean revisionEndTimestampUseLegacyPlacement; - private final boolean revisionSequenceNoCache; - - private final Map customAuditTableNames = new HashMap<>(); - - private final RevisionInfoConfiguration revisionInfo; - - public Configuration(Properties properties, EnversService enversService, InFlightMetadataCollector metadata) { - this.enversService = enversService; - - final ConfigurationProperties configProps = new ConfigurationProperties( properties ); - - defaultCatalogName = configProps.getString( EnversSettings.DEFAULT_CATALOG ); - defaultSchemaName = configProps.getString( EnversSettings.DEFAULT_SCHEMA ); - - correlatedSubqueryOperator = resolveCorrelatedSubqueryOperator( properties ); - - modifiedFlagsSuffix = configProps.getString( EnversSettings.MODIFIED_FLAG_SUFFIX, DEFAULT_MODIFIED_FLAG_SUFFIX ); - - revisionListenerClass = resolveRevisionListener( configProps, enversService ); - - final StrategySelector strategySelector = enversService.getServiceRegistry().getService( StrategySelector.class ); - modifiedColumnNamingStrategy = resolveModifiedColumnNamingStrategy( configProps, strategySelector ); - auditStrategy = resolveAuditStrategy( configProps, strategySelector ); - - nativeIdEnabled = configProps.getBoolean( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, true ); - allowIdentifierReuse = configProps.getBoolean( EnversSettings.ALLOW_IDENTIFIER_REUSE, false ); - - generateRevisionsForCollections = configProps.getBoolean( EnversSettings.REVISION_ON_COLLECTION_CHANGE, true ); - - // todo: deprecate original in favor of enabling versioning optimistic locking as opt-in. - doNotAuditOptimisticLockingField = configProps.getBoolean( EnversSettings.DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD, true ); - - storeDeleteData = configProps.getBoolean( EnversSettings.STORE_DATA_AT_DELETE, false ); - cascadeDeleteRevision = configProps.getBoolean( EnversSettings.CASCADE_DELETE_REVISION, false ); - trackEntitiesChanged = configProps.getBoolean( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, false ); - - modifiedFlagsDefined = properties.get( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG ) != null; - modifiedFlagsEnabled = configProps.getBoolean( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, false ); - - findByRevisionExactMatch = configProps.getBoolean( EnversSettings.FIND_BY_REVISION_EXACT_MATCH, false ); - globalLegacyRelationTargetNotFound = configProps.getBoolean( EnversSettings.GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG, true ); - - auditTablePrefix = configProps.getString( EnversSettings.AUDIT_TABLE_PREFIX, DEFAULT_PREFIX ); - auditTableSuffix = configProps.getString( EnversSettings.AUDIT_TABLE_SUFFIX, DEFAULT_SUFFIX ); - - originalIdPropertyName = configProps.getString( EnversSettings.ORIGINAL_ID_PROP_NAME, DEFAULT_ORIGINAL_ID ); - revisionFieldName = configProps.getString( EnversSettings.REVISION_FIELD_NAME, DEFAULT_REV_FIELD ); - - revisionTypePropertyName = configProps.getString( EnversSettings.REVISION_TYPE_FIELD_NAME, DEFAULT_REVTYPE_FIELD ); - revisionTypePropertyType = DEFAULT_REVTYPE_TYPE; - - revisionEndFieldName = configProps.getString( - EnversSettings.AUDIT_STRATEGY_VALIDITY_END_REV_FIELD_NAME, - DEFAULT_REVEND_FIELD - ); - - revisionEndTimestampEnabled = configProps.getBoolean( - EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, - false - ); - - if ( revisionEndTimestampEnabled ) { - revisionEndTimestampFieldName = configProps.getString( - EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, - DEFAULT_REV_TSTMP_FIELD - ); - revisionEndTimestampNumeric = configProps.getBoolean( - EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_NUMERIC, - false - ); - revisionEndTimestampUseLegacyPlacement = configProps.getBoolean( - EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_LEGACY_PLACEMENT, - true - ); - } - else { - revisionEndTimestampFieldName = null; - revisionEndTimestampNumeric = false; - revisionEndTimestampUseLegacyPlacement = true; - } - - embeddableSetOrdinalPropertyName = configProps.getString( - EnversSettings.EMBEDDABLE_SET_ORDINAL_FIELD_NAME, - DEFAULT_SETORDINAL_FIELD - ); - revisionSequenceNoCache = configProps.getBoolean( - EnversSettings.REVISION_SEQUENCE_NOCACHE, - false - ); - - revisionPropertyBasePath = originalIdPropertyName + "." + revisionFieldName + "."; - revisionNumberPath = revisionPropertyBasePath + "id"; - - this.revisionInfo = new RevisionInfoConfiguration( this, metadata ); - } - - public boolean isGenerateRevisionsForCollections() { - return generateRevisionsForCollections; - } - - public boolean isDoNotAuditOptimisticLockingField() { - return doNotAuditOptimisticLockingField; - } - - public boolean isStoreDataAtDelete() { - return storeDeleteData; - } - - public boolean isTrackEntitiesChanged() { - return trackEntitiesOverride ? trackEntitiesOverride : trackEntitiesChanged; - } - - public void setTrackEntitiesChanged(boolean trackEntitiesChanged) { - this.trackEntitiesOverride = trackEntitiesChanged; - } - - public boolean hasSettingForUseModifiedFlag() { - return modifiedFlagsDefined; - } - - public boolean isModifiedFlagsEnabled() { - return modifiedFlagsEnabled; - } - - public boolean isNativeIdEnabled() { - return nativeIdEnabled; - } - - public boolean isCascadeDeleteRevision() { - return cascadeDeleteRevision; - } - - public boolean isAllowIdentifierReuse() { - return allowIdentifierReuse; - } - - public boolean isFindByRevisionExactMatch() { - return findByRevisionExactMatch; - } - - public boolean isGlobalLegacyRelationTargetNotFound() { - return globalLegacyRelationTargetNotFound; - } - - public boolean isRevisionEndTimestampEnabled() { - return revisionEndTimestampEnabled; - } - - public boolean isRevisionEndTimestampNumeric() { - return revisionEndTimestampNumeric; - } - - public boolean isRevisionEndTimestampUseLegacyPlacement() { - return revisionEndTimestampUseLegacyPlacement; - } - - public boolean isRevisionSequenceNoCache() { - return revisionSequenceNoCache; - } - - public String getDefaultCatalogName() { - return defaultCatalogName; - } - - public String getDefaultSchemaName() { - return defaultSchemaName; - } - - public String getCorrelatedSubqueryOperator() { - return correlatedSubqueryOperator; - } - - public String getModifiedFlagsSuffix() { - return modifiedFlagsSuffix; - } - - public String getOriginalIdPropertyName() { - return originalIdPropertyName; - } - - public String getRevisionFieldName() { - return revisionFieldName; - } - - public String getRevisionEndTimestampFieldName() { - return revisionEndTimestampFieldName; - } - - public String getRevisionEndFieldName() { - return revisionEndFieldName; - } - - public String getRevisionNumberPath() { - return revisionNumberPath; - } - - /** - * todo: move this - * Get the revision property path. - * - * @param propertyName the property name within the revision entity - * @return path to the given property of the revision entity associated with the audited entity - */ - public String getRevisionPropertyPath(String propertyName) { - return revisionPropertyBasePath + propertyName; - } - - public String getRevisionTypePropertyName() { - return revisionTypePropertyName; - } - - public String getRevisionTypePropertyType() { - return revisionTypePropertyType; - } - - /** - * todo: move this - * Get the audit enttiy name. - * - * @param entityName the entity name - * @return the prefixed and suffixed audit entity name based on configuration - */ - public String getAuditEntityName(String entityName) { - return auditTablePrefix + entityName + auditTableSuffix; - } - - public void addCustomAuditTableName(String entityName, String tableName) { - customAuditTableNames.put( entityName, tableName ); - } - - /** - * Gets the audit table name by looking up the entity in the defined custom tables and if not found - * returns a prefixed, suffixed audit table name. In the latter case, the name is not registered. - * - * @param entityName the entity name - * @param tableName the table name - * @return the audit table name either from the custom defined tables or prefixed/suffixed inline - */ - public String getAuditTableName(String entityName, String tableName) { - final String existingName = customAuditTableNames.get( entityName ); - if ( existingName != null ) { - return existingName; - } - return getAuditEntityName( tableName ); - } - - public String getAuditStrategyName() { - return auditStrategy.getClass().getName(); - } - - public String getEmbeddableSetOrdinalPropertyName() { - return embeddableSetOrdinalPropertyName; - } - - public Class getRevisionListenerClass() { - return revisionListenerClass; - } - - public AuditStrategy getAuditStrategy() { - return auditStrategy; - } - - public ModifiedColumnNamingStrategy getModifiedColumnNamingStrategy() { - return modifiedColumnNamingStrategy; - } - - public RevisionInfoConfiguration getRevisionInfo() { - return revisionInfo; - } - - /** - * Returns a reference to the {@link EnversService}. - * This method is not recommended and discouraged, will be removed in a future release. - * - * @return the envers service - */ - public EnversService getEnversService() { - return enversService; - } - - private static String resolveCorrelatedSubqueryOperator(Properties properties) { - if ( HSQLDialect.class.getName().equals( properties.get( Environment.DIALECT ) ) ) { - return OPERATOR_IN; - } - return OPERATOR_EQUALS; - } - - private static Class resolveRevisionListener( - ConfigurationProperties configProps, - EnversService enversService) { - final String className = configProps.getString( EnversSettings.REVISION_LISTENER ); - if ( !StringTools.isEmpty( className ) ) { - try { - return ReflectionTools.loadClass( className, enversService.getClassLoaderService() ); - } - catch (ClassLoadingException e) { - throw new EnversMappingException( "Revision listener class not found: " + className + "." ); - } - } - return null; - } - - private static ModifiedColumnNamingStrategy resolveModifiedColumnNamingStrategy( - ConfigurationProperties configProps, - StrategySelector selector) { - return selector.resolveDefaultableStrategy( - ModifiedColumnNamingStrategy.class, - configProps.getString( EnversSettings.MODIFIED_COLUMN_NAMING_STRATEGY ), - (Callable) () -> selector.resolveDefaultableStrategy( - ModifiedColumnNamingStrategy.class, - "default", - new LegacyModifiedColumnNamingStrategy() - ) - ); - } - - private static AuditStrategy resolveAuditStrategy(ConfigurationProperties configProps, StrategySelector selector) { - return selector.resolveDefaultableStrategy( - AuditStrategy.class, - configProps.getString( EnversSettings.AUDIT_STRATEGY, DefaultAuditStrategy.class.getName() ), - (Callable) () -> new DefaultAuditStrategy() - ); - } - - private static class ConfigurationProperties { - private final Properties properties; - - private ConfigurationProperties(Properties properties) { - this.properties = properties; - } - - String getString(String propertyName) { - return ConfigurationHelper.getString( propertyName, properties ); - } - - String getString(String propertyName, String defaultValue) { - return ConfigurationHelper.getString( propertyName, properties, defaultValue ); - } - - boolean getBoolean(String propertyName, boolean defaultValue) { - return ConfigurationHelper.getBoolean( propertyName, properties, defaultValue ); - } - - boolean getBooleanWithFallback(String basePropertyName, String newPropertyName, boolean defaultValue) { - if ( !properties.containsKey( basePropertyName ) ) { - return getBoolean( newPropertyName, defaultValue ); - } - return ConfigurationHelper.getBoolean( basePropertyName, properties ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/EnversSettings.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/EnversSettings.java deleted file mode 100644 index baac56ca51b0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/EnversSettings.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration; - -import org.hibernate.Internal; - -/** - * Configuration property names. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public interface EnversSettings { - /** - * Triggers revision generation when not-owned relation field changes. Defaults to {@code true}. - */ - String REVISION_ON_COLLECTION_CHANGE = "org.hibernate.envers.revision_on_collection_change"; - - /** - * Treats optimistic locking properties as unversioned. Defaults to {@code true}. - */ - String DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD = "org.hibernate.envers.do_not_audit_optimistic_locking_field"; - - /** - * Indicates whether entity data should be stored during removal. Defaults to {@code false}. - */ - String STORE_DATA_AT_DELETE = "org.hibernate.envers.store_data_at_delete"; - - /** - * Default name of the schema containing audit tables. - */ - String DEFAULT_SCHEMA = "org.hibernate.envers.default_schema"; - - /** - * Default name of the catalog containing audit tables. - */ - String DEFAULT_CATALOG = "org.hibernate.envers.default_catalog"; - - /** - * Track entity names that have been changed during each revision. Defaults to {@code false}. - */ - String TRACK_ENTITIES_CHANGED_IN_REVISION = "org.hibernate.envers.track_entities_changed_in_revision"; - - /** - * Use revision entity with native identifier generator. Defaults to {@code true} for backward compatibility. - */ - String USE_REVISION_ENTITY_WITH_NATIVE_ID = "org.hibernate.envers.use_revision_entity_with_native_id"; - - /** - * Globally activates modified properties flag feature. Defaults to {@code false}. - */ - String GLOBAL_WITH_MODIFIED_FLAG = "org.hibernate.envers.global_with_modified_flag"; - - /** - * Suffix of modified flag columns. Defaults to {@literal _MOD}. - */ - String MODIFIED_FLAG_SUFFIX = "org.hibernate.envers.modified_flag_suffix"; - - /** - * Fully qualified class name of user defined revision listener. - */ - String REVISION_LISTENER = "org.hibernate.envers.revision_listener"; - - /** - * Audit table prefix. Empty by default. - */ - String AUDIT_TABLE_PREFIX = "org.hibernate.envers.audit_table_prefix"; - - /** - * Audit table suffix. Defaults to {@literal _AUD}. - */ - String AUDIT_TABLE_SUFFIX = "org.hibernate.envers.audit_table_suffix"; - - /** - * Audit strategy. Defaults to {@link org.hibernate.envers.strategy.DefaultAuditStrategy}. - */ - String AUDIT_STRATEGY = "org.hibernate.envers.audit_strategy"; - - /** - * Revision field name. Defaults to {@literal REV}. - */ - String REVISION_FIELD_NAME = "org.hibernate.envers.revision_field_name"; - - /** - * Revision type field name. Defaults to {@literal REVTYPE}. - */ - String REVISION_TYPE_FIELD_NAME = "org.hibernate.envers.revision_type_field_name"; - - /** - * Original id property name name. Defaults to {@literal originalId}. - */ - String ORIGINAL_ID_PROP_NAME = "org.hibernate.envers.original_id_prop_name"; - - /** - * Column name that will hold the end revision number in audit entities. Defaults to {@literal REVEND}. - */ - String AUDIT_STRATEGY_VALIDITY_END_REV_FIELD_NAME = "org.hibernate.envers.audit_strategy_validity_end_rev_field_name"; - - /** - * Store the timestamp of the end revision, until which the data was valid, - * in addition to the end revision itself. Defaults to {@code false}. - */ - String AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP = "org.hibernate.envers.audit_strategy_validity_store_revend_timestamp"; - - /** - * Column name of the timestamp of the end revision until which the data was valid. - * Defaults to {@literal REVEND_TSTMP}. - */ - String AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME = "org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name"; - - /** - * Determines whether the timestamp of the end revision is stored as a numeric data type. - * Defaults to {@literal false}. - * - * @since 6.0 - */ - String AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_NUMERIC = "org.hibernate.envers.audit_strategy_validity_revend_timestamp_numeric"; - - /** - * Whether to use legacy validity audit strategy revision end timestamp behavior where the field is not - * included as part of the joined entity inheritance subclass audit tables. - * - * Defaults to {@code true}. - * - * @since 6.0 - */ - String AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_LEGACY_PLACEMENT = "org.hibernate.envers.audit_strategy_validity_revend_timestamp_legacy_placement"; - - /** - * Name of column used for storing ordinal of the change in sets of embeddable elements. Defaults to {@literal SETORDINAL}. - */ - String EMBEDDABLE_SET_ORDINAL_FIELD_NAME = "org.hibernate.envers.embeddable_set_ordinal_field_name"; - - /** - * Guarantees proper validity audit strategy behavior when application reuses identifiers of deleted entities. - * Exactly one row with {@code null} end date exists for each identifier. - */ - String ALLOW_IDENTIFIER_REUSE = "org.hibernate.envers.allow_identifier_reuse"; - - /** - * Forces {@code AuditReader#find} implementations that accept a revision-number argument to perform an exact - * match against the supplied revision number rather than potentially returning hits that are less-than or - * equal-to the supplied revision number. - * - * This option is meant to maintain backward compatibility while attempting to correct a bug in behavior without - * impacting existing users who may use the current behavior. - * - * Defaults to {@literal false}. - * - * @since 5.4.4 - */ - String FIND_BY_REVISION_EXACT_MATCH = "org.hibernate.envers.find_by_revision_exact_match"; - - /** - * Specifies the {@link org.hibernate.envers.boot.spi.ModifiedColumnNamingStrategy} to use - * - * Defaults to {@link org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy}. - * - * @since 5.4.7 - */ - String MODIFIED_COLUMN_NAMING_STRATEGY = "org.hibernate.envers.modified_column_naming_strategy"; - - /** - * Deletion of a revision entity will cause a foreign key constraint database error when at least one - * audit record exists for that revision. By enabling this feature, deletion of the revision entity - * will also force all audit records associated to that revision to be deleted via cascade. - * - * Defaults to {@literal false}. - * - * @since 4.3.0 - */ - String CASCADE_DELETE_REVISION = "org.hibernate.envers.cascade_delete_revision"; - - /** - * Globally defines whether legacy relation not-found behavior should be used or not. - * Defaults to {@code true}. - * - * By specifying {@code true}, any {@code EntityNotFoundException} will be thrown unless the containing - * class or property explicitly specifies that use case to be ignored. Conversely, when specifying the - * value {@code false}, the inverse applies and requires explicitly specifying the use case as error so - * that the exception is thrown. - */ - String GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG = "org.hibernate.envers.global_relation_not_found_legacy_flag"; - - /** - * Whether to apply a nocache configuration for the revision sequence. - * This is mostly interesting for testing. - */ - @Internal - String REVISION_SEQUENCE_NOCACHE = "org.hibernate.envers.revision_sequence_nocache"; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/ClassesAuditingData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/ClassesAuditingData.java deleted file mode 100644 index e9b6472427da..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/ClassesAuditingData.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal; - -import java.lang.invoke.MethodHandles; -import java.util.Collection; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Locale; -import java.util.Map; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.RelationTargetNotFoundAction; -import org.hibernate.envers.configuration.internal.metadata.reader.AuditedPropertiesHolder; -import org.hibernate.envers.configuration.internal.metadata.reader.ClassAuditingData; -import org.hibernate.envers.configuration.internal.metadata.reader.ComponentAuditingData; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.EnversMessageLogger; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.List; -import org.hibernate.mapping.PersistentClass; - -import org.hibernate.mapping.Property; -import org.hibernate.mapping.Value; -import org.jboss.logging.Logger; - -/** - * A helper class holding auditing meta-data for all persistent classes during boot-time. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class ClassesAuditingData { - private static final EnversMessageLogger LOG = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversMessageLogger.class, - ClassesAuditingData.class.getName() - ); - - private final Map entityNameToAuditingData = new HashMap<>(); - private final Map persistentClassToAuditingData = new LinkedHashMap<>(); - - /** - * Stores information about auditing meta-data for the given class. - * - * @param cad Auditing meta-data for the given class. - */ - public void addClassAuditingData(ClassAuditingData cad) { - entityNameToAuditingData.put( cad.getEntityName(), cad ); - persistentClassToAuditingData.put( cad.getPersistentClass(), cad ); - } - - /** - * @return A collection of all auditing meta-data for persistent classes. - */ - public Collection getAllClassAuditedData() { - return persistentClassToAuditingData.values(); - } - - /** - * After all meta-data is read, updates calculated fields. This includes: - *
    - *
  • setting {@code forceInsertable} to {@code true} for properties specified by {@code @AuditMappedBy}
  • - *
  • adding {@code synthetic} properties to mappedBy relations which have {@code IndexColumn} or {@code OrderColumn}.
  • - *
- */ - public void updateCalculatedFields() { - for ( ClassAuditingData classAuditingData : persistentClassToAuditingData.values() ) { - final PersistentClass persistentClass = classAuditingData.getPersistentClass(); - for ( String propertyName : classAuditingData.getNonSyntheticPropertyNames() ) { - final Property property = persistentClass.getProperty( propertyName ); - updateCalculatedProperty( persistentClass.getEntityName(), property, propertyName, classAuditingData ); - } - } - } - - private void updateCalculatedProperty(String entityName, Property property, String propertyName, AuditedPropertiesHolder propertyHolder) { - final PropertyAuditingData propertyAuditingData = propertyHolder.getPropertyAuditingData( propertyName ); - final boolean isAuditMappedBy = propertyAuditingData.getAuditMappedBy() != null; - final boolean isRelationMappedBy = propertyAuditingData.getRelationMappedBy() != null; - - // handle updating the property, if applicable. - if ( isAuditMappedBy || isRelationMappedBy ) { - final String referencedEntityName = MappingTools.getReferencedEntityName( property.getValue() ); - final ClassAuditingData referencedAuditData = entityNameToAuditingData.get( referencedEntityName ); - - if ( isAuditMappedBy ) { - // If a property had the @AuditMappedBy annotation, setting the referenced fields to be always insertable. - setAuditMappedByInsertable( referencedEntityName, entityName, referencedAuditData, propertyAuditingData ); - } - else if ( isRelationMappedBy && ( property.getValue() instanceof List ) ) { - // If a property has mappedBy= and @Indexed and isn't @AuditMappedBy, add synthetic support. - addSyntheticIndexProperty( - (List) property.getValue(), - property.getPropertyAccessorName(), - referencedAuditData - ); - } - } - - if ( propertyAuditingData.getMapKeyEnumType() != null ) { - final String referencedEntityName = MappingTools.getReferencedEntityName( property.getValue() ); - if ( referencedEntityName != null ) { - // If no entity could be determined, this means the enum type isn't an entity mapping and instead is one - // to a basic type. In this use case, there is nothing special to do. - final ClassAuditingData referencedAuditingData = entityNameToAuditingData.get( referencedEntityName ); - addMapEnumeratedKey( property.getValue(), property.getPropertyAccessorName(), referencedAuditingData ); - } - } - - // HHH-9108 - // Added support to handle nested property calculations for components. - // This is useful for AuditMappedBy inside an Embeddable that holds a collection of entities. - if ( propertyAuditingData instanceof ComponentAuditingData ) { - final ComponentAuditingData componentAuditingData = ( ComponentAuditingData) propertyAuditingData; - final Component component = (Component) property.getValue(); - for ( String componentPropertyName : componentAuditingData.getNonSyntheticPropertyNames() ) { - final Property componentProperty = component.getProperty( componentPropertyName ); - updateCalculatedProperty( entityName, componentProperty, componentPropertyName, componentAuditingData ); - } - } - } - - private void setAuditMappedByInsertable( - String referencedEntityName, - String entityName, - ClassAuditingData referencedAuditData, - PropertyAuditingData propertyAuditingData) { - forcePropertyInsertable( - referencedAuditData, - propertyAuditingData.getAuditMappedBy(), - entityName, - referencedEntityName - ); - - forcePropertyInsertable( - referencedAuditData, - propertyAuditingData.getPositionMappedBy(), - entityName, - referencedEntityName - ); - } - - private void addSyntheticIndexProperty(List value, String propertyAccessorName, ClassAuditingData classAuditingData) { - final Value indexValue = value.getIndex(); - if ( indexValue != null && indexValue.getSelectables().size() > 0 ) { - final String indexColumnName = indexValue.getSelectables().get( 0 ).getText(); - if ( indexColumnName != null ) { - final PropertyAuditingData auditingData = new PropertyAuditingData( - indexColumnName, - propertyAccessorName, - RelationTargetNotFoundAction.ERROR, - false, - true, - indexValue - ); - classAuditingData.addPropertyAuditingData( indexColumnName, auditingData ); - } - } - } - - private void addMapEnumeratedKey(Value value, String propertyAccessorName, ClassAuditingData classAuditingData) { - if ( value instanceof org.hibernate.mapping.Map ) { - final Value indexValue = ( (org.hibernate.mapping.Map) value ).getIndex(); - if ( indexValue != null && indexValue.getSelectables().size() > 0 ) { - final String indexColumnName = indexValue.getSelectables().get( 0 ).getText(); - if ( !StringTools.isEmpty( indexColumnName ) ) { - final PropertyAuditingData propertyAuditingData = new PropertyAuditingData( - indexColumnName, - propertyAccessorName, - RelationTargetNotFoundAction.ERROR, - true, - true, - indexValue - ); - - classAuditingData.addPropertyAuditingData( indexColumnName, propertyAuditingData ); - } - } - } - } - - private void forcePropertyInsertable( - ClassAuditingData classAuditingData, - String propertyName, - String entityName, - String referencedEntityName) { - if ( propertyName != null ) { - if ( classAuditingData.getPropertyAuditingData( propertyName ) == null ) { - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "@AuditMappedBy points to a property that doesn't exist: %s.%s", - referencedEntityName, - propertyName - ) - ); - } - - LOG.debugf( - "Non-insertable property %s.%s will be made insertable because a matching @AuditMappedBy was found in the %s entity", - referencedEntityName, - propertyName, - entityName - ); - - classAuditingData.getPropertyAuditingData( propertyName ).setForceInsertable( true ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/EntitiesConfigurator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/EntitiesConfigurator.java deleted file mode 100644 index a8c80907723f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/EntitiesConfigurator.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.envers.boot.model.PersistentEntity; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator; -import org.hibernate.envers.configuration.internal.metadata.EntityMappingData; -import org.hibernate.envers.configuration.internal.metadata.reader.AnnotationsMetadataReader; -import org.hibernate.envers.configuration.internal.metadata.reader.ClassAuditingData; -import org.hibernate.envers.internal.entities.EntitiesConfigurations; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.envers.internal.tools.graph.GraphTopologicalSort; -import org.hibernate.mapping.PersistentClass; - - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class EntitiesConfigurator { - - public EntitiesConfigurations configure(EnversMetadataBuildingContext metadataBuildingContext) { - final MetadataImplementor metadata = metadataBuildingContext.getMetadataCollector(); - final Configuration configuration = metadataBuildingContext.getConfiguration(); - - // Sorting the persistent class topologically - superclass always before subclass - - final Iterator classes = GraphTopologicalSort.sort( new PersistentClassGraphDefiner( metadata ) ) - .iterator(); - - final ClassesAuditingData classesAuditingData = new ClassesAuditingData(); - - // Reading metadata from annotations - final AnnotationsMetadataReader reader = new AnnotationsMetadataReader( metadataBuildingContext ); - while ( classes.hasNext() ) { - final PersistentClass pc = classes.next(); - - // Ensure we're in POJO, not dynamic model, mapping. - if ( pc.getClassName() != null ) { - // Collecting information from annotations on the persistent class pc - classesAuditingData.addClassAuditingData( reader.getAuditData( pc ) ); - } - } - - // Now that all information is read we can update the calculated fields. - classesAuditingData.updateCalculatedFields(); - - final AuditMetadataGenerator auditMetaGen = new AuditMetadataGenerator( metadataBuildingContext ); - - // First pass - final Map mappings = new HashMap<>(); - for ( ClassAuditingData auditData : classesAuditingData.getAllClassAuditedData() ) { - final EntityMappingData mappingData = new EntityMappingData(); - final PersistentClass persistentClass = auditData.getPersistentClass(); - if ( auditData.isAudited() ) { - if ( !StringTools.isEmpty( auditData.getAuditTable().value() ) ) { - final String entityName = persistentClass.getEntityName(); - final String auditTableName = auditData.getAuditTable().value(); - configuration.addCustomAuditTableName( entityName, auditTableName ); - } - auditMetaGen.generateFirstPass( auditData, mappingData, true ); - } - else { - auditMetaGen.generateFirstPass( auditData, mappingData, false ); - } - mappings.put( persistentClass, mappingData ); - } - - // Second pass - for ( ClassAuditingData auditingData : classesAuditingData.getAllClassAuditedData() ) { - final EntityMappingData mappingData = mappings.get( auditingData.getPersistentClass() ); - if ( auditingData.isAudited() ) { - auditMetaGen.generateSecondPass( auditingData, mappingData ); - mappingData.build(); - - metadataBuildingContext.getMappingCollector().addDocument( mappingData.getMapping() ); - - for ( JaxbHbmHibernateMapping additionalMapping : mappingData.getAdditionalMappings() ) { - metadataBuildingContext.getMappingCollector().addDocument( additionalMapping ); - } - } - } - - // Only if there are any versioned classes - if ( !auditMetaGen.getAuditedEntityConfigurations().isEmpty() ) { - final PersistentEntity revisionInfoMapping = configuration.getRevisionInfo().getRevisionInfoMapping(); - if ( revisionInfoMapping != null ) { - final EntityMappingData mappingData = new EntityMappingData(); - mappingData.addMapping( revisionInfoMapping ); - mappingData.build(); - - metadataBuildingContext.getMappingCollector().addDocument( mappingData.getMapping() ); - } - } - - return new EntitiesConfigurations( - auditMetaGen.getAuditedEntityConfigurations(), - auditMetaGen.getNotAuditedEntityConfigurations() - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/MappingCollector.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/MappingCollector.java deleted file mode 100644 index 2d354bcf72e7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/MappingCollector.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; - -/** - * Used in building the AuditConfiguration to allow callbacks for generated audit entities. - * - * The idea here is to allow a Envers to "callback" with any - * - * @author Steve Ebersole - * @author Chris Cranford - */ -public interface MappingCollector { - void addDocument(JaxbHbmHibernateMapping mapping); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/ModelsHelper.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/ModelsHelper.java deleted file mode 100644 index 884344385c84..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/ModelsHelper.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal; - -import java.util.List; - -import org.hibernate.envers.configuration.internal.metadata.reader.PersistentPropertiesSource; -import org.hibernate.models.internal.ClassTypeDetailsImpl; -import org.hibernate.models.internal.ModifierUtils; -import org.hibernate.models.internal.dynamic.DynamicFieldDetails; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.FieldDetails; -import org.hibernate.models.spi.MemberDetails; -import org.hibernate.models.spi.MethodDetails; -import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.models.spi.TypeDetails; - -/** - * Simple helper class to streamline hibernate-models interactions. - * - * @author Marco Belladelli - */ -public class ModelsHelper { - /** - * Provides a list of the provided class' {@link MemberDetails} based on the provided access type. - * - * @param classDetails The class details to extract the members from - * @param accessType The access type to use, accepted values are {@code field}, {@code property} and {@code record} - * - * @return The list of member details - */ - public static List getMemberDetails(ClassDetails classDetails, String accessType) { - return switch ( accessType ) { - case "field" -> classDetails.getFields(); - case "property" -> classDetails.getMethods(); - case "record" -> classDetails.getRecordComponents(); - default -> throw new IllegalArgumentException( "Unknown access type " + accessType ); - }; - } - - /** - * Retrieves the {@link MemberDetails member} of the class, being either the field or the getter, - * with the provided name if one exists, {@code null} otherwise. - * - * @param classDetails The class details containing the desired member - * @param name The name of the member to find - * - * @return The requested member, null if not found - */ - public static MemberDetails getMember(ClassDetails classDetails, String name) { - final FieldDetails field = classDetails.findFieldByName( name ); - if ( field != null ) { - return field; - } - - for ( MethodDetails method : classDetails.getMethods() ) { - if ( method.resolveAttributeName().equals( name ) ) { - return method; - } - } - - return null; - } - - /** - * Instantiates a {@link DynamicFieldDetails} from the provided properties source with the specified name - * - * @param propertiesSource The property source containing the virtual field - * @param propertyName The property name of the dynamic field - * @param sourceModelBuildingContext Context object for models - * - * @return The newly created dynamic field details - */ - public static FieldDetails dynamicFieldDetails( - PersistentPropertiesSource propertiesSource, - String propertyName, - SourceModelBuildingContext sourceModelBuildingContext) { - return new DynamicFieldDetails( - propertyName, - new ClassTypeDetailsImpl( propertiesSource.getClassDetails(), TypeDetails.Kind.CLASS ), - propertiesSource.getClassDetails(), - ModifierUtils.DYNAMIC_ATTRIBUTE_MODIFIERS, - false, - false, - sourceModelBuildingContext - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/PersistentClassGraphDefiner.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/PersistentClassGraphDefiner.java deleted file mode 100644 index df5fe41f6201..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/PersistentClassGraphDefiner.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.envers.internal.tools.Tools; -import org.hibernate.envers.internal.tools.graph.GraphDefiner; -import org.hibernate.mapping.PersistentClass; - -/** - * Defines a graph, where the vertexes are all persistent classes, and there is an edge from - * p.c. A to p.c. B iff A is a superclass of B. - * - * @author Adam Warski (adam at warski dot org) - */ -public class PersistentClassGraphDefiner implements GraphDefiner { - private final MetadataImplementor metadata; - - public PersistentClassGraphDefiner(MetadataImplementor metadata) { - this.metadata = metadata; - } - - @Override - public String getRepresentation(PersistentClass pc) { - return pc.getEntityName(); - } - - @Override - public PersistentClass getValue(String entityName) { - return metadata.getEntityBinding( entityName ); - } - - private void addNeighbours(List neighbours, List subclasses) { - for ( PersistentClass subclass : subclasses ) { - neighbours.add( subclass ); - addNeighbours( neighbours, subclass.getSubclasses() ); - } - } - - @Override - public List getNeighbours(PersistentClass pc) { - final List neighbours = new ArrayList<>(); - - addNeighbours( neighbours, pc.getSubclasses() ); - - return neighbours; - } - - @Override - public List getValues() { - return Tools.collectionToList( metadata.getEntityBindings() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/RevisionInfoConfiguration.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/RevisionInfoConfiguration.java deleted file mode 100644 index 7dfedb225046..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/RevisionInfoConfiguration.java +++ /dev/null @@ -1,562 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.util.Date; -import java.util.Locale; -import java.util.Set; -import jakarta.persistence.Column; - -import org.hibernate.boot.spi.InFlightMetadataCollector; -import org.hibernate.envers.Audited; -import org.hibernate.envers.DefaultRevisionEntity; -import org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity; -import org.hibernate.envers.ModifiedEntityNames; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionListener; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.Attribute; -import org.hibernate.envers.boot.model.BasicAttribute; -import org.hibernate.envers.boot.model.ManyToOneAttribute; -import org.hibernate.envers.boot.model.RootPersistentEntity; -import org.hibernate.envers.boot.model.SetAttribute; -import org.hibernate.envers.boot.model.SimpleIdentifier; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.AuditTableData; -import org.hibernate.envers.enhanced.OrderedSequenceGenerator; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionEntity; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.RevisionTimestampData; -import org.hibernate.envers.internal.revisioninfo.DefaultRevisionInfoGenerator; -import org.hibernate.envers.internal.revisioninfo.DefaultTrackingModifiedEntitiesRevisionInfoGenerator; -import org.hibernate.envers.internal.revisioninfo.ModifiedEntityNamesReader; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoGenerator; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoNumberReader; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoQueryCreator; -import org.hibernate.envers.internal.revisioninfo.RevisionTimestampValueResolver; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.MemberDetails; -import org.hibernate.models.spi.TypeDetails; -import org.hibernate.service.ServiceRegistry; - -import static org.hibernate.envers.configuration.internal.ModelsHelper.getMemberDetails; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class RevisionInfoConfiguration { - - // todo: should these defaults also come in from configuration; there are some overlaps. - private static final String DEFAULT_REVISION_ENTITY_TABLE_NAME = "REVINFO"; - private static final String DEFAULT_REVISION_SEQUENCE_NAME = "REVISION_GENERATOR"; - private static final String DEFAULT_REVISION_SEQUENCE_TABLE_NAME = "REVISION_GENERATOR"; - private static final String DEFAULT_REVISION_FIELD_NAME = "REV"; - private static final String DEFAULT_REVISION_TIMESTAMP_FIELD_NAME = "REVTSTMP"; - private static final String DEFAULT_REVCHANGES_TABLE_NAME = "REVCHANGES"; - private static final String DEFAULT_REVCHANGES_ENTITY_COLUMN_NAME = "ENTITYNAME"; - - private final Configuration configuration; - private final RevisionInfoGenerator revisionInfoGenerator; - private final RevisionInfoNumberReader revisionInfoNumberReader; - private final RevisionInfoQueryCreator revisionInfoQueryCreator; - private final ModifiedEntityNamesReader modifiedEntityNamesReader; - private final String revisionInfoEntityName; - private final PropertyData revisionInfoTimestampData; - private final String revisionInfoTimestampTypeName; - private final String revisionPropType; - private final String revisionPropSqlType; - private final String revisionInfoIdName; - private final Class revisionInfoClass; - private final boolean useDefaultRevisionInfoMapping; - - public RevisionInfoConfiguration(Configuration config, InFlightMetadataCollector metadata) { - this.configuration = config; - - // Generate the resolver metadata - final RevisionEntityResolver resolver = new RevisionEntityResolver( metadata ); - - // initialize attributes from resolver - this.revisionInfoClass = resolver.revisionInfoClass; - this.revisionInfoEntityName = resolver.revisionInfoEntityName; - this.revisionPropType = resolver.revisionPropType; - this.revisionPropSqlType = resolver.revisionPropSqlType; - this.revisionInfoTimestampData = resolver.revisionInfoTimestampData; - this.revisionInfoTimestampTypeName = resolver.revisionInfoTimestampTypeName; - this.revisionInfoIdName = resolver.revisionInfoIdData.getName(); - this.useDefaultRevisionInfoMapping = resolver.useDefaultRevisionInfoMapping; - - revisionInfoGenerator = resolver.revisionInfoGenerator; - - revisionInfoNumberReader = new RevisionInfoNumberReader( - resolver.revisionInfoClass, - resolver.revisionInfoIdData, - metadata.getMetadataBuildingOptions().getServiceRegistry(), - revisionInfoGenerator - ); - - revisionInfoQueryCreator = new RevisionInfoQueryCreator( - resolver.revisionInfoEntityName, - resolver.revisionInfoIdData.getName(), - resolver.timestampValueResolver - ); - - if ( configuration.isTrackEntitiesChanged() ) { - modifiedEntityNamesReader = new ModifiedEntityNamesReader( - resolver.revisionInfoClass, - resolver.modifiedEntityNamesData, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - } - else { - modifiedEntityNamesReader = null; - } - } - - public String getRevisionInfoEntityName() { - return revisionInfoEntityName; - } - - public String getRevisionInfoPropertyType() { - return revisionPropType; - } - - public Class getRevisionInfoClass() { - return revisionInfoClass; - } - - public PropertyData getRevisionInfoTimestampData() { - return revisionInfoTimestampData; - } - - public RevisionInfoGenerator getRevisionInfoGenerator() { - return revisionInfoGenerator; - } - - public RevisionInfoQueryCreator getRevisionInfoQueryCreator() { - return revisionInfoQueryCreator; - } - - public RevisionInfoNumberReader getRevisionInfoNumberReader() { - return revisionInfoNumberReader; - } - - public ModifiedEntityNamesReader getModifiedEntityNamesReader() { - return modifiedEntityNamesReader; - } - - public RootPersistentEntity getRevisionInfoMapping() { - return useDefaultRevisionInfoMapping ? generateDefaultRevisionInfoMapping( revisionInfoIdName ) : null; - } - - public Attribute getRevisionInfoRelationMapping() { - final ManyToOneAttribute attribute = new ManyToOneAttribute( - configuration.getRevisionFieldName(), - revisionPropType, - true, - false, - true, - revisionInfoClass.getName() - ); - - attribute.setOnDelete( configuration.isCascadeDeleteRevision() ? "cascade" : null ); - - attribute.addColumn( - new org.hibernate.envers.boot.model.Column( - configuration.getRevisionFieldName(), - null, - null, - null, - revisionPropSqlType, - null, - null - ) - ); - - return attribute; - } - - private RootPersistentEntity generateDefaultRevisionInfoMapping(String revisionInfoIdName) { - RootPersistentEntity mapping = new RootPersistentEntity( - new AuditTableData( null, null, configuration.getDefaultSchemaName(), configuration.getDefaultCatalogName() ), - revisionInfoClass, - useDefaultRevisionInfoMapping ? null : revisionInfoEntityName, - DEFAULT_REVISION_ENTITY_TABLE_NAME - ); - - final SimpleIdentifier identifier = new SimpleIdentifier( revisionInfoIdName, revisionPropType ); - if ( configuration.isNativeIdEnabled() ) { - identifier.setGeneratorClass( "native" ); - } - else { - identifier.setGeneratorClass( OrderedSequenceGenerator.class.getName() ); - identifier.setParameter( "sequence_name", DEFAULT_REVISION_SEQUENCE_NAME ); - identifier.setParameter( "table_name", DEFAULT_REVISION_SEQUENCE_TABLE_NAME ); - identifier.setParameter( "initial_value", "1" ); - identifier.setParameter( "increment_size", "1" ); - if ( configuration.isRevisionSequenceNoCache() ) { - identifier.setParameter( "nocache", "true" ); - } - } - - identifier.addColumn( createColumn( DEFAULT_REVISION_FIELD_NAME, null ) ); - mapping.setIdentifier( identifier ); - - BasicAttribute timestampAttribute = new BasicAttribute( - revisionInfoTimestampData.getName(), - revisionInfoTimestampTypeName, - true, - false - ); - - timestampAttribute.addColumn( createColumn( DEFAULT_REVISION_TIMESTAMP_FIELD_NAME, null ) ); - mapping.addAttribute( timestampAttribute ); - - if ( configuration.isTrackEntitiesChanged() ) { - final String schema = configuration.getDefaultSchemaName(); - final String catalog = configuration.getDefaultCatalogName(); - - final SetAttribute set = new SetAttribute( "modifiedEntityNames", DEFAULT_REVCHANGES_TABLE_NAME, schema, catalog ); - set.setCascade( "persist, delete" ); - set.setFetch( "join" ); - set.setLazy( "false" ); - set.setKeyColumn( "REV" ); - set.setElementType( "string" ); - set.setColumnName( DEFAULT_REVCHANGES_ENTITY_COLUMN_NAME ); - mapping.addAttribute( set ); - } - - return mapping; - } - - private org.hibernate.envers.boot.model.Column createColumn(String name, String type) { - return new org.hibernate.envers.boot.model.Column( name, null, null, null, type, null, null ); - } - - private RevisionTimestampValueResolver createRevisionTimestampResolver( - Class revisionInfoClass, - PropertyData revisionInfoTimestampData, - String typeName, - ServiceRegistry serviceRegistry) { - return new RevisionTimestampValueResolver( - revisionInfoClass, - new RevisionTimestampData( - revisionInfoTimestampData.getName(), - revisionInfoTimestampData.getBeanName(), - revisionInfoTimestampData.getAccessType(), - typeName - ), - serviceRegistry - ); - } - - private class RevisionEntityResolver { - - private final InFlightMetadataCollector metadata; - - private boolean revisionEntityFound; - private boolean revisionNumberFound; - private boolean revisionTimestampFound; - private boolean modifiedEntityNamesFound; - private String revisionInfoEntityName; - private Class revisionInfoClass; - private Class revisionListenerClass; - private RevisionInfoGenerator revisionInfoGenerator; - private boolean useDefaultRevisionInfoMapping; - private PropertyData revisionInfoIdData; - private PropertyData revisionInfoTimestampData; - private PropertyData modifiedEntityNamesData; - private String revisionInfoTimestampTypeName; - private String revisionPropType; - private String revisionPropSqlType; - private RevisionTimestampValueResolver timestampValueResolver; - - public RevisionEntityResolver(InFlightMetadataCollector metadata) { - this.metadata = metadata; - this.revisionInfoIdData = createPropertyData( "id", "field" ); - this.revisionInfoTimestampData = createPropertyData( "timestamp", "field" ); - this.modifiedEntityNamesData = createPropertyData( "modifiedEntityNames", "field" ); - this.revisionInfoTimestampTypeName = "long"; - this.revisionPropType = "integer"; - - // automatically initiates a revision entity search over metadata sources - locateRevisionEntityMapping(); - } - - private void locateRevisionEntityMapping() { - for ( PersistentClass persistentClass : metadata.getEntityBindings() ) { - // Only process POJO models, not dynamic models - if ( persistentClass.getClassName() == null ) { - continue; - } - - final ClassDetails classDetails = metadata.getClassDetailsRegistry().resolveClassDetails( - persistentClass.getClassName() - ); - final RevisionEntity revisionEntity = classDetails.getDirectAnnotationUsage( RevisionEntity.class ); - if ( revisionEntity == null ) { - // not annotated, skip - continue; - } - - if ( revisionEntityFound ) { - throw new EnversMappingException( "Only one entity can be annotated with @RevisionEntity" ); - } - - // Verify that the revision entity isn't audited - if ( classDetails.hasDirectAnnotationUsage( Audited.class ) ) { - throw new EnversMappingException( "The @RevisionEntity entity cannot be audited" ); - } - - revisionEntityFound = true; - - resolveConfiguration( classDetails ); - - if ( !revisionNumberFound || !revisionTimestampFound ) { - // A revision number and timestamp fields must be annotated or the revision entity mapping - // is to be considered in error and a mapping exception should be thrown. - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "An entity annotated with @RevisionEntity must have a field annotated with %s", - !revisionNumberFound ? "@RevisionNumber" : "@RevisionTimestamp" - ) - ); - } - - revisionInfoEntityName = persistentClass.getEntityName(); - revisionInfoClass = persistentClass.getMappedClass(); - revisionListenerClass = getRevisionListenerClass( revisionEntity.value() ); - - final Property timestampProperty = persistentClass.getProperty( revisionInfoTimestampData.getName() ); - revisionInfoTimestampTypeName = timestampProperty.getType().getName(); - - timestampValueResolver = createRevisionTimestampResolver( - revisionInfoClass, - revisionInfoTimestampData, - revisionInfoTimestampTypeName, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - - if ( useEntityTrackingRevisionEntity( revisionInfoClass ) ) { - // If tracking modified entities is enabled, custom revision info entity is a subtype - // of DefaultTrackingModifiedEntitiesRevisionEntity class or @ModifiedEntityNames was used - revisionInfoGenerator = new DefaultTrackingModifiedEntitiesRevisionInfoGenerator( - revisionInfoEntityName, - revisionInfoClass, - revisionListenerClass, - timestampValueResolver, - modifiedEntityNamesData, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - configuration.setTrackEntitiesChanged( true ); - } - else { - revisionInfoGenerator = new DefaultRevisionInfoGenerator( - revisionInfoEntityName, - revisionInfoClass, - revisionListenerClass, - timestampValueResolver, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - } - } - - if ( revisionInfoGenerator == null ) { - - revisionListenerClass = getRevisionListenerClass( RevisionListener.class ); - - if ( configuration.isTrackEntitiesChanged() ) { - revisionInfoClass = configuration.isNativeIdEnabled() - ? DefaultTrackingModifiedEntitiesRevisionEntity.class - : SequenceIdTrackingModifiedEntitiesRevisionEntity.class; - } - else { - revisionInfoClass = configuration.isNativeIdEnabled() - ? DefaultRevisionEntity.class - : SequenceIdRevisionEntity.class; - } - - // Use the simple name of default revision entities as entity name - revisionInfoEntityName = revisionInfoClass.getSimpleName(); - - timestampValueResolver = createRevisionTimestampResolver( - revisionInfoClass, - revisionInfoTimestampData, - revisionInfoTimestampTypeName, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - - if ( configuration.isTrackEntitiesChanged() ) { - revisionInfoGenerator = new DefaultTrackingModifiedEntitiesRevisionInfoGenerator( - revisionInfoEntityName, - revisionInfoClass, - revisionListenerClass, - timestampValueResolver, - modifiedEntityNamesData, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - } - else { - revisionInfoGenerator = new DefaultRevisionInfoGenerator( - revisionInfoEntityName, - revisionInfoClass, - revisionListenerClass, - timestampValueResolver, - metadata.getMetadataBuildingOptions().getServiceRegistry() - ); - } - - useDefaultRevisionInfoMapping = true; - } - } - - private boolean useEntityTrackingRevisionEntity(Class clazz) { - return configuration.isTrackEntitiesChanged() - || ( configuration.isNativeIdEnabled() && DefaultTrackingModifiedEntitiesRevisionEntity.class.isAssignableFrom( clazz ) ) - || ( !configuration.isNativeIdEnabled() && SequenceIdTrackingModifiedEntitiesRevisionEntity.class.isAssignableFrom( clazz ) ) - || modifiedEntityNamesFound; - } - - private void resolveConfiguration(ClassDetails classDetails) { - final ClassDetails superclass = classDetails.getSuperClass(); - if ( !Object.class.getName().equals( superclass.getName() ) ) { - // traverse to the top of the entity hierarchy - resolveConfiguration( superclass ); - } - resolveConfigurationFromProperties( classDetails, "field" ); - resolveConfigurationFromProperties( classDetails, "property" ); - } - - private void resolveConfigurationFromProperties(ClassDetails classDetails, String accessType) { - for ( MemberDetails member : getMemberDetails( classDetails, accessType ) ) { - final RevisionNumber revisionNumber = member.getDirectAnnotationUsage( RevisionNumber.class ); - if ( revisionNumber != null ) { - resolveRevisionNumberFromProperty( member, accessType ); - } - - final RevisionTimestamp revisionTimestamp = member.getDirectAnnotationUsage( RevisionTimestamp.class ); - if ( revisionTimestamp != null ) { - resolveRevisionTimestampFromProperty( member, accessType ); - } - - final ModifiedEntityNames modifiedEntityNames = member.getDirectAnnotationUsage( ModifiedEntityNames.class ); - if ( modifiedEntityNames != null ) { - resolveModifiedEntityNamesFromProperty( member, accessType ); - } - } - } - - private void resolveRevisionNumberFromProperty(MemberDetails memberDetails, String accessType) { - if ( revisionNumberFound ) { - throw new EnversMappingException( "Only one property can be defined with @RevisionNumber" ); - } - - final TypeDetails type = memberDetails.getType(); - if ( isAnyType( type, Integer.class, Integer.TYPE ) ) { - revisionInfoIdData = createPropertyData( memberDetails, accessType ); - revisionNumberFound = true; - } - else if ( isAnyType( type, Long.class, Long.TYPE ) ) { - revisionInfoIdData = createPropertyData( memberDetails, accessType ); - revisionPropType = "long"; - revisionNumberFound = true; - } - else { - throwUnexpectedAnnotatedType( memberDetails, RevisionNumber.class, "int, Integer, long, or Long" ); - } - - // Getting the @Column definition of the revision number property, to later use that information - // to generate the same mapping for the relation from an audit table's revision number to the - // revision entity's revision number field. - final Column column = memberDetails.getDirectAnnotationUsage( Column.class ); - if ( column != null ) { - revisionPropSqlType = column.columnDefinition(); - } - } - - private void resolveRevisionTimestampFromProperty(MemberDetails memberDetails, String accessType) { - if ( revisionTimestampFound ) { - throw new EnversMappingException( "Only one property can be defined with @RevisionTimestamp" ); - } - - final TypeDetails type = memberDetails.getType(); - if ( isAnyType( type, Long.class, Long.TYPE, Date.class, LocalDateTime.class, Instant.class, java.sql.Date.class ) ) { - revisionInfoTimestampData = createPropertyData( memberDetails, accessType ); - revisionTimestampFound = true; - } - else { - throwUnexpectedAnnotatedType( memberDetails, RevisionTimestamp.class, "long, Long, Date, LocalDateTime, Instant, or java.sql.Date" ); - } - } - - private void resolveModifiedEntityNamesFromProperty(MemberDetails memberDetails, String accessType) { - if ( modifiedEntityNamesFound ) { - throw new EnversMappingException( "Only one property can be defined with @ModifiedEntityNames" ); - } - - final TypeDetails type = memberDetails.getType(); - if ( isAnyType( type, Set.class ) ) { - final TypeDetails elementType = memberDetails.getElementType(); - if ( isAnyType( elementType, String.class ) ) { - modifiedEntityNamesData = createPropertyData( memberDetails, accessType ); - modifiedEntityNamesFound = true; - return; - } - } - - throwUnexpectedAnnotatedType( memberDetails, ModifiedEntityNames.class, "Set" ); - } - - private PropertyData createPropertyData(MemberDetails memberDetails, String accessType) { - return createPropertyData( memberDetails.resolveAttributeName(), accessType ); - } - - private PropertyData createPropertyData(String name, String accessType) { - return new PropertyData( name, name, accessType ); - } - - private boolean isAnyType(TypeDetails typeDetails, Class... types) { - for ( Class type : types ) { - if ( isType( typeDetails, type ) ) { - return true; - } - } - return false; - } - - private boolean isType(TypeDetails typeDetails, Class type) { - final String className = typeDetails != null ? typeDetails.determineRawClass().getClassName() : null; - return className != null && className.equals( type.getName() ); - } - - private Class getRevisionListenerClass(Class defaultListener) { - if ( configuration.getRevisionListenerClass() != null ) { - return configuration.getRevisionListenerClass(); - } - return defaultListener; - } - - private void throwUnexpectedAnnotatedType(MemberDetails memberDetails, Class annotation, String allowedTypes) { - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "The field '%s' annotated with '@%s' must be of type: %s", - memberDetails.resolveAttributeName(), - annotation.getName(), - allowedTypes - ) - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AbstractCollectionMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AbstractCollectionMetadataGenerator.java deleted file mode 100644 index 0eb56bd5d1ae..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AbstractCollectionMetadataGenerator.java +++ /dev/null @@ -1,556 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.sql.Types; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.TreeSet; - -import jakarta.persistence.EnumType; - -import org.hibernate.envers.boot.model.Attribute; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.model.BasicAttribute; -import org.hibernate.envers.boot.model.Column; -import org.hibernate.envers.boot.model.CompositeIdentifier; -import org.hibernate.envers.boot.model.Identifier; -import org.hibernate.envers.boot.model.RootPersistentEntity; -import org.hibernate.envers.boot.registry.classloading.ClassLoaderAccessHelper; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.AuditJoinTableData; -import org.hibernate.envers.configuration.internal.metadata.reader.ComponentAuditedPropertiesReader; -import org.hibernate.envers.configuration.internal.metadata.reader.ComponentAuditingData; -import org.hibernate.envers.configuration.internal.metadata.reader.PersistentPropertiesSource; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.mapper.MultiPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.relation.BasicCollectionMapper; -import org.hibernate.envers.internal.entities.mapper.relation.CommonCollectionMapperData; -import org.hibernate.envers.internal.entities.mapper.relation.ListCollectionMapper; -import org.hibernate.envers.internal.entities.mapper.relation.MapCollectionMapper; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleMapKeyEnumeratedComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.SortedMapCollectionMapper; -import org.hibernate.envers.internal.entities.mapper.relation.SortedSetCollectionMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleDummyComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleEmbeddableComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleMapElementNotKeyComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleMapKeyIdComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleMapKeyPropertyComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleRelatedComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleSimpleComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy.ListProxy; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy.MapProxy; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy.SetProxy; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy.SortedMapProxy; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy.SortedSetProxy; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.IndexedCollection; -import org.hibernate.mapping.Value; -import org.hibernate.type.BagType; -import org.hibernate.type.BasicType; -import org.hibernate.type.ComponentType; -import org.hibernate.type.ListType; -import org.hibernate.type.ManyToOneType; -import org.hibernate.type.MapType; -import org.hibernate.type.SetType; -import org.hibernate.type.SortedMapType; -import org.hibernate.type.SortedSetType; -import org.hibernate.type.Type; - -/** - * Abstract base class for various collection-based metadata generators. - * - * @author Chris Cranford - */ -public abstract class AbstractCollectionMetadataGenerator extends AbstractMetadataGenerator { - - private final BasicMetadataGenerator basicMetadataGenerator; - private final ValueMetadataGenerator valueMetadataGenerator; - - public AbstractCollectionMetadataGenerator( - EnversMetadataBuildingContext metadataBuildingContext, - BasicMetadataGenerator basicMetadataGenerator, - ValueMetadataGenerator valueMetadataGenerator) { - super( metadataBuildingContext ); - this.basicMetadataGenerator = basicMetadataGenerator; - this.valueMetadataGenerator = valueMetadataGenerator; - } - - /** - * Entry point for all collection-based metadata generators where the collection will - * be inspected and the appropriate boot and runtime mappings are generated. - * - * @param context the per-collection metadata context - */ - public abstract void addCollection(CollectionMetadataContext context); - - protected MiddleIdData createMiddleIdData(IdMappingData idMappingData, String prefix, String entityName) { - return new MiddleIdData( - getMetadataBuildingContext().getConfiguration(), - idMappingData, - prefix, - entityName, - hasAuditedEntityConfiguration( entityName ) - ); - } - - protected List getPrefixedIdAttributes(String prefix, ColumnNameIterator iterator, IdMappingData idMapping) { - return idMapping.getRelation().getAttributesPrefixed( prefix, iterator, true, true ); - } - - protected void addAttributesToEntity(RootPersistentEntity entity, List attributes) { - Identifier identifier = entity.getIdentifier(); - if ( identifier == null ) { - identifier = new CompositeIdentifier( getMetadataBuildingContext() ); - entity.setIdentifier( identifier ); - } - attributes.forEach( identifier::addAttribute ); - } - - protected CommonCollectionMapperData createCommonCollectionMapperData( - CollectionMetadataContext context, - String entityName, - MiddleIdData idData, - RelationQueryGenerator queryGenerator) { - return new CommonCollectionMapperData( - entityName, - context.getPropertyAuditingData().resolvePropertyData(), - idData, - queryGenerator, - context.getCollection().getRole() - ); - } - - protected String getOrderBy(Collection collection) { - final String orderBy = collection.getOrderBy(); - return orderBy == null ? collection.getManyToManyOrdering() : orderBy; - } - - protected String getOrderByCollectionRole(Collection collection, String orderBy) { - return orderBy == null ? null : collection.getRole(); - } - - private boolean hasNoMapKeyOrNonEntityEnumeration(String entityName, PropertyAuditingData propertyAuditingData) { - final String mapKey = propertyAuditingData.getMapKey(); - final EnumType mapKeyEnumType = propertyAuditingData.getMapKeyEnumType(); - return ( mapKey == null && mapKeyEnumType == null ) || ( mapKeyEnumType != null && entityName == null ); - } - - private boolean hasMapKey(PropertyAuditingData propertyAuditingData) { - final String mapKey = propertyAuditingData.getMapKey(); - return mapKey != null && mapKey.isEmpty(); - } - - private boolean hasMapKeyEnum(PropertyAuditingData propertyAuditingData) { - return propertyAuditingData.getMapKeyEnumType() != null; - } - - private int getCurrentIndex(QueryGeneratorBuilder queryGeneratorBuilder) { - return queryGeneratorBuilder == null ? 0 : queryGeneratorBuilder.getCurrentIndex(); - } - - protected MiddleComponentData addIndex( - CollectionMetadataContext context, - RootPersistentEntity middleEntity, - QueryGeneratorBuilder queryGeneratorBuilder) { - if ( context.getCollection().isIndexed() ) { - final String referencedEntityName = context.getReferencedEntityName(); - final PropertyAuditingData propertyAuditingData = context.getPropertyAuditingData(); - if ( hasNoMapKeyOrNonEntityEnumeration( referencedEntityName, propertyAuditingData ) ) { - // This entity doesn't specify a jakarta.persistence.MapKey or there is a MapKeyEnumerated but its a non-entity type. - // Mapping it to the middle entity. - return addValueToMiddleTable( - context, - ( (IndexedCollection ) context.getCollection() ).getIndex(), - middleEntity, - queryGeneratorBuilder, - "mapkey", - null, - true - ); - } - else if ( hasMapKeyEnum( propertyAuditingData ) ) { - return new MiddleComponentData( - new MiddleMapKeyEnumeratedComponentMapper( propertyAuditingData.getName() ), - getCurrentIndex( queryGeneratorBuilder ) - ); - } - else { - final IdMappingData referencedIdMapping = getAuditedEntityConfiguration( referencedEntityName ).getIdMappingData(); - - final MiddleComponentMapper middleComponentMapper; - if ( hasMapKey( propertyAuditingData ) ) { - // The key of the map is the id of the entity. - middleComponentMapper = new MiddleMapKeyIdComponentMapper( - getMetadataBuildingContext().getConfiguration(), - referencedIdMapping.getIdMapper() - ); - } - else { - // The key of the map is a property of the entity. - middleComponentMapper = new MiddleMapKeyPropertyComponentMapper( - propertyAuditingData.getMapKey(), - propertyAuditingData.getAccessType() - ); - } - - return new MiddleComponentData( middleComponentMapper, getCurrentIndex( queryGeneratorBuilder ) ); - } - } - else { - // No index - creating a dummy mapper. - return new MiddleComponentData( new MiddleDummyComponentMapper() ); - } - } - - protected MiddleComponentData addValueToMiddleTable( - CollectionMetadataContext context, - Value value, - RootPersistentEntity entity, - QueryGeneratorBuilder queryGeneratorBuilder, - String prefix, - AuditJoinTableData joinTableData, - boolean key) { - final Type type = value.getType(); - if ( type instanceof ManyToOneType ) { - return addManyToOneValueToMiddleTable( - context, - entity, - value, - joinTableData, - prefix, - queryGeneratorBuilder - ); - } - else if ( type instanceof ComponentType ) { - return addComponentValueToMiddleTable( context, entity, (Component) value, prefix ); - } - else { - final MiddleComponentData middleComponentData = addBasicValueToMiddleTable(entity, value, prefix, key ); - if ( middleComponentData == null ) { - throwUnsupportedTypeException( type, context.getReferencingEntityName(), context.getPropertyName() ); - } - - return middleComponentData; - } - } - - private MiddleComponentData addManyToOneValueToMiddleTable( - CollectionMetadataContext context, - RootPersistentEntity entity, - Value value, - AuditJoinTableData joinTableData, - String prefix, - QueryGeneratorBuilder queryGeneratorBuilder) { - final String prefixRelated = prefix + "_"; - - final String referencedEntityName = MappingTools.getReferencedEntityName( value ); - - final IdMappingData referencedIdMapping = getReferencedIdMappingData( - context.getReferencingEntityName(), - referencedEntityName, - context.getPropertyAuditingData(), - true - ); - - // Adding related-entity (in this case: the referenced entities id) id mapping to the xml only if the - // relation isn't inverse (so when xmlMapping is not null). - if ( entity != null ) { - final ColumnNameIterator columnNameIterator; - if ( joinTableData != null && !joinTableData.getInverseJoinColumnNames().isEmpty() ) { - columnNameIterator = joinTableData.getInverseJoinColumnNamesIterator(); - } - else { - columnNameIterator = ColumnNameIterator.from( value.getSelectables().iterator() ); - } - - addAttributesToEntity( - entity, - getPrefixedIdAttributes( - prefixRelated, - columnNameIterator, - referencedIdMapping - ) - ); - } - - // Storing the id data of the referenced entity: original mapper, prefixed mapper and entity name. - final MiddleIdData referencedIdData = createMiddleIdData( - referencedIdMapping, - prefixRelated, - referencedEntityName - ); - // And adding it to the generator builder. - queryGeneratorBuilder.addRelation( referencedIdData ); - - return new MiddleComponentData( - new MiddleRelatedComponentMapper( referencedIdData ), - queryGeneratorBuilder.getCurrentIndex() - ); - } - - private MiddleComponentData addComponentValueToMiddleTable( - CollectionMetadataContext context, - RootPersistentEntity entity, - Component component, - String prefix) { - // Collection of embeddable elements. - final MiddleEmbeddableComponentMapper componentMapper = new MiddleEmbeddableComponentMapper( - new MultiPropertyMapper(), - ClassLoaderAccessHelper.loadClass( - getMetadataBuildingContext(), - component.getComponentClassName() - ) - ); - - final ComponentAuditingData auditData = new ComponentAuditingData(); - - new ComponentAuditedPropertiesReader( - getMetadataBuildingContext(), - PersistentPropertiesSource.forComponent( getMetadataBuildingContext(), component ), - auditData - ).read(); - - // Emulating first pass. - for ( String auditedPropertyName : auditData.getPropertyNames() ) { - final PropertyAuditingData nestedAuditingData = auditData.getPropertyAuditingData( auditedPropertyName ); - valueMetadataGenerator.addValue( - entity, - component.getProperty( auditedPropertyName ).getValue(), - component.getProperty( auditedPropertyName ).getPropertyAccessStrategy(), - componentMapper, - prefix, - context.getEntityMappingData(), - nestedAuditingData, - true, - true, - true - ); - } - - // Emulating second pass so that the relations can be mapped too. - for ( String auditedPropertyName : auditData.getPropertyNames() ) { - final PropertyAuditingData nestedAuditingData = auditData.getPropertyAuditingData( auditedPropertyName ); - valueMetadataGenerator.addValue( - entity, - component.getProperty( auditedPropertyName ).getValue(), - component.getProperty( auditedPropertyName ).getPropertyAccessStrategy(), - componentMapper, - context.getReferencingEntityName(), - context.getEntityMappingData(), - nestedAuditingData, - true, - false, - true - ); - } - - // Add a column holding a number to make each entry unique within the set. - // Embeddable properties may contain null values, so cannot be stored within composite primary key. - if ( context.getCollection().isSet() ) { - final String setOrdinalPropertyName = getMetadataBuildingContext().getConfiguration() - .getEmbeddableSetOrdinalPropertyName(); - - final BasicAttribute ordinalProperty = new BasicAttribute( - setOrdinalPropertyName, - "integer", - true, - true - ); - - ordinalProperty.addColumn( new Column( setOrdinalPropertyName ) ); - entity.getIdentifier().addAttribute( ordinalProperty ); - } - - return new MiddleComponentData( componentMapper ); - } - - /** - * Adds basic value to the middle table. - * - * @param entity the middle table entity - * @param value the value to be added - * @param prefix the property name - * @param key whether the property is a key attribute or not - * @return the component data or {@code null} if the value could not be added. - */ - private MiddleComponentData addBasicValueToMiddleTable(RootPersistentEntity entity, Value value, String prefix, boolean key) { - // Last but one parameter: collection components are always insertable - AttributeContainer attributeContainer = entity; - if ( entity != null && key ) { - attributeContainer = entity.getIdentifier(); - } - - final boolean mapped = basicMetadataGenerator.addBasic( - attributeContainer, - new PropertyAuditingData( prefix, "field", false ), - value, - null, - true, - key - ); - - if ( mapped ) { - final MiddleComponentMapper mapper; - if ( key ) { - // Simple values are always stored in the first item of the array returned by the query generator. - final Configuration configuration = getMetadataBuildingContext().getConfiguration(); - mapper = new MiddleSimpleComponentMapper( configuration, prefix ); - } - else { - // when mapped but not part of the key, its stored as a dummy mapper?? - mapper = new MiddleMapElementNotKeyComponentMapper( prefix ); - } - return new MiddleComponentData( mapper ); - } - - // could not be mapped - // caller should check for this and assert if applicable. - return null; - } - - protected void addMapper( - CollectionMetadataContext context, - CommonCollectionMapperData commonCollectionMapperData, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData) { - context.getMapperBuilder().addComposite( - context.getPropertyAuditingData().resolvePropertyData(), - resolvePropertyMapper( - context, - commonCollectionMapperData, - elementComponentData, - indexComponentData - ) - ); - } - - private PropertyMapper resolvePropertyMapper( - CollectionMetadataContext context, - CommonCollectionMapperData commonCollectionMapperData, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData) { - - final String referencingEntityName = context.getReferencingEntityName(); - final boolean embeddableElementType = isEmbeddableElementType( context ); - final boolean lobMapElementType = isLobMapElementType( context ); - final Type collectionType = context.getCollection().getType(); - - if ( collectionType instanceof SortedSetType ) { - return new SortedSetCollectionMapper( - getMetadataBuildingContext().getConfiguration(), - commonCollectionMapperData, - TreeSet.class, - SortedSetProxy.class, - elementComponentData, - context.getCollection().getComparator(), - embeddableElementType, - embeddableElementType - ); - } - else if ( collectionType instanceof SetType ) { - return new BasicCollectionMapper( - getMetadataBuildingContext().getConfiguration(), - commonCollectionMapperData, - HashSet.class, - SetProxy.class, - elementComponentData, - embeddableElementType, - embeddableElementType - ); - } - else if ( collectionType instanceof SortedMapType ) { - // Indexed collection, so indexComponentData is not null. - return new SortedMapCollectionMapper( - getMetadataBuildingContext().getConfiguration(), - commonCollectionMapperData, - TreeMap.class, - SortedMapProxy.class, - elementComponentData, - indexComponentData, - context.getCollection().getComparator(), - embeddableElementType || lobMapElementType - ); - } - else if ( collectionType instanceof MapType ) { - // Indexed collection, so indexComponentData is not null. - return new MapCollectionMapper( - getMetadataBuildingContext().getConfiguration(), - commonCollectionMapperData, - HashMap.class, - MapProxy.class, - elementComponentData, - indexComponentData, - embeddableElementType || lobMapElementType - ); - } - else if ( collectionType instanceof BagType ) { - return new BasicCollectionMapper( - getMetadataBuildingContext().getConfiguration(), - commonCollectionMapperData, - ArrayList.class, - ListProxy.class, - elementComponentData, - embeddableElementType, - embeddableElementType - ); - } - else if ( collectionType instanceof ListType ) { - // Indexed collection, so indexComponentData is not null. - return new ListCollectionMapper( - getMetadataBuildingContext().getConfiguration(), - commonCollectionMapperData, - elementComponentData, - indexComponentData, - embeddableElementType - ); - } - - throwUnsupportedTypeException( collectionType, referencingEntityName, context.getPropertyName() ); - - // this is never reached, but java requires it - throw new AssertionError(); - } - - /** - * Returns whether the collection is a map-type and that the map element is defined as a Clob/NClob type. - * - * @return {@code true} if the element is a Clob/NClob type, otherwise {@code false}. - */ - protected boolean isLobMapElementType(CollectionMetadataContext context) { - final Collection collection = context.getCollection(); - if ( collection instanceof org.hibernate.mapping.Map ) { - final Type type = collection.getElement().getType(); - // we're only interested in basic types - if ( !type.isComponentType() && !type.isAssociationType() && type instanceof BasicType ) { - final BasicType basicType = (BasicType) type; - return basicType.getJavaType() == String.class && ( - basicType.getJdbcType().getDdlTypeCode() == Types.CLOB - || basicType.getJdbcType().getDdlTypeCode() == Types.NCLOB - ); - } - } - return false; - } - - protected boolean isEmbeddableElementType(CollectionMetadataContext context) { - final Type elementType = context.getCollection().getElement().getType(); - return elementType instanceof ComponentType; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AbstractMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AbstractMetadataGenerator.java deleted file mode 100644 index 3131dd2afb5d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AbstractMetadataGenerator.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Locale; -import java.util.Map; - -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.model.BasicAttribute; -import org.hibernate.envers.boot.model.Identifier; -import org.hibernate.envers.boot.model.JoinedSubclassPersistentEntity; -import org.hibernate.envers.boot.model.PersistentEntity; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.RevisionTypeType; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.envers.strategy.spi.MappingContext; -import org.hibernate.mapping.Table; -import org.hibernate.type.Type; - -/** - * Abstract base class for all metadata generator implementations. - * - * @author Chris Cranford - */ -public abstract class AbstractMetadataGenerator { - - private final EnversMetadataBuildingContext metadataBuildingContext; - private final AuditEntityConfigurationRegistry entityConfigurationRegistry; - - public AbstractMetadataGenerator(EnversMetadataBuildingContext metadataBuildingContext) { - this.metadataBuildingContext = metadataBuildingContext; - this.entityConfigurationRegistry = metadataBuildingContext.getAuditEntityConfigurationRegistry(); - } - - protected EnversMetadataBuildingContext getMetadataBuildingContext() { - return metadataBuildingContext; - } - - public Map getAuditedEntityConfigurations() { - return entityConfigurationRegistry.getAuditedEntityConfigurations(); - } - - public Map getNotAuditedEntityConfigurations() { - return entityConfigurationRegistry.getNotAuditedEntityConfigurations(); - } - - protected boolean hasAuditedEntityConfiguration(String entityName) { - return entityConfigurationRegistry.hasAuditedEntityConfiguration( entityName ); - } - - protected boolean hasNotAuditedEntityConfiguration(String entityName) { - return entityConfigurationRegistry.hasNotAuditedEntityConfiguration( entityName ); - } - - protected EntityConfiguration getAuditedEntityConfiguration(String entityName) { - return entityConfigurationRegistry.getAuditedEntityConfiguration( entityName ); - } - - protected EntityConfiguration getNotAuditedEntityConfiguration(String entityName) { - return entityConfigurationRegistry.getNotAuditedEntityConfiguration( entityName ); - } - - protected void addAuditedEntityConfiguration(String entityName, EntityConfiguration entityConfiguration) { - entityConfigurationRegistry.addAuditedEntityConfiguration( entityName, entityConfiguration ); - } - - protected void addNotAuditedEntityConfiguration(String entityName, EntityConfiguration entityConfiguration) { - entityConfigurationRegistry.addNotAuditedEntityConfiguration( entityName, entityConfiguration ); - } - - protected String getSchemaName(String schemaFromAnnotation, Table table) { - String schemaName = schemaFromAnnotation; - if ( StringTools.isEmpty( schemaName ) ) { - schemaName = metadataBuildingContext.getConfiguration().getDefaultSchemaName(); - if ( StringTools.isEmpty( schemaName ) ) { - schemaName = table.getSchema(); - } - } - return schemaName; - } - - protected String getCatalogName(String catalogFromAnnotation, Table table) { - String catalogName = catalogFromAnnotation; - if ( StringTools.isEmpty( catalogName ) ) { - catalogName = metadataBuildingContext.getConfiguration().getDefaultCatalogName(); - if ( StringTools.isEmpty( catalogName ) ) { - catalogName = table.getCatalog(); - } - } - return catalogName; - } - - protected void addRevisionInfoRelationToIdentifier(Identifier identifier) { - final Configuration configuration = metadataBuildingContext.getConfiguration(); - identifier.addAttribute( configuration.getRevisionInfo().getRevisionInfoRelationMapping() ); - } - - protected void addAuditStrategyAdditionalColumnsToEntity(PersistentEntity entity) { - metadataBuildingContext.getConfiguration().getAuditStrategy().addAdditionalColumns( - new MappingContext( - entity, - metadataBuildingContext.getConfiguration(), - metadataBuildingContext.getConfiguration().getRevisionTypePropertyType(), - metadataBuildingContext.getConfiguration().getRevisionInfo().getRevisionInfoClass().getName(), - false - ) - ); - } - - protected void addAuditStrategyRevisionEndTimestampOnly(PersistentEntity entity) { - if ( ( entity instanceof JoinedSubclassPersistentEntity ) ) { - // Only joined subclass entities are allowed to add revision timestamp to associated tables - metadataBuildingContext.getConfiguration().getAuditStrategy().addAdditionalColumns( - new MappingContext( - entity, - metadataBuildingContext.getConfiguration(), - metadataBuildingContext.getConfiguration().getRevisionTypePropertyType(), - metadataBuildingContext.getConfiguration().getRevisionInfo().getRevisionInfoClass().getName(), - true - ) - ); - } - } - - protected void addRevisionTypeToAttributeContainer(AttributeContainer container, boolean key) { - container.addAttribute( - new BasicAttribute( - metadataBuildingContext.getConfiguration().getRevisionTypePropertyName(), - metadataBuildingContext.getConfiguration().getRevisionTypePropertyType(), - true, - key, - RevisionTypeType.class.getName() - ) - ); - } - - /** - * Reads the id mapping data of a referenced entity. - * - * @param entityName Name of the entity which is the source of the relation. - * @param referencedEntityName Name of the entity which is the target of the relation. - * @param propertyAuditingData Auditing data of the property that is the source of the relation. - * @param allowNotAuditedTarget Are not-audited target entities allowed. - * - * @return The id mapping data of the related entity. - * - * @throws EnversMappingException If a relation from an audited to a non-audited entity is detected, which is not - * mapped using {@link RelationTargetAuditMode#NOT_AUDITED}. - */ - protected IdMappingData getReferencedIdMappingData( - String entityName, - String referencedEntityName, - PropertyAuditingData propertyAuditingData, - boolean allowNotAuditedTarget) { - EntityConfiguration configuration = getAuditedEntityConfiguration( referencedEntityName ); - if ( configuration == null ) { - configuration = getNotAuditedEntityConfiguration( referencedEntityName ); - if ( configuration == null || !allowNotAuditedTarget || !isRelationNotAudited( propertyAuditingData ) ) { - throw new EnversMappingException( - String.format( - "An audited relation from %s.%s to a not audited entity %s! %s", - entityName, - propertyAuditingData.getName(), - referencedEntityName, - allowNotAuditedTarget - ? "Such a mapping is possible but requires using @Audited(targetAuditMode = NOT_AUDITED)." - : "" - ) - ); - } - } - - return configuration.getIdMappingData(); - } - - protected void throwUnsupportedTypeException(Type type, String entityName, String propertyName) { - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "Type not supported for auditing: %s, on entity %s, property '%s'.", - type.getClass().getName(), - entityName, - propertyName - ) - ); - } - - private boolean isRelationNotAudited(PropertyAuditingData propertyAuditingData) { - return RelationTargetAuditMode.NOT_AUDITED.equals( propertyAuditingData.getRelationTargetAuditMode() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditEntityConfigurationRegistry.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditEntityConfigurationRegistry.java deleted file mode 100644 index b92b1c1036b6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditEntityConfigurationRegistry.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.envers.internal.entities.EntityConfiguration; - -/** - * A registry of audited and not-audited entity runtime configurations. - * - * @author Chris Cranford - */ -public class AuditEntityConfigurationRegistry { - - private final Map auditedEntityConfigurations = new HashMap<>(); - private final Map notAuditedEntityConfigurations = new HashMap<>(); - - public Map getAuditedEntityConfigurations() { - return Collections.unmodifiableMap( auditedEntityConfigurations ); - } - - public Map getNotAuditedEntityConfigurations() { - return Collections.unmodifiableMap( notAuditedEntityConfigurations ); - } - - public boolean hasAuditedEntityConfiguration(String entityName) { - return auditedEntityConfigurations.containsKey( entityName ); - } - - public boolean hasNotAuditedEntityConfiguration(String entityName) { - return notAuditedEntityConfigurations.containsKey( entityName ); - } - - public EntityConfiguration getAuditedEntityConfiguration(String entityName) { - return auditedEntityConfigurations.get( entityName ); - } - - public EntityConfiguration getNotAuditedEntityConfiguration(String entityName) { - return notAuditedEntityConfigurations.get( entityName ); - } - - public void addAuditedEntityConfiguration(String entityName, EntityConfiguration entityConfiguration) { - auditedEntityConfigurations.put( entityName, entityConfiguration ); - } - - public void addNotAuditedEntityConfiguration(String entityName, EntityConfiguration entityConfiguration) { - notAuditedEntityConfigurations.put( entityName, entityConfiguration ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditEntityNameRegister.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditEntityNameRegister.java deleted file mode 100644 index b0fc9058f40c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditEntityNameRegister.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.HashSet; -import java.util.Set; - -import org.hibernate.envers.boot.EnversMappingException; - -/** - * A register of all audit entity names used so far. - * - * @author Adam Warski (adam at warski dot org) - */ -public class AuditEntityNameRegister { - private final Set auditEntityNames = new HashSet<>(); - - /** - * @param auditEntityName Name of the audit entity. - * - * @return True if the given audit entity name is already used. - */ - private boolean check(String auditEntityName) { - return auditEntityNames.contains( auditEntityName ); - } - - /** - * Register an audit entity name. If the name is already registered, an exception is thrown. - * - * @param auditEntityName Name of the audit entity. - */ - public void register(String auditEntityName) { - if ( auditEntityNames.contains( auditEntityName ) ) { - throw new EnversMappingException( "The audit entity name '" + auditEntityName + "' is already registered." ); - } - - auditEntityNames.add( auditEntityName ); - } - - /** - * Creates a unique (not yet registered) audit entity name by appending consecutive numbers to the base - * name. If the base name is not yet used, it is returned unmodified. - * - * @param baseAuditEntityName The base entity name. - * - * @return A unique audit entity name - */ - public String createUnique(final String baseAuditEntityName) { - String auditEntityName = baseAuditEntityName; - int count = 1; - while ( check( auditEntityName ) ) { - auditEntityName = baseAuditEntityName + count++; - } - - return auditEntityName; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditMetadataGenerator.java deleted file mode 100644 index 4fed3eef5dba..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditMetadataGenerator.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.lang.invoke.MethodHandles; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Locale; -import java.util.Map; - -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.model.Column; -import org.hibernate.envers.boot.model.Join; -import org.hibernate.envers.boot.model.JoinAwarePersistentEntity; -import org.hibernate.envers.boot.model.PersistentEntity; -import org.hibernate.envers.boot.model.RootPersistentEntity; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.ClassAuditingData; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.EnversMessageLogger; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.mapper.CompositeMapperBuilder; -import org.hibernate.envers.internal.entities.mapper.ExtendedPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.MultiPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.SubclassPropertyMapper; -import org.hibernate.mapping.GeneratorCreator; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.SyntheticProperty; -import org.hibernate.generator.internal.GeneratedGeneration; - -import org.jboss.logging.Logger; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Sebastian Komander - * @author Tomasz Bech - * @author Stephanie Pau at Markit Group Plc - * @author Hernán Chanfreau - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public final class AuditMetadataGenerator extends AbstractMetadataGenerator { - - private static final EnversMessageLogger LOG = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversMessageLogger.class, - AuditMetadataGenerator.class.getName() - ); - - private final EnversMetadataBuildingContext metadataBuildingContext; - private final Configuration configuration; - private final PersistentEntityInstantiator entityInstantiator; - - private final IdMetadataGenerator idMetadataGenerator; - private final ValueMetadataGenerator valueMetadataGenerator; - - // Map entity name -> (join descriptor -> element describing the "versioned" join) - private final Map> entityJoins; - - public AuditMetadataGenerator(EnversMetadataBuildingContext metadataBuildingContext) { - super( metadataBuildingContext ); - this.metadataBuildingContext = metadataBuildingContext; - this.configuration = metadataBuildingContext.getConfiguration(); - - // Create generators - BasicMetadataGenerator basicMetadataGenerator = new BasicMetadataGenerator(); - this.idMetadataGenerator = new IdMetadataGenerator( metadataBuildingContext, basicMetadataGenerator ); - this.valueMetadataGenerator = new ValueMetadataGenerator( metadataBuildingContext, basicMetadataGenerator ); - - this.entityInstantiator = new PersistentEntityInstantiator( configuration ); - - entityJoins = new HashMap<>(); - } - - private void addProperties( - AttributeContainer attributeContainer, - Iterator properties, - CompositeMapperBuilder currentMapper, - ClassAuditingData auditingData, - String entityName, - EntityMappingData mappingData, - boolean firstPass) { - while ( properties.hasNext() ) { - final Property property = properties.next(); - final String propertyName = property.getName(); - final PropertyAuditingData propertyAuditingData = auditingData.getPropertyAuditingData( propertyName ); - if ( propertyAuditingData != null ) { - // HHH-10246 - // Verifies if a mapping exists using a @JoinColumn against a @NaturalId field - // and if so, this eliminates the mapping property as it isn't needed. - if ( property instanceof SyntheticProperty ) { - if ( property.getValue().isAlternateUniqueKey() ) { - continue; - } - } - valueMetadataGenerator.addValue( - attributeContainer, - property.getValue(), - property.getPropertyAccessStrategy(), - currentMapper, - entityName, - mappingData, - propertyAuditingData, - isPropertyInsertable( property ), - firstPass, - true - ); - } - } - } - - private boolean isPropertyInsertable(Property property) { - if ( !property.isInsertable() ) { - // TODO: this is now broken by changes to generators - final GeneratorCreator generation = property.getValueGeneratorCreator(); - if ( generation instanceof GeneratedGeneration) { - final GeneratedGeneration valueGeneration = (GeneratedGeneration) generation; - if ( valueGeneration.generatesOnInsert() ) { - return true; - } - } - } - return property.isInsertable(); - } - - private boolean checkPropertiesAudited(Iterator properties, ClassAuditingData auditingData) { - while ( properties.hasNext() ) { - final Property property = properties.next(); - final String propertyName = property.getName(); - final PropertyAuditingData propertyAuditingData = auditingData.getPropertyAuditingData( propertyName ); - if ( propertyAuditingData == null ) { - return false; - } - } - return true; - } - - private void createJoins(PersistentClass persistentClass, JoinAwarePersistentEntity entity, ClassAuditingData auditingData) { - final Iterator joins = persistentClass.getJoins().iterator(); - final Map joinElements = new HashMap<>(); - entityJoins.put( persistentClass.getEntityName(), joinElements ); - - while ( joins.hasNext() ) { - org.hibernate.mapping.Join join = joins.next(); - - // Checking if all of the join properties are audited - if ( !checkPropertiesAudited( join.getProperties().iterator(), auditingData ) ) { - continue; - } - - // Determining the table name. If there is no entry in the dictionary, just constructing the table name - // as if it was an entity (by appending/prepending configured strings). - final String originalTableName = join.getTable().getName(); - String auditTableName = auditingData.getSecondaryTableDictionary().get( originalTableName ); - if ( auditTableName == null ) { - auditTableName = configuration.getAuditEntityName( originalTableName ); - } - - final AuditTable auditTable = auditingData.getAuditTable(); - final Join joinElement = new Join( - getCatalogName( auditTable.catalog(), join.getTable() ), - getSchemaName( auditTable.schema(), join.getTable() ), - auditTableName - ); - joinElements.put( join, joinElement ); - - // HHH-8305 - Fix case when join is considered optional. - if ( join.isOptional() ) { - joinElement.setOptional( true ); - } - - // HHH-8305 - Fix case when join is the inverse side of a mapping. - if ( join.isInverse() ) { - joinElement.setInverse( true ); - } - - joinElement.addKeyColumnsFromValue( join.getKey() ); - joinElement.addKeyColumn( new Column( configuration.getRevisionFieldName() ) ); - - entity.addJoin( joinElement ); - } - } - - private void addJoins( - PersistentClass persistentClass, - CompositeMapperBuilder currentMapper, - ClassAuditingData auditingData, - String entityName, - EntityMappingData mappingData, - boolean firstPass) { - final Iterator joins = persistentClass.getJoins().iterator(); - - while ( joins.hasNext() ) { - final org.hibernate.mapping.Join join = joins.next(); - final Join entityJoin = entityJoins.get( entityName ).get( join ); - - if ( entityJoin != null ) { - addProperties( - entityJoin, - join.getProperties().iterator(), - currentMapper, - auditingData, - entityName, - mappingData, - firstPass - ); - } - } - } - - private MappingDescriptor generateMappingData( - PersistentClass persistentClass, - AuditTableData auditTableData, - IdMappingData idMapper) { - - final PersistentEntity entity; - final ExtendedPropertyMapper propertyMapper; - final String parentEntityName; - - final InheritanceType inheritanceType = InheritanceType.get( persistentClass ); - if ( InheritanceType.NONE == inheritanceType ) { - entity = entityInstantiator.instantiate( persistentClass, auditTableData ); - propertyMapper = new MultiPropertyMapper(); - parentEntityName = null; - - // Add the id mapping - ( (RootPersistentEntity) entity ).setIdentifier( idMapper.getIdentifier() ); - - // Adding the "revision type" property - addRevisionTypeToAttributeContainer( entity, false ); - addAuditStrategyAdditionalColumnsToEntity( entity ); - } - else { - parentEntityName = persistentClass.getSuperclass().getEntityName(); - final EntityConfiguration parentConfiguration = getAuditedEntityConfiguration( parentEntityName ); - if ( parentConfiguration == null ) { - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "Entity '%s' is audited, but its superclass '%s' is not.", - persistentClass.getEntityName(), - parentEntityName - ) - ); - } - - entity = entityInstantiator.instantiate( persistentClass, auditTableData ); - propertyMapper = new SubclassPropertyMapper( - new MultiPropertyMapper(), - parentConfiguration.getPropertyMapper() - ); - } - - return new MappingDescriptor(entity, propertyMapper, parentEntityName); - } - - public void generateFirstPass(ClassAuditingData auditingData, EntityMappingData mappingData, boolean isAudited) { - final PersistentClass persistentClass = auditingData.getPersistentClass(); - - if ( !isAudited ) { - final String entityName = persistentClass.getEntityName(); - final IdMappingData idMapper = idMetadataGenerator.addIdAndGetMappingData( persistentClass, false ); - - if ( idMapper == null ) { - // Unsupported id mapping, e.g. key-many-to-one. If the entity is used in auditing, an exception - // will be thrown later on. - LOG.debugf( - "Unable to create auditing id mapping for entity %s, because of an unsupported Hibernate id mapping (e.g. key-many-to-one)", - entityName - ); - return; - } - - final ExtendedPropertyMapper propertyMapper = null; - final String parentEntityName = null; - final EntityConfiguration entityCfg = new EntityConfiguration( - entityName, - persistentClass.getClassName(), - idMapper, - propertyMapper, - parentEntityName - ); - addNotAuditedEntityConfiguration( entityName, entityCfg ); - return; - } - - final String entityName = persistentClass.getEntityName(); - LOG.debugf( "Generating first-pass auditing mapping for entity %s", entityName ); - - final String auditEntityName = configuration.getAuditEntityName( entityName ); - final String auditTableName = configuration.getAuditTableName( entityName, persistentClass.getTable().getName() ); - - // Registering the audit entity name, now that it is known - metadataBuildingContext.getAuditEntityNameRegistry().register( auditEntityName ); - - final AuditTableData auditTableData = new AuditTableData( - auditEntityName, - auditTableName, - getSchemaName( auditingData.getAuditTable().schema(), persistentClass.getTable() ), - getCatalogName( auditingData.getAuditTable().catalog(), persistentClass.getTable() ) - ); - - // Generating a mapping for the id - final IdMappingData idMapper = idMetadataGenerator.addIdAndGetMappingData( persistentClass, true ); - - // Reading the mapping data based on inheritance model - final MappingDescriptor mappingDescriptor = generateMappingData( persistentClass, auditTableData, idMapper ); - - final PersistentEntity entity = mappingDescriptor.getEntity(); - final ExtendedPropertyMapper propertyMapper = mappingDescriptor.getMapper(); - final String parentEntityName = mappingDescriptor.getParentEntityName(); - - // Mapping unjoined properties - LOG.infof( "Adding properties for entity: %s", persistentClass.getEntityName() ); - addProperties( - entity, - persistentClass.getUnjoinedProperties().iterator(), - propertyMapper, - auditingData, - persistentClass.getEntityName(), - mappingData, - true - ); - - // Creating and mapping joins (first pass); if applicable - if ( entity.isJoinAware() ) { - final JoinAwarePersistentEntity joinAwareEntity = (JoinAwarePersistentEntity) entity; - createJoins( persistentClass, joinAwareEntity, auditingData ); - addJoins( persistentClass, propertyMapper, auditingData, persistentClass.getEntityName(), mappingData, true ); - } - - // HHH-7940 - New synthetic property support for @IndexColumn/@OrderColumn dynamic properties - addSynthetics( entity, auditingData, propertyMapper, mappingData, persistentClass.getEntityName() ); - - if ( !configuration.isRevisionEndTimestampUseLegacyPlacement() ) { - addAuditStrategyRevisionEndTimestampOnly( entity ); - } - - mappingData.addMapping( entity ); - - // Storing the generated configuration - final EntityConfiguration entityCfg = new EntityConfiguration( - auditEntityName, - persistentClass.getClassName(), - idMapper, - propertyMapper, - parentEntityName - ); - - addAuditedEntityConfiguration( persistentClass.getEntityName(), entityCfg ); - } - - private void addSynthetics( - PersistentEntity entity, - ClassAuditingData auditingData, - CompositeMapperBuilder currentMapper, - EntityMappingData mappingData, - String entityName) { - for ( PropertyAuditingData propertyAuditingData : auditingData.getSyntheticProperties() ) { - valueMetadataGenerator.addValue( - entity, - propertyAuditingData.getValue(), - null, - currentMapper, - entityName, - mappingData, - propertyAuditingData, - true, - true, - false - ); - } - } - - public void generateSecondPass(ClassAuditingData auditingData, EntityMappingData mappingData) { - final PersistentClass persistentClass = auditingData.getPersistentClass(); - final String entityName = persistentClass.getEntityName(); - LOG.debugf( "Generating second-pass auditing mapping for entity %s", entityName ); - - final CompositeMapperBuilder propertyMapper = getAuditedEntityConfiguration( entityName ).getPropertyMapper(); - - // HHH-11748 - Generate a second pass for identifiers - // This is useful for situations where @Id point to @ManyToOne and @OneToOne associations. - idMetadataGenerator.generateSecondPass( entityName, persistentClass ); - - // Mapping unjoined properties - addProperties( - mappingData.getEntityDefinition(), - persistentClass.getUnjoinedProperties().iterator(), - propertyMapper, - auditingData, - entityName, - mappingData, - false - ); - - // Mapping joins (second pass) - addJoins( persistentClass, propertyMapper, auditingData, entityName, mappingData, false ); - } - - private static class MappingDescriptor { - private final PersistentEntity entity; - private final ExtendedPropertyMapper mapper; - private final String parentEntityName; - - public MappingDescriptor(PersistentEntity entity, ExtendedPropertyMapper mapper, String parentEntityName) { - this.entity = entity; - this.mapper = mapper; - this.parentEntityName = parentEntityName; - } - - public PersistentEntity getEntity() { - return entity; - } - - public ExtendedPropertyMapper getMapper() { - return mapper; - } - - public String getParentEntityName() { - return parentEntityName; - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditTableData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditTableData.java deleted file mode 100644 index bc8792962785..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/AuditTableData.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - - -/** - * Holds information necessary to create an audit table: its name, schema and catalog, as well as the audit - * entity name. - * - * @author Adam Warski (adam at warski dot org) - */ -public class AuditTableData { - private final String auditEntityName; - private final String auditTableName; - private final String schema; - private final String catalog; - - public AuditTableData(String auditEntityName, String auditTableName, String schema, String catalog) { - this.auditEntityName = auditEntityName; - this.auditTableName = auditTableName; - this.schema = schema; - this.catalog = catalog; - } - - public String getAuditEntityName() { - return auditEntityName; - } - - public String getAuditTableName() { - return auditTableName; - } - - public String getSchema() { - return schema; - } - - public String getCatalog() { - return catalog; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/BasicMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/BasicMetadataGenerator.java deleted file mode 100644 index e9327004d6b8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/BasicMetadataGenerator.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Properties; - -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.model.BasicAttribute; -import org.hibernate.envers.boot.model.TypeSpecification; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.mapper.SimpleMapperBuilder; -import org.hibernate.mapping.SimpleValue; -import org.hibernate.mapping.Value; -import org.hibernate.type.BasicType; -import org.hibernate.type.Type; - -/** - * Generates metadata for basic properties: immutable types (including enums). - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class BasicMetadataGenerator { - - public BasicMetadataGenerator() { - } - - public boolean addBasic( - AttributeContainer attributeContainer, - PropertyAuditingData propertyAuditingData, - Value value, - SimpleMapperBuilder mapper, - boolean insertable, - boolean key) { - if ( value.getType() instanceof BasicType ) { - if ( attributeContainer != null ) { - BasicAttribute attribute = buildProperty( propertyAuditingData, value, insertable, key ); - attributeContainer.addAttribute( attribute ); - - if ( isAddNestedType( value ) ) { - applyNestedType( (SimpleValue) value, attribute ); - } - } - - // A null mapper means that we only want to add xml mappings - if ( mapper != null ) { - propertyAuditingData.setPropertyType( value.getType() ); - mapper.add( propertyAuditingData.resolvePropertyData() ); - } - - return true; - } - - return false; - } - - private boolean isAddNestedType(Value value) { - if ( value instanceof SimpleValue simpleValue ) { - return simpleValue.getTypeParameters() != null; - } - return false; - } - - private BasicAttribute buildProperty(PropertyAuditingData propertyAuditingData, Value value, boolean insertable, boolean key) { - BasicAttribute attribute = new BasicAttribute( - propertyAuditingData.getName(), - isAddNestedType( value ) ? null : getBasicTypeName( value.getType() ), - propertyAuditingData.isForceInsertable() || insertable, - key - ); - - attribute.addColumnsFromValue( value ); - return attribute; - } - - private void applyNestedType(SimpleValue value, BasicAttribute attribute) { - final Properties typeParameters = value.getTypeParameters(); - final String typeName = getBasicTypeName( value.getType() ); - - final TypeSpecification typeSpecification = new TypeSpecification( typeName ); - attribute.setType( typeSpecification ); - - // By default, copying all Hibernate properties - for ( Object object : typeParameters.keySet() ) { - final String keyType = (String) object; - final String property = typeParameters.getProperty( keyType ); - if ( property != null ) { - typeSpecification.setParameter( keyType, property ); - } - } - } - - private String getBasicTypeName(Type type) { - String typeName = type.getName(); - if ( typeName == null ) { - typeName = type.getClass().getName(); - } - return typeName; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/CollectionMappedByResolver.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/CollectionMappedByResolver.java deleted file mode 100644 index ee586567eda1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/CollectionMappedByResolver.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.lang.invoke.MethodHandles; -import java.util.List; -import java.util.Locale; -import java.util.Objects; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.EnversMessageLogger; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.KeyValue; -import org.hibernate.mapping.ManyToOne; -import org.hibernate.mapping.OneToMany; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.Selectable; -import org.hibernate.mapping.Table; - -import org.jboss.logging.Logger; - -/** - * Helper class that provides a way to resolve the {@code mappedBy} attribute for collections. - * - * @author Chris Cranford - */ -public class CollectionMappedByResolver { - - private static final EnversMessageLogger LOG = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversMessageLogger.class, - CollectionMappedByResolver.class.getName() - ); - - public static String resolveMappedBy(Collection collection, PropertyAuditingData propertyAuditingData) { - final PersistentClass referencedClass = getReferenceCollectionClass( collection ); - final ResolverContext resolverContext = new ResolverContext( collection, propertyAuditingData ); - return getMappedBy( referencedClass, resolverContext ); - } - - public static String resolveMappedBy(Table collectionTable, PersistentClass referencedClass, PropertyAuditingData propertyAuditingData) { - return getMappedBy( referencedClass, new ResolverContext( collectionTable, propertyAuditingData ) ); - } - - public static boolean isMappedByKey(Collection collection, String mappedBy) { - final PersistentClass referencedClass = getReferenceCollectionClass( collection ); - if ( referencedClass != null ) { - final String keyMappedBy = searchMappedByKey( referencedClass, collection ); - return mappedBy.equals( keyMappedBy ); - } - return false; - } - - private static String getMappedBy(PersistentClass referencedClass, ResolverContext resolverContext) { - // If there's an @AuditMappedBy specified, returning it directly. - final String auditMappedBy = resolverContext.propertyAuditingData.getAuditMappedBy(); - if ( auditMappedBy != null ) { - return auditMappedBy; - } - - // searching in referenced class - String mappedBy = searchMappedBy( referencedClass, resolverContext ); - - if ( mappedBy == null ) { - LOG.debugf( - "Going to search the mapped by attribute for %s in superclasses of entity: %s", - resolverContext.propertyAuditingData.getName(), - referencedClass.getClassName() - ); - - PersistentClass tempClass = referencedClass; - while ( mappedBy == null && tempClass.getSuperclass() != null ) { - LOG.debugf( "Searching in superclass: %s", tempClass.getSuperclass().getClassName() ); - mappedBy = searchMappedBy( tempClass.getSuperclass(), resolverContext ); - tempClass = tempClass.getSuperclass(); - } - } - - if ( mappedBy == null ) { - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "Unable to read mapped by attribute for %s in %s!", - resolverContext.propertyAuditingData.getName(), - referencedClass.getClassName() - ) - ); - } - - return mappedBy; - } - - private static String searchMappedBy(PersistentClass persistentClass, ResolverContext resolverContext) { - if ( resolverContext.getCollection() != null ) { - return searchMappedBy( persistentClass, resolverContext.getCollection() ); - } - return searchMappedBy( persistentClass, resolverContext.getTable() ); - } - - private static String searchMappedBy(PersistentClass referencedClass, Collection collectionValue) { - final List assocClassProps = referencedClass.getProperties(); - for ( Property property : assocClassProps ) { - final List assocClassSelectables = property.getValue().getSelectables(); - final List collectionKeySelectables = collectionValue.getKey().getSelectables(); - if ( Objects.equals( assocClassSelectables, collectionKeySelectables ) ) { - return property.getName(); - } - } - // HHH-7625 - // Support ToOne relations with mappedBy that point to an @IdClass key property. - return searchMappedByKey( referencedClass, collectionValue ); - } - - private static String searchMappedBy(PersistentClass referencedClass, Table collectionTable) { - return searchMappedBy( referencedClass.getProperties(), collectionTable ); - } - - private static String searchMappedBy(List properties, Table collectionTable) { - for ( Property property : properties ) { - if ( property.getValue() instanceof Collection ) { - // The equality is intentional. We want to find a collection property with the same collection table. - //noinspection ObjectEquality - if ( ( (Collection) property.getValue() ).getCollectionTable() == collectionTable ) { - return property.getName(); - } - } - else if ( property.getValue() instanceof Component ) { - // HHH-12240 - // Should we find an embeddable, we should traverse it as well to see if the collection table - // happens to be an attribute inside the embeddable rather than directly on the entity. - final Component component = (Component) property.getValue(); - - final String mappedBy = searchMappedBy( component.getProperties(), collectionTable ); - if ( mappedBy != null ) { - return property.getName() + "_" + mappedBy; - } - } - } - return null; - } - - private static String searchMappedByKey(PersistentClass referencedClass, Collection collectionValue) { - for ( KeyValue keyValue : referencedClass.getKeyClosure() ) { - // make sure it's a 'Component' because IdClass is registered as this type. - if ( keyValue instanceof Component ) { - final Component component = (Component) keyValue; - for ( Property property : component.getProperties() ) { - final List propertySelectables = property.getValue().getSelectables(); - final List collectionSelectables = collectionValue.getKey().getSelectables(); - if ( Objects.equals( propertySelectables, collectionSelectables ) ) { - return property.getName(); - } - } - } - } - return null; - } - - private static PersistentClass getReferenceCollectionClass(Collection collectionValue) { - PersistentClass referencedClass = null; - if ( collectionValue.getElement() instanceof OneToMany ) { - final OneToMany oneToManyValue = (OneToMany) collectionValue.getElement(); - referencedClass = oneToManyValue.getAssociatedClass(); - } - else if ( collectionValue.getElement() instanceof ManyToOne ) { - // Case for bi-directional relation with @JoinTable on the owning @ManyToOne side. - final ManyToOne manyToOneValue = (ManyToOne) collectionValue.getElement(); - referencedClass = manyToOneValue.getMetadata().getEntityBinding( manyToOneValue.getReferencedEntityName() ); - } - return referencedClass; - } - - private static class ResolverContext { - private final Collection collection; - private final PropertyAuditingData propertyAuditingData; - private final Table table; - - public ResolverContext(Collection collection, PropertyAuditingData propertyAuditingData) { - this.collection = collection; - this.propertyAuditingData = propertyAuditingData; - this.table = null; - } - - public ResolverContext(Table table, PropertyAuditingData propertyAuditingData) { - this.table = table; - this.propertyAuditingData = propertyAuditingData; - this.collection = null; - } - - public Collection getCollection() { - return collection; - } - - public Table getTable() { - return table; - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/CollectionMetadataContext.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/CollectionMetadataContext.java deleted file mode 100644 index 24d09c5e1a10..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/CollectionMetadataContext.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.mapper.CompositeMapperBuilder; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.ManyToOne; -import org.hibernate.mapping.OneToMany; -import org.hibernate.mapping.SingleTableSubclass; -import org.hibernate.type.BagType; -import org.hibernate.type.ListType; -import org.hibernate.type.MapType; -import org.hibernate.type.SetType; -import org.hibernate.type.Type; - -/** - * Metadata building context used for collections to hold per-collection state. - * - * @author Chris Cranford - */ -public interface CollectionMetadataContext { - - EntityMappingData getEntityMappingData(); - - Collection getCollection(); - - CompositeMapperBuilder getMapperBuilder(); - - String getReferencedEntityName(); - - String getReferencingEntityName(); - - EntityConfiguration getReferencingEntityConfiguration(); - - PropertyAuditingData getPropertyAuditingData(); - - default String getPropertyName() { - return getPropertyAuditingData().getName(); - } - - default boolean isOneToManyAttached() { - Type type = getCollection().getType(); - return type instanceof BagType - || type instanceof SetType - || type instanceof MapType - || type instanceof ListType; - } - - default boolean isInverseOneToMany() { - return getCollection().getElement() instanceof OneToMany - && getCollection().isInverse(); - } - - default boolean isOwningManyToOneWithBidrectionalJoinTable() { - return getCollection().getElement() instanceof ManyToOne - && getPropertyAuditingData().hasRelationMappedBy(); - } - - default boolean isFakeOneToManyBidirectional() { - return getCollection().getElement() instanceof OneToMany - && getPropertyAuditingData().hasAuditedMappedBy(); - } - - default boolean isMiddleTableCollection() { - return !( isOneToManyAttached() - && ( isInverseOneToMany() - || isFakeOneToManyBidirectional() - || isOwningManyToOneWithBidrectionalJoinTable() ) ); - } - - default boolean isOneToManySingleTableSubclass() { - if ( getCollection().getElement() instanceof OneToMany ) { - return ( (OneToMany) getCollection().getElement() ).getAssociatedClass() instanceof SingleTableSubclass; - } - return false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ColumnNameIterator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ColumnNameIterator.java deleted file mode 100644 index 8e00e398b812..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ColumnNameIterator.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Iterator; - -import org.hibernate.mapping.Selectable; - -/** - * Utility class to build a column name iterator over different column collection types. - * - * @author Chris Cranford - */ -public abstract class ColumnNameIterator implements Iterator { - - public static ColumnNameIterator from(Iterator selectables) { - return new ColumnNameIterator() { - public boolean hasNext() { - return selectables.hasNext(); - } - - public String next() { - final Selectable next = selectables.next(); - if ( next.isFormula() ) { - throw new FormulaNotSupportedException(); - } - return ( (org.hibernate.mapping.Column) next ).getName(); - } - - public void remove() { - selectables.remove(); - } - }; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ComponentMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ComponentMetadataGenerator.java deleted file mode 100644 index 51f9a9663b6c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ComponentMetadataGenerator.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Map; - -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.registry.classloading.ClassLoaderAccessHelper; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.internal.metadata.reader.ComponentAuditingData; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.mapper.CompositeMapperBuilder; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.Value; -import org.hibernate.metamodel.internal.EmbeddableCompositeUserTypeInstantiator; -import org.hibernate.metamodel.internal.EmbeddableInstantiatorPojoIndirecting; -import org.hibernate.metamodel.spi.EmbeddableInstantiator; -import org.hibernate.resource.beans.internal.FallbackBeanInstanceProducer; -import org.hibernate.usertype.CompositeUserType; - -/** - * Generates metadata for components. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Zuchowski (author at zuchos dot com) - * @author Chris Cranford - */ -public final class ComponentMetadataGenerator extends AbstractMetadataGenerator { - - private final ValueMetadataGenerator valueGenerator; - - ComponentMetadataGenerator(EnversMetadataBuildingContext metadataBuildingContext, ValueMetadataGenerator valueGenerator) { - super( metadataBuildingContext ); - this.valueGenerator = valueGenerator; - } - - @SuppressWarnings("unchecked") - public void addComponent( - AttributeContainer attributeContainer, - PropertyAuditingData propertyAuditingData, - Value value, - CompositeMapperBuilder mapper, - String entityName, - EntityMappingData mappingData, - boolean firstPass) { - final Component propComponent = (Component) value; - final EmbeddableInstantiator instantiator; - if ( propComponent.getCustomInstantiator() != null ) { - if ( !getMetadataBuildingContext().getBuildingOptions().isAllowExtensionsInCdi() ) { - instantiator = FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( propComponent.getCustomInstantiator() ); - } - else { - instantiator = - getMetadataBuildingContext().getBootstrapContext().getManagedBeanRegistry() - .getBean( propComponent.getCustomInstantiator() ) - .getBeanInstance(); - } - } - else if ( propComponent.getTypeName() != null ) { - final Class> userTypeClass = getMetadataBuildingContext().getBootstrapContext() - .getClassLoaderAccess() - .classForName( propComponent.getTypeName() ); - if ( !getMetadataBuildingContext().getBuildingOptions().isAllowExtensionsInCdi() ) { - final CompositeUserType compositeUserType = FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( userTypeClass ); - //noinspection rawtypes - instantiator = new EmbeddableCompositeUserTypeInstantiator( (CompositeUserType) compositeUserType ); - } - else { - final CompositeUserType compositeUserType = (CompositeUserType) - getMetadataBuildingContext().getBootstrapContext().getManagedBeanRegistry() - .getBean( userTypeClass ) - .getBeanInstance(); - instantiator = new EmbeddableCompositeUserTypeInstantiator( compositeUserType ); - } - } - else if ( propComponent.getInstantiator() != null ) { - instantiator = EmbeddableInstantiatorPojoIndirecting.of( - propComponent.getPropertyNames(), - propComponent.getInstantiator(), - propComponent.getInstantiatorPropertyNames() - ); - } - else { - instantiator = null; - } - final CompositeMapperBuilder componentMapper = mapper.addComponent( - propertyAuditingData.resolvePropertyData(), - ClassLoaderAccessHelper.loadClass( - getMetadataBuildingContext(), - getClassNameForComponent( propComponent ) - ), - instantiator - ); - - // The property auditing data must be for a component. - final ComponentAuditingData componentAuditingData = (ComponentAuditingData) propertyAuditingData; - - // Adding all properties of the component - propComponent.sortProperties(); - for ( Property property : propComponent.getProperties() ) { - final PropertyAuditingData componentPropertyAuditingData = - componentAuditingData.getPropertyAuditingData( property.getName() ); - - // Checking if that property is audited - if ( componentPropertyAuditingData != null ) { - valueGenerator.addValue( - attributeContainer, - property.getValue(), - property.getPropertyAccessStrategy(), - componentMapper, - entityName, - mappingData, - componentPropertyAuditingData, - property.isInsertable(), - firstPass, - false - ); - } - } - - if ( !firstPass ) { - final EntityConfiguration owningEntityConfiguration = getAuditedEntityConfigurations().get( entityName ); - owningEntityConfiguration.addToOneComponent( propertyAuditingData.getName(), componentAuditingData ); - } - } - - private String getClassNameForComponent(Component component) { - return component.isDynamic() ? Map.class.getCanonicalName() : component.getComponentClassName(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/EntityMappingData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/EntityMappingData.java deleted file mode 100644 index 5cf3e5344a2f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/EntityMappingData.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.boot.jaxb.hbm.spi.JaxbHbmHibernateMapping; -import org.hibernate.envers.boot.model.PersistentEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class EntityMappingData { - - private PersistentEntity entityDefinition; - private final List additionalEntityDefinitions; - - private final JaxbHbmHibernateMapping mapping; - private final List additionalMappings; - - public EntityMappingData() { - this.mapping = new JaxbHbmHibernateMapping(); - this.mapping.setAutoImport( false ); - - this.additionalEntityDefinitions = new ArrayList<>(); - this.additionalMappings = new ArrayList<>(); - } - - public PersistentEntity getEntityDefinition() { - return entityDefinition; - } - - public JaxbHbmHibernateMapping getMapping() { - return mapping; - } - - public List getAdditionalMappings() { - return additionalMappings; - } - - public void addMapping(PersistentEntity mapping) { - this.entityDefinition = mapping; - } - - public void addAdditionalMapping(PersistentEntity mapping) { - this.additionalEntityDefinitions.add( mapping ); - } - - public void build() { - entityDefinition.build( this.mapping ); - for ( PersistentEntity additionalDefinition : additionalEntityDefinitions ) { - final JaxbHbmHibernateMapping newMapping = new JaxbHbmHibernateMapping(); - additionalMappings.add( newMapping ); - additionalDefinition.build( newMapping ); - } - } - - public boolean isRootEntity() { - return !mapping.getClazz().isEmpty(); - } - - public boolean isSubclassEntity() { - return !mapping.getSubclass().isEmpty(); - } - - public boolean isUnionSubclassEntity() { - return !mapping.getUnionSubclass().isEmpty(); - } - - public boolean isJoinedSubclassEntity() { - return !mapping.getJoinedSubclass().isEmpty(); - } - - public boolean isEntityTypeKnown() { - return !isRootEntity() && !isSubclassEntity() && !isUnionSubclassEntity() && !isJoinedSubclassEntity(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/FormulaNotSupportedException.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/FormulaNotSupportedException.java deleted file mode 100644 index be5b897e0b5d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/FormulaNotSupportedException.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.HibernateException; - -/** - * Exception indicating that a formula mapping was encountered where it is not currently supported - * - * @author Steve Ebersole - */ -public class FormulaNotSupportedException extends HibernateException { - private static final String MSG = "Formula mappings (aside from @DiscriminatorValue) are currently not supported"; - - /** - * Constructs a FormulaNotSupportedException using a standard message - */ - public FormulaNotSupportedException() { - super( MSG ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/IdMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/IdMetadataGenerator.java deleted file mode 100644 index d81b1fcec74d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/IdMetadataGenerator.java +++ /dev/null @@ -1,314 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Locale; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.model.CompositeIdentifier; -import org.hibernate.envers.boot.model.Identifier; -import org.hibernate.envers.boot.model.IdentifierRelation; -import org.hibernate.envers.boot.model.ManyToOneAttribute; -import org.hibernate.envers.boot.registry.classloading.ClassLoaderAccessHelper; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.SimpleMapperBuilder; -import org.hibernate.envers.internal.entities.mapper.id.EmbeddedIdMapper; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.id.MultipleIdMapper; -import org.hibernate.envers.internal.entities.mapper.id.NestedEmbeddedIdMapper; -import org.hibernate.envers.internal.entities.mapper.id.SimpleIdMapperBuilder; -import org.hibernate.envers.internal.entities.mapper.id.SingleIdMapper; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.ToOne; -import org.hibernate.mapping.Value; -import org.hibernate.spi.NavigablePath; -import org.hibernate.type.ComponentType; -import org.hibernate.type.ManyToOneType; -import org.hibernate.type.Type; - -/** - * Generates metadata for primary identifiers (ids) of versions entities. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class IdMetadataGenerator extends AbstractMetadataGenerator { - - private final BasicMetadataGenerator basicMetadataGenerator; - - public IdMetadataGenerator(EnversMetadataBuildingContext metadataBuildingContext, BasicMetadataGenerator basicMetadataGenerator) { - super( metadataBuildingContext ); - this.basicMetadataGenerator = basicMetadataGenerator; - } - - private Class loadClass(Component component) { - return ClassLoaderAccessHelper.loadClass( getMetadataBuildingContext(), component.getComponentClassName() ); - } - - private static boolean isSameType(Property left, Property right) { - return left.getType().getName().equals( right.getType().getName() ); - } - - private boolean addIdProperty( - AttributeContainer attributeContainer, - boolean key, - SimpleIdMapperBuilder mapper, - Property mappedProperty, - Property virtualProperty, - boolean audited) { - - if ( NavigablePath.IDENTIFIER_MAPPER_PROPERTY.equals( mappedProperty.getName() ) ) { - return false; - } - - final PropertyAuditingData propertyAuditingData = getIdPersistentPropertyAuditingData( mappedProperty ); - - if ( ManyToOneType.class.isInstance( mappedProperty.getType() ) ) { - // This can technically be a @ManyToOne or logical @OneToOne - final boolean added = addManyToOne( attributeContainer, propertyAuditingData, mappedProperty.getValue(), mapper ); - if ( added && mapper != null ) { - if ( virtualProperty != null && !isSameType( mappedProperty, virtualProperty ) ) { - // A virtual property is only available when an @IdClass is used. We specifically need to map - // both the value and virtual types when they differ so we can adequately map between them at - // appropriate points. - propertyAuditingData.setPropertyType( mappedProperty.getType() ); - propertyAuditingData.setVirtualPropertyType( virtualProperty.getType() ); - mapper.add( propertyAuditingData.resolvePropertyData() ); - } - else { - // In this branch the identifier either doesn't use an @IdClass or the property types between - // the @IdClass and containing entity are identical, allowing us to use prior behavior. - propertyAuditingData.setPropertyType( mappedProperty.getType() ); - mapper.add( propertyAuditingData.resolvePropertyData() ); - } - } - - return added; - } - else if ( ComponentType.class.isInstance( mappedProperty.getType() ) ) { - final Component component = (Component) mappedProperty.getValue(); - final NestedEmbeddedIdMapper nestedMapper; - if ( mapper != null ) { - final PropertyData propertyData = propertyAuditingData.resolvePropertyData(); - nestedMapper = new NestedEmbeddedIdMapper( propertyData, component ); - mapper.add( propertyData, nestedMapper ); - } - else { - nestedMapper = null; - } - return addIdProperties( attributeContainer, component, null, nestedMapper, key, audited ); - } - - return addBasic( attributeContainer, propertyAuditingData, mappedProperty.getValue(), mapper, key ); - } - - private boolean addIdProperties( - AttributeContainer attributeContainer, - Component component, - Component virtualComponent, - SimpleIdMapperBuilder mapper, - boolean key, - boolean audited) { - for ( Property property : component.getProperties() ) { - final Property virtualProperty = virtualComponent != null - ? virtualComponent.getProperty( property.getName() ) - : null; - if ( !addIdProperty( attributeContainer, key, mapper, property, virtualProperty, audited ) ) { - // If the entity is audited, and a non-supported id component is used, throw exception. - if ( audited ) { - throw new EnversMappingException( - String.format( - Locale.ROOT, - "Type not supported: %s", - property.getType().getClass().getName() - ) - ); - } - return false; - } - } - return true; - } - - public void generateSecondPass(String entityName, PersistentClass persistentClass) { - final Component identifierMapper = persistentClass.getIdentifierMapper(); - final Property identifierProperty = persistentClass.getIdentifierProperty(); - if ( identifierMapper != null ) { - generateSecondPass( entityName, identifierMapper ); - } - else if ( identifierProperty != null && identifierProperty.isComposite() ) { - final Component component = (Component) identifierProperty.getValue(); - generateSecondPass( entityName, component ); - } - } - - private void generateSecondPass(String entityName, Component component) { - for ( Property property : component.getProperties() ) { - final Value value = property.getValue(); - if ( value instanceof ToOne ) { - final PropertyAuditingData propertyData = getIdPersistentPropertyAuditingData( property ); - final String referencedEntityName = ( (ToOne) value).getReferencedEntityName(); - - final String prefix = getMetadataBuildingContext().getConfiguration() - .getOriginalIdPropertyName() + "." + propertyData.getName(); - - final IdMapper relMapper; - if ( hasAuditedEntityConfiguration( referencedEntityName ) ) { - relMapper = getAuditedEntityConfiguration( referencedEntityName ).getIdMapper(); - } - else if ( hasNotAuditedEntityConfiguration( referencedEntityName ) ) { - relMapper = getNotAuditedEntityConfiguration( referencedEntityName ).getIdMapper(); - } - else { - throw new EnversMappingException( "Unable to locate entity configuration for [" + referencedEntityName + "]" ); - } - - final IdMapper prefixedMapper = relMapper.prefixMappedProperties( prefix + "." ); - - getAuditedEntityConfiguration( entityName ).addToOneRelation( - prefix, - referencedEntityName, - prefixedMapper, - true, - false - ); - } - } - } - - public IdMappingData addIdAndGetMappingData(PersistentClass persistentClass, boolean audited) { - final Property idProp = persistentClass.getIdentifierProperty(); - final Component idMapper = persistentClass.getIdentifierMapper(); - - Identifier identifier = new CompositeIdentifier( getMetadataBuildingContext() ); - IdentifierRelation relation = new IdentifierRelation(); - - // Check if the id mapping is supported - if ( idMapper == null && idProp == null ) { - return null; - } - - SimpleIdMapperBuilder mapper; - if ( idMapper != null ) { - // Multiple id - final Component virtualComponent = (Component) persistentClass.getIdentifier(); - mapper = new MultipleIdMapper( virtualComponent ); - - if ( !addIdProperties( relation, idMapper, virtualComponent, mapper, false, audited ) ) { - return null; - } - - // null mapper - the mapping where already added the first time, now we only want to generate the xml - if ( !addIdProperties( identifier, idMapper, virtualComponent, null, true, audited ) ) { - return null; - } - } - else if ( idProp.isComposite() ) { - // Embedded id - final Component idComponent = (Component) idProp.getValue(); - mapper = new EmbeddedIdMapper( getIdPropertyData( idProp ), idComponent ); - - if ( !addIdProperties( relation, idComponent, null, mapper, false, audited ) ) { - return null; - } - - // null mapper - the mapping where already added the first time, now we only want to generate the xml - if ( !addIdProperties( identifier, idComponent, null, null, true, audited ) ) { - return null; - } - } - else { - // Single id - mapper = new SingleIdMapper( persistentClass.getServiceRegistry() ); - - // Last but one parameter: ids are always insertable - basicMetadataGenerator.addBasic( - relation, - getIdPersistentPropertyAuditingData( idProp ), - idProp.getValue(), - mapper, - true, - false - ); - - // null mapper - the mapping where already added the first time, now we only want to generate the xml - basicMetadataGenerator.addBasic( - identifier, - getIdPersistentPropertyAuditingData( idProp ), - idProp.getValue(), - null, - true, - true - ); - } - - // Adding a relation to the revision entity (effectively: the "revision number" property) - addRevisionInfoRelationToIdentifier( identifier ); - - return new IdMappingData( mapper, identifier, relation ); - } - - private PropertyData getIdPropertyData(Property property) { - return new PropertyData( - property.getName(), - property.getName(), - property.getPropertyAccessorName() - ); - } - - private PropertyAuditingData getIdPersistentPropertyAuditingData(Property property) { - return new PropertyAuditingData( property.getName(), property.getPropertyAccessorName(), false ); - } - - public boolean addManyToOne( - AttributeContainer attributeContainer, - PropertyAuditingData propertyAuditingData, - Value value, - SimpleMapperBuilder mapper) { - final Type type = value.getType(); - - // A null mapper occurs when adding to composite-id element - final ManyToOneAttribute attribute = new ManyToOneAttribute( - propertyAuditingData.getName(), - "", - true, - true, - mapper == null, - type.getName() - ); - - // HHH-11107 - // Use FK hbm magic value 'none' to skip making foreign key constraints between the Envers - // schema and the base table schema when a @ManyToOne is present in an identifier. - attribute.setForeignKey( "none" ); - - attribute.addColumnsFromValue( value ); - attributeContainer.addAttribute( attribute ); - - return true; - } - - public boolean addBasic( - AttributeContainer attributeContainer, - PropertyAuditingData propertyAuditingData, - Value value, - SimpleIdMapperBuilder mapper, - boolean key) { - return basicMetadataGenerator.addBasic( - attributeContainer, - propertyAuditingData, - value, - mapper, - true, - key - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/InheritanceType.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/InheritanceType.java deleted file mode 100644 index d526347e9913..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/InheritanceType.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.mapping.JoinedSubclass; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.SingleTableSubclass; -import org.hibernate.mapping.Subclass; -import org.hibernate.mapping.UnionSubclass; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public enum InheritanceType { - NONE, - JOINED, - SINGLE, - TABLE_PER_CLASS; - - /** - * @param pc The class for which to get the inheritance type. - * - * @return The inheritance type of this class. NONE, if this class does not inherit from - * another persistent class. - */ - public static InheritanceType get(PersistentClass pc) { - final PersistentClass superclass = pc.getSuperclass(); - if ( superclass == null ) { - return InheritanceType.NONE; - } - - // We assume that every subclass is of the same type. - final Subclass subclass = superclass.getSubclasses().get(0); - if ( subclass instanceof SingleTableSubclass ) { - return InheritanceType.SINGLE; - } - else if ( subclass instanceof JoinedSubclass ) { - return InheritanceType.JOINED; - } - else if ( subclass instanceof UnionSubclass ) { - return InheritanceType.TABLE_PER_CLASS; - } - - throw new EnversMappingException( "Unknown subclass class: " + subclass.getClass() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/JoinColumnCollectionMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/JoinColumnCollectionMetadataGenerator.java deleted file mode 100644 index 29dbc85c3dad..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/JoinColumnCollectionMetadataGenerator.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.EnversMessageLogger; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.SinglePropertyMapper; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.CommonCollectionMapperData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.entities.mapper.relation.ToOneIdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleRelatedComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleStraightComponentMapper; -import org.hibernate.envers.internal.entities.mapper.relation.query.OneAuditEntityQueryGenerator; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.IndexedCollection; -import org.hibernate.type.ComponentType; -import org.hibernate.type.Type; - -import org.jboss.logging.Logger; - -import java.lang.invoke.MethodHandles; - -/** - * An implementation of {@link AbstractCollectionMetadataGenerator} that builds collection metadata - * and association mappings where the association uses a join column mapping. - * - * @author Chris Cranford - */ -public class JoinColumnCollectionMetadataGenerator extends AbstractCollectionMetadataGenerator { - - private static final EnversMessageLogger LOG = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversMessageLogger.class, - JoinColumnCollectionMetadataGenerator.class.getName() - ); - - public JoinColumnCollectionMetadataGenerator( - EnversMetadataBuildingContext metadataBuildingContext, - BasicMetadataGenerator basicMetadataGenerator, - ValueMetadataGenerator valueMetadataGenerator) { - super( metadataBuildingContext, basicMetadataGenerator, valueMetadataGenerator ); - } - - @Override - public void addCollection(CollectionMetadataContext context) { - LOG.debugf( - "Adding audit mapping for property %s.%s: one-to-many collection, using a join column on the referenced entity", - context.getReferencingEntityName(), - context.getPropertyName() - ); - - final Collection collection = context.getCollection(); - final PropertyAuditingData propertyAuditingData = context.getPropertyAuditingData(); - final String mappedBy = CollectionMappedByResolver.resolveMappedBy( collection, propertyAuditingData ); - - final IdMappingData referencedIdMapping = getReferencedIdMappingData( - context.getReferencingEntityName(), - context.getReferencedEntityName(), - propertyAuditingData, - false - ); - - final EntityConfiguration referencingEntityConfiguration = context.getReferencingEntityConfiguration(); - final IdMappingData referencingIdMapping = referencingEntityConfiguration.getIdMappingData(); - - // Generating the id mappers data for the referencing side of the relation. - final MiddleIdData referencingIdData = createMiddleIdData( - referencingIdMapping, - mappedBy + "_", - context.getReferencingEntityName() - ); - - // And for the referenced side. The prefixed mapper won't be used (as this collection isn't persisted - // in a join table, so the prefix value is arbitrary). - final MiddleIdData referencedIdData = createMiddleIdData( - referencedIdMapping, - null, - context.getReferencedEntityName() - ); - - // Generating the element mapping. - final MiddleRelatedComponentMapper elementComponentMapper = new MiddleRelatedComponentMapper( referencedIdData ); - final MiddleComponentData elementComponentData = new MiddleComponentData( elementComponentMapper ); - - // Generating the index mapping, if an index exists. It can only exists in case a jakarta.persistence.MapKey - // annotation is present on the entity. So the middleEntityXml will be not be used. The queryGeneratorBuilder - // will only be checked for nullnes. - MiddleComponentData indexComponentData = addIndex( context, null, null ); - - // Generating the query generator - it should read directly from the related entity. - final RelationQueryGenerator queryGenerator = new OneAuditEntityQueryGenerator( - getMetadataBuildingContext().getConfiguration(), - referencingIdData, - context.getReferencedEntityName(), - referencedIdData, - context.getCollection().getElement() instanceof ComponentType, - mappedBy, - CollectionMappedByResolver.isMappedByKey( collection, mappedBy ), - getOrderByCollectionRole( collection, collection.getOrderBy() ) - ); - - // Creating common mapper data. - final CommonCollectionMapperData commonCollectionMapperData = createCommonCollectionMapperData( - context, - context.getReferencedEntityName(), - referencingIdData, - queryGenerator - ); - - PropertyMapper fakeBidirectionalRelationMapper; - PropertyMapper fakeBidirectionalRelationIndexMapper; - if ( context.isFakeOneToManyBidirectional() || hasCollectionIndex( context ) ) { - // In case of a fake many-to-one bidirectional relation, we have to generate a mapper which maps - // the mapped-by property name to the id of the related entity (which is the owner of the collection). - final String auditMappedBy = getAddOneToManyAttachedAuditMappedBy( context ); - - fakeBidirectionalRelationMapper = getBidirectionalRelationMapper( - context.getReferencingEntityName(), - referencingIdMapping, - auditMappedBy - ); - - // Checking if there's an index defined. If so, adding a mapper for it. - final String positionMappedBy = getAttachedPositionMappedBy( context ); - if ( positionMappedBy != null ) { - fakeBidirectionalRelationIndexMapper = getBidirectionalRelationIndexMapper( context, positionMappedBy ); - indexComponentData = getBidirectionalIndexData( indexComponentData, positionMappedBy ); - } - else { - fakeBidirectionalRelationIndexMapper = null; - } - } - else { - fakeBidirectionalRelationMapper = null; - fakeBidirectionalRelationIndexMapper = null; - } - - // Checking the type of the collection and adding an appropriate mapper. - addMapper( context, commonCollectionMapperData, elementComponentData, indexComponentData ); - - // Storing information about this relation. - referencingEntityConfiguration.addToManyNotOwningRelation( - context.getPropertyName(), - mappedBy, - context.getReferencedEntityName(), - referencingIdData.getPrefixedMapper(), - fakeBidirectionalRelationMapper, - fakeBidirectionalRelationIndexMapper, - hasCollectionIndex( context ) - ); - } - - private boolean hasCollectionIndex(CollectionMetadataContext context) { - return context.getCollection().isIndexed() && ( (IndexedCollection) context.getCollection() ).getIndex() != null; - } - - private String getAddOneToManyAttachedAuditMappedBy(CollectionMetadataContext context) { - if ( context.isFakeOneToManyBidirectional() ) { - return context.getPropertyAuditingData().getAuditMappedBy(); - } - return context.getCollection().getMappedByProperty(); - } - - private PropertyMapper getBidirectionalRelationMapper(String entityName, IdMappingData idData, String auditMappedBy) { - // Creating a prefixed relation mapper. - final IdMapper relMapper = idData.getIdMapper().prefixMappedProperties( - MappingTools.createToOneRelationPrefix( auditMappedBy ) - ); - - return new ToOneIdMapper( - relMapper, - // The mapper will only be used to map from entity to map, so no need to provide other details - // when constructing the PropertyData. - new PropertyData( auditMappedBy, null, null ), - entityName, - false, - false - ); - } - - private PropertyMapper getBidirectionalRelationIndexMapper(CollectionMetadataContext context, String positionMappedBy) { - if ( positionMappedBy != null ) { - final Type indexType = getCollectionIndexType( context ); - return new SinglePropertyMapper( PropertyData.forProperty( positionMappedBy, indexType ) ); - } - return null; - } - - private Type getCollectionIndexType(CollectionMetadataContext context) { - if ( context.getCollection().isIndexed() ) { - return ( (IndexedCollection) context.getCollection() ).getIndex().getType(); - } - // todo - do we need to reverse lookup the type anyway? - return null; - } - - private String getAttachedPositionMappedBy(CollectionMetadataContext context) { - if ( context.isFakeOneToManyBidirectional() ) { - return context.getPropertyAuditingData().getPositionMappedBy(); - } - else if ( hasCollectionIndex( context ) ) { - return ( (IndexedCollection) context.getCollection() ).getIndex().getSelectables().get( 0 ).getText(); - } - return null; - } - - private MiddleComponentData getBidirectionalIndexData(MiddleComponentData original, String positionMappedBy) { - if ( positionMappedBy != null ) { - // overwriting the index component data to properly read the index. - return new MiddleComponentData( new MiddleStraightComponentMapper( positionMappedBy ) ); - } - return original; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/MiddleTableCollectionMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/MiddleTableCollectionMetadataGenerator.java deleted file mode 100644 index 899cec1ede7a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/MiddleTableCollectionMetadataGenerator.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.envers.CollectionAuditTable; -import org.hibernate.envers.boot.model.CompositeIdentifier; -import org.hibernate.envers.boot.model.RootPersistentEntity; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.reader.AuditJoinTableData; -import org.hibernate.envers.internal.EnversMessageLogger; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.mapper.relation.CommonCollectionMapperData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.OneToMany; -import org.hibernate.mapping.PersistentClass; - -import org.jboss.logging.Logger; - -import java.lang.invoke.MethodHandles; - -/** - * An implementation of {@link AbstractCollectionMetadataGenerator} that builds collection metadata - * and association mappings where the association uses a middle table mapping. - * - * @author Chris Cranford - */ -public class MiddleTableCollectionMetadataGenerator extends AbstractCollectionMetadataGenerator { - - private static final EnversMessageLogger LOG = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversMessageLogger.class, - MiddleTableCollectionMetadataGenerator.class.getName() - ); - - public MiddleTableCollectionMetadataGenerator( - EnversMetadataBuildingContext metadataBuildingContext, - BasicMetadataGenerator basicMetadataGenerator, - ValueMetadataGenerator valueMetadataGenerator) { - super( metadataBuildingContext, basicMetadataGenerator, valueMetadataGenerator ); - } - - @Override - public void addCollection(CollectionMetadataContext context) { - LOG.debugf( - "Adding audit mapping for property %s.%s: collection with a join table", - context.getReferencingEntityName(), - context.getPropertyName() - ); - - // Generating the name of the middle table - String auditMiddleTableName; - String auditMiddleEntityName; - if ( !StringTools.isEmpty( context.getPropertyAuditingData().getJoinTable().getName() ) ) { - auditMiddleTableName = context.getPropertyAuditingData().getJoinTable().getName(); - auditMiddleEntityName = context.getPropertyAuditingData().getJoinTable().getName(); - } - else { - final Configuration configuration = getMetadataBuildingContext().getConfiguration(); - final String middleTableName = getMiddleTableName( context ); - auditMiddleTableName = configuration.getAuditTableName( null, middleTableName ); - auditMiddleEntityName = configuration.getAuditEntityName( middleTableName ); - } - - LOG.debugf( "Using join table name: %s", auditMiddleTableName ); - - // Generating the XML mapping for the middle entity, only if the relation isn't inverse. - // If the relation is inverse, will be later checked by comparing middleEntityXml with null. - RootPersistentEntity middleEntity = null; - if ( !context.getCollection().isInverse() ) { - final AuditEntityNameRegister auditEntityNameRegistry = getMetadataBuildingContext().getAuditEntityNameRegistry(); - - // Generating a unique middle entity name - auditMiddleEntityName = auditEntityNameRegistry.createUnique( auditMiddleEntityName ); - - // Registering the generated name - auditEntityNameRegistry.register( auditMiddleEntityName ); - - middleEntity = createMiddleEntity( context, auditMiddleTableName, auditMiddleEntityName ); - } - - // ****** - // Generating the mapping for the referencing entity (it must be an entity). - // ****** - // Getting the id-mapping data of the referencing entity (the entity that "owns" this collection). - final EntityConfiguration referencingEntityConfiguration = context.getReferencingEntityConfiguration(); - final IdMappingData referencingIdMapping = referencingEntityConfiguration.getIdMappingData(); - - // Only valid for an inverse relation; null otherwise. - String mappedBy; - - // The referencing prefix is always for a related entity. So it has always the "_" at the end added. - String referencingPrefixRelated; - String referencedPrefix; - - if ( context.getCollection().isInverse() ) { - // If the relation is inverse, then referencedEntityName is not null. - mappedBy = CollectionMappedByResolver.resolveMappedBy( - context.getCollection().getCollectionTable(), - getReferencedEntityMapping( context ), - context.getPropertyAuditingData() - ); - referencingPrefixRelated = mappedBy + "_"; - referencedPrefix = StringTools.getLastComponent( context.getReferencedEntityName() ); - } - else { - - mappedBy = null; - referencingPrefixRelated = StringTools.getLastComponent( context.getReferencingEntityName() ) + "_"; - referencedPrefix = context.getReferencedEntityName() == null ? "element" : context.getPropertyName(); - } - - // Storing the id data of the referencing entity: original mapper, prefixed mapper and entity name. - final MiddleIdData referencingIdData = createMiddleIdData( - referencingIdMapping, - referencingPrefixRelated, - context.getReferencingEntityName() - ); - - // Creating a query generator builder, to which additional id data will be added, in case this collection - // references some entities (either from the element or index). At the end, this will be used to build - // a query generator to read the raw data collection from the middle table. - final String orderBy = getOrderBy( context.getCollection() ); - final QueryGeneratorBuilder queryGeneratorBuilder = new QueryGeneratorBuilder( - getMetadataBuildingContext().getConfiguration(), - referencingIdData, - auditMiddleEntityName, - isRevisionTypeInId( context ), - getOrderByCollectionRole( context.getCollection(), orderBy ) - ); - - // Adding the XML mapping for the referencing entity, if the relation isn't inverse. - if ( middleEntity != null ) { - // Adding related-entity (in this case: the referencing's entity id) id mapping to the xml. - addAttributesToEntity( - middleEntity, - getPrefixedIdAttributes( - referencingPrefixRelated, - ColumnNameIterator.from( context.getCollection().getKey().getSelectables().iterator() ), - referencingIdMapping - ) - ); - } - - // Generating the element mapping. - final MiddleComponentData elementComponentData = addValueToMiddleTable( - context, - context.getCollection().getElement(), - middleEntity, - queryGeneratorBuilder, - referencedPrefix, - context.getPropertyAuditingData().getJoinTable(), - !isLobMapElementType( context ) - ); - - // Generating the index mapping, if an index exists. - final MiddleComponentData indexComponentData = addIndex( context, middleEntity, queryGeneratorBuilder ); - - // Building the query generator. - final RelationQueryGenerator queryGenerator = queryGeneratorBuilder.build( elementComponentData, indexComponentData ); - - // Creating common data - final CommonCollectionMapperData commonCollectionMapperData = createCommonCollectionMapperData( - context, - auditMiddleEntityName, - referencingIdData, - queryGenerator - ); - - // Checking the type of the collection and adding an appropriate mapper. - addMapper( context, commonCollectionMapperData, elementComponentData, indexComponentData ); - - // Storing information about this relation. - storeMiddleEntityRelationInformation( context, mappedBy, referencingIdData, referencedPrefix, auditMiddleEntityName ); - } - - private String getMiddleTableName(CollectionMetadataContext context) { - // We check how Hibernate maps the collection. - final Collection collection = context.getCollection(); - if ( collection.getElement() instanceof OneToMany && !collection.isInverse() ) { - final String entityName = context.getReferencingEntityName(); - // This must be a @JoinColumn+@OneToMany mapping. Generating the table name, as Hibernate doesn't use a - // middle table for mapping this relation. - return StringTools.getLastComponent( entityName ) - + "_" - + StringTools.getLastComponent( MappingTools.getReferencedEntityName( collection.getElement() ) - ); - } - // Hibernate uses a middle table for mapping this relation, so we get its name directly. - CollectionAuditTable collectionAuditTable = context.getPropertyAuditingData().getCollectionAuditTable(); - if ( collectionAuditTable != null ) { - return collectionAuditTable.name(); - } - return collection.getCollectionTable().getName(); - } - - private RootPersistentEntity createMiddleEntity(CollectionMetadataContext context, String tableName, String entityName) { - final AuditTableData auditTableData = new AuditTableData( - entityName, - tableName, - resolveSchema( context ), - resolveCatalog( context ) - ); - - final RootPersistentEntity entity = new RootPersistentEntity( auditTableData, null ); - - // When collection element uses a single table discriminator pattern; if any type of WHERE - // conditions are present in the ORM mapping; they should be ignored by Envers; however, - // otherwise all other use cases should be applied. - if ( !context.isOneToManySingleTableSubclass() ) { - entity.setWhereClause( context.getCollection().getWhere() ); - } - - CompositeIdentifier id = new CompositeIdentifier( getMetadataBuildingContext() ); - entity.setIdentifier( id ); - - addRevisionInfoRelationToIdentifier( id ); - - final boolean revisionTypeInId = isRevisionTypeInId( context ); - addRevisionTypeToAttributeContainer( revisionTypeInId ? id : entity, revisionTypeInId ); - addAuditStrategyAdditionalColumnsToEntity( entity ); - - context.getEntityMappingData().addAdditionalMapping( entity ); - return entity; - } - - private String resolveSchema(CollectionMetadataContext context) { - final CollectionAuditTable collectionAuditTable = context.getPropertyAuditingData().getCollectionAuditTable(); - if ( collectionAuditTable != null && !StringTools.isEmpty( collectionAuditTable.schema() ) ) { - return collectionAuditTable.schema(); - } - - final AuditJoinTableData joinTable = context.getPropertyAuditingData().getJoinTable(); - return getSchemaName( joinTable.getSchema(), context.getCollection().getCollectionTable() ); - } - - private String resolveCatalog(CollectionMetadataContext context) { - final CollectionAuditTable collectionAuditTable = context.getPropertyAuditingData().getCollectionAuditTable(); - if ( collectionAuditTable != null && !StringTools.isEmpty( collectionAuditTable.catalog() ) ) { - return collectionAuditTable.catalog(); - } - final AuditJoinTableData joinTable = context.getPropertyAuditingData().getJoinTable(); - return getCatalogName( joinTable.getCatalog(), context.getCollection().getCollectionTable() ); - } - - private boolean isRevisionTypeInId(CollectionMetadataContext context) { - return isEmbeddableElementType( context ) || isLobMapElementType( context ); - } - - private PersistentClass getReferencedEntityMapping(CollectionMetadataContext context) { - return getMetadataBuildingContext().getMetadataCollector().getEntityBinding( context.getReferencedEntityName() ); - } - - private void storeMiddleEntityRelationInformation( - CollectionMetadataContext context, - String mappedBy, - MiddleIdData referencingIdData, - String referencedPrefix, - String auditMiddleEntityName) { - // Only if this is a relation (when there is a referenced entity or a component). - if ( context.getReferencedEntityName() != null ) { - final IdMappingData referencedIdMapping = getReferencedIdMappingData( - context.getReferencingEntityName(), - context.getReferencedEntityName(), - context.getPropertyAuditingData(), - true - ); - final MiddleIdData referencedIdData = createMiddleIdData( - referencedIdMapping, - referencedPrefix + "_", - context.getReferencedEntityName() - ); - if ( context.getCollection().isInverse() ) { - context.getReferencingEntityConfiguration().addToManyMiddleNotOwningRelation( - context.getPropertyName(), - mappedBy, - context.getReferencedEntityName(), - referencingIdData, - referencedIdData, - auditMiddleEntityName - ); - } - else { - context.getReferencingEntityConfiguration().addToManyMiddleRelation( - context.getPropertyName(), - context.getReferencedEntityName(), - referencingIdData, - referencedIdData, - auditMiddleEntityName - ); - } - } - else { - context.getReferencingEntityConfiguration().addToManyComponent( - context.getPropertyName(), - auditMiddleEntityName, - referencingIdData - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/PersistentEntityInstantiator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/PersistentEntityInstantiator.java deleted file mode 100644 index 47e6dd0313f7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/PersistentEntityInstantiator.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.lang.reflect.Constructor; -import java.util.Objects; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.Column; -import org.hibernate.envers.boot.model.DiscriminatorPersistentEntity; -import org.hibernate.envers.boot.model.DiscriminatorType; -import org.hibernate.envers.boot.model.JoinedSubclassPersistentEntity; -import org.hibernate.envers.boot.model.Key; -import org.hibernate.envers.boot.model.PersistentEntity; -import org.hibernate.envers.boot.model.RootPersistentEntity; -import org.hibernate.envers.boot.model.SubclassPersistentEntity; -import org.hibernate.envers.boot.model.UnionSubclassPersistentEntity; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.PrimaryKey; - -/** - * Utility class meant to help facilitate the instantiation of {@link PersistentEntity} implementations. - * - * @author Chris Cranford - */ -public class PersistentEntityInstantiator { - - private final Configuration configuration; - - public PersistentEntityInstantiator(Configuration configuration) { - this.configuration = configuration; - } - - public PersistentEntity instantiate(PersistentClass persistentClass, AuditTableData auditTableData) { - Objects.requireNonNull( persistentClass ); - Objects.requireNonNull( auditTableData ); - - final InheritanceType inheritanceType = InheritanceType.get( persistentClass ); - switch ( inheritanceType ) { - case NONE: - return root( persistentClass, auditTableData ); - case SINGLE: - return discriminator( persistentClass, auditTableData ); - case JOINED: - return joined( persistentClass, auditTableData ); - case TABLE_PER_CLASS: - return union( persistentClass, auditTableData ); - default: - throw new EnversMappingException( "Unknown inheritance type: " + inheritanceType.name() ); - } - } - - private PersistentEntity root(PersistentClass persistentClass, AuditTableData auditTableData) { - RootPersistentEntity entity = instantiate( RootPersistentEntity.class, persistentClass, auditTableData ); - entity.setDiscriminatorValue( persistentClass.getDiscriminatorValue() ); - - if ( persistentClass.getDiscriminator() != null ) { - final DiscriminatorType discriminator = new DiscriminatorType( persistentClass.getDiscriminator() ); - entity.setDiscriminator( discriminator ); - } - - return entity; - } - - private SubclassPersistentEntity discriminator(PersistentClass persistentClass, AuditTableData auditTableData) { - DiscriminatorPersistentEntity entity = instantiate( DiscriminatorPersistentEntity.class, persistentClass, auditTableData ); - entity.setExtends( getParentAuditEntityName( getParentEntityName( persistentClass ) ) ); - entity.setDiscriminatorValue( persistentClass.getDiscriminatorValue() ); - - return entity; - } - - private SubclassPersistentEntity joined(PersistentClass persistentClass, AuditTableData auditTableData) { - JoinedSubclassPersistentEntity entity = instantiate( JoinedSubclassPersistentEntity.class, persistentClass, auditTableData ); - entity.setExtends( getParentAuditEntityName( getParentEntityName( persistentClass ) ) ); - entity.setDiscriminatorValue( persistentClass.getDiscriminatorValue() ); - - final Key key = new Key(); - entity.setKey( key ); - - // Adding the "key" element with all id columns - final PrimaryKey primaryKey = persistentClass.getTable().getPrimaryKey(); - primaryKey.getColumns().forEach( column -> key.addColumn( Column.from( column ) ) ); - - // the revision number column, read the revision info relation mapping - configuration.getRevisionInfo().getRevisionInfoRelationMapping().getColumns().forEach( key::addColumn ); - - return entity; - } - - private SubclassPersistentEntity union(PersistentClass persistentClass, AuditTableData auditTableData) { - UnionSubclassPersistentEntity entity = instantiate( UnionSubclassPersistentEntity.class, persistentClass, auditTableData ); - entity.setExtends( getParentAuditEntityName( getParentEntityName( persistentClass ) ) ); - - return entity; - } - - private T instantiate(Class type, PersistentClass persistentClass, AuditTableData auditTableData) { - try { - Constructor constructor = type.getDeclaredConstructor( AuditTableData.class, PersistentClass.class ); - return constructor.newInstance( auditTableData, persistentClass ); - } - catch (Exception e) { - throw new EnversMappingException( "Cannot create entity of type " + type.getName() ); - } - } - - private String getParentEntityName(PersistentClass persistentClass) { - return persistentClass.getSuperclass().getEntityName(); - } - - private String getParentAuditEntityName(String parentEntityName) { - return configuration.getAuditEntityName( parentEntityName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/QueryGeneratorBuilder.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/QueryGeneratorBuilder.java deleted file mode 100644 index 6d09ffe5a513..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/QueryGeneratorBuilder.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.entities.mapper.relation.query.OneEntityQueryGenerator; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.entities.mapper.relation.query.ThreeEntityQueryGenerator; -import org.hibernate.envers.internal.entities.mapper.relation.query.TwoEntityOneAuditedQueryGenerator; -import org.hibernate.envers.internal.entities.mapper.relation.query.TwoEntityQueryGenerator; - -/** - * Builds query generators, for reading collection middle tables, along with any related entities. - * The related entities information can be added gradually, and when complete, the query generator can be built. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class QueryGeneratorBuilder { - private final Configuration configuration; - private final MiddleIdData referencingIdData; - private final String auditMiddleEntityName; - private final List idDatas; - private final boolean revisionTypeInId; - private final String orderByCollectionRole; - - QueryGeneratorBuilder( - Configuration configuration, - MiddleIdData referencingIdData, - String auditMiddleEntityName, - boolean revisionTypeInId, - String orderByCollectionRole) { - this.configuration = configuration; - this.referencingIdData = referencingIdData; - this.auditMiddleEntityName = auditMiddleEntityName; - this.orderByCollectionRole = orderByCollectionRole; - this.revisionTypeInId = revisionTypeInId; - - idDatas = new ArrayList<>(); - } - - void addRelation(MiddleIdData idData) { - idDatas.add( idData ); - } - - RelationQueryGenerator build(MiddleComponentData... componentDatas) { - if ( idDatas.size() == 0 ) { - return new OneEntityQueryGenerator( - configuration, - auditMiddleEntityName, - referencingIdData, - revisionTypeInId, - componentDatas - ); - } - else if ( idDatas.size() == 1 ) { - if ( idDatas.get( 0 ).isAudited() ) { - return new TwoEntityQueryGenerator( - configuration, - auditMiddleEntityName, - referencingIdData, - idDatas.get( 0 ), - revisionTypeInId, - orderByCollectionRole, - componentDatas - ); - } - else { - return new TwoEntityOneAuditedQueryGenerator( - configuration, - auditMiddleEntityName, - referencingIdData, - idDatas.get( 0 ), - revisionTypeInId, - orderByCollectionRole, - componentDatas - ); - } - } - else if ( idDatas.size() == 2 ) { - // All entities must be audited. - if ( !idDatas.get( 0 ).isAudited() || !idDatas.get( 1 ).isAudited() ) { - throw new EnversMappingException( - "Ternary relations using @Audited(targetAuditMode = NOT_AUDITED) are not supported." - ); - } - return new ThreeEntityQueryGenerator( - configuration, - auditMiddleEntityName, - referencingIdData, - idDatas.get( 0 ), - idDatas.get( 1 ), - revisionTypeInId, - orderByCollectionRole, - componentDatas - ); - } - else { - throw new IllegalStateException( "Illegal number of related entities." ); - } - } - - /** - * @return Current index of data in the array, which will be the element of a list, returned when executing a query - * generated by the built query generator. - */ - int getCurrentIndex() { - return idDatas.size(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/RevisionInfoHelper.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/RevisionInfoHelper.java deleted file mode 100644 index 6588c2294f34..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/RevisionInfoHelper.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.envers.boot.model.Column; -import org.hibernate.envers.boot.model.ColumnContainer; -import org.hibernate.envers.internal.tools.StringTools; - -/** - * @author Chris Cranford - */ -public class RevisionInfoHelper { - - public static void addOrModifyColumn(ColumnContainer attribute, String name) { - if ( attribute.getColumns().isEmpty() ) { - attribute.addColumn( new Column( name ) ); - } - else { - if ( !StringTools.isEmpty( name ) ) { - final Column column = attribute.getColumns().get( 0 ); - column.setName( name ); - } - } - } - - private RevisionInfoHelper() { - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ToOneRelationMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ToOneRelationMetadataGenerator.java deleted file mode 100644 index 8f61477db2f4..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ToOneRelationMetadataGenerator.java +++ /dev/null @@ -1,200 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.RelationTargetNotFoundAction; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.CompositeMapperBuilder; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.OneToOneNotOwningMapper; -import org.hibernate.envers.internal.entities.mapper.relation.OneToOnePrimaryKeyJoinColumnMapper; -import org.hibernate.envers.internal.entities.mapper.relation.ToOneIdMapper; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.mapping.OneToOne; -import org.hibernate.mapping.ToOne; -import org.hibernate.mapping.Value; - -/** - * Generates metadata for to-one relations (reference-valued properties). - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public final class ToOneRelationMetadataGenerator extends AbstractMetadataGenerator { - - public ToOneRelationMetadataGenerator(EnversMetadataBuildingContext metadataBuildingContext) { - super( metadataBuildingContext ); - } - - public void addToOne( - AttributeContainer mapping, - PropertyAuditingData propertyAuditingData, - Value value, - CompositeMapperBuilder mapper, - String entityName, - boolean insertable) { - final String referencedEntityName = ( (ToOne) value ).getReferencedEntityName(); - - final IdMappingData idMapping = getReferencedIdMappingData( - entityName, - referencedEntityName, - propertyAuditingData, - true - ); - - final String lastPropertyPrefix = MappingTools.createToOneRelationPrefix( propertyAuditingData.getName() ); - - // Generating the id mapper for the relation - final IdMapper relMapper = idMapping.getIdMapper().prefixMappedProperties( lastPropertyPrefix ); - - // Storing information about this relation - getAuditedEntityConfiguration( entityName ).addToOneRelation( - propertyAuditingData.getName(), - referencedEntityName, - relMapper, - insertable, - shouldIgnoreNotFoundRelation( propertyAuditingData, value ) - ); - - // If the property isn't insertable, checking if this is not a "fake" bidirectional many-to-one relationship, - // that is, when the one side owns the relation (and is a collection), and the many side is non insertable. - // When that's the case and the user specified to store this relation without a middle table (using - // @AuditMappedBy), we have to make the property insertable for the purposes of Envers. In case of changes to - // the entity that didn't involve the relation, it's value will then be stored properly. In case of changes - // to the entity that did involve the relation, it's the responsibility of the collection side to store the - // proper data. - boolean nonInsertableFake; - if ( !insertable && propertyAuditingData.isForceInsertable() ) { - nonInsertableFake = true; - insertable = true; - } - else { - nonInsertableFake = false; - } - - // Adding an element to the mapping corresponding to the references entity id's - idMapping.getRelation() - .getAttributesPrefixed( lastPropertyPrefix, value.getSelectables().iterator(), false, insertable ) - .forEach( mapping::addAttribute ); - - boolean lazy = ( (ToOne) value ).isLazy(); - - // Adding mapper for the id - final PropertyData propertyData = propertyAuditingData.resolvePropertyData(); - mapper.addComposite( - propertyData, - new ToOneIdMapper( relMapper, propertyData, referencedEntityName, nonInsertableFake, lazy ) - ); - } - - public void addOneToOneNotOwning( - PropertyAuditingData propertyAuditingData, - Value value, - CompositeMapperBuilder mapper, - String entityName) { - final OneToOne propertyValue = (OneToOne) value; - final String owningReferencePropertyName = propertyValue.getReferencedPropertyName(); - - final EntityConfiguration configuration = getAuditedEntityConfiguration( entityName ); - if ( configuration == null ) { - throw new EnversMappingException( "An audited relation to a non-audited entity " + entityName + "!" ); - } - - final IdMappingData ownedIdMapping = configuration.getIdMappingData(); - - if ( ownedIdMapping == null ) { - throw new EnversMappingException( "An audited relation to a non-audited entity " + entityName + "!" ); - } - - final String lastPropertyPrefix = MappingTools.createToOneRelationPrefix( owningReferencePropertyName ); - final String referencedEntityName = propertyValue.getReferencedEntityName(); - - // Generating the id mapper for the relation - final IdMapper ownedIdMapper = ownedIdMapping.getIdMapper().prefixMappedProperties( lastPropertyPrefix ); - - // Storing information about this relation - getAuditedEntityConfiguration( entityName ).addToOneNotOwningRelation( - propertyAuditingData.getName(), - owningReferencePropertyName, - referencedEntityName, - ownedIdMapper, - MappingTools.ignoreNotFound( value ) - ); - - // Adding mapper for the id - final PropertyData propertyData = propertyAuditingData.resolvePropertyData(); - mapper.addComposite( - propertyData, - new OneToOneNotOwningMapper( - entityName, - referencedEntityName, - owningReferencePropertyName, - propertyData, - getMetadataBuildingContext().getServiceRegistry() - ) - ); - } - - void addOneToOnePrimaryKeyJoinColumn( - PropertyAuditingData propertyAuditingData, - Value value, - CompositeMapperBuilder mapper, - String entityName, - boolean insertable) { - final String referencedEntityName = ( (ToOne) value ).getReferencedEntityName(); - - final IdMappingData idMapping = getReferencedIdMappingData( - entityName, - referencedEntityName, - propertyAuditingData, - true - ); - - final String lastPropertyPrefix = MappingTools.createToOneRelationPrefix( propertyAuditingData.getName() ); - - // Generating the id mapper for the relation - final IdMapper relMapper = idMapping.getIdMapper().prefixMappedProperties( lastPropertyPrefix ); - - // Storing information about this relation - getAuditedEntityConfiguration( entityName ).addToOneRelation( - propertyAuditingData.getName(), - referencedEntityName, - relMapper, - insertable, - MappingTools.ignoreNotFound( value ) - ); - - // Adding mapper for the id - final PropertyData propertyData = propertyAuditingData.resolvePropertyData(); - mapper.addComposite( - propertyData, - new OneToOnePrimaryKeyJoinColumnMapper( - entityName, - referencedEntityName, - propertyData, - getMetadataBuildingContext().getServiceRegistry() - ) - ); - } - - private boolean shouldIgnoreNotFoundRelation(PropertyAuditingData propertyAuditingData, Value value) { - final RelationTargetNotFoundAction action = propertyAuditingData.getRelationTargetNotFoundAction(); - if ( getMetadataBuildingContext().getConfiguration().isGlobalLegacyRelationTargetNotFound() ) { - // When legacy is enabled, the user must explicitly specify IGNORE for it to be ignored. - return MappingTools.ignoreNotFound( value ) || RelationTargetNotFoundAction.IGNORE.equals( action ); - } - else { - // When non-legacy is enabled, the situation is ignored when not ERROR - return !RelationTargetNotFoundAction.ERROR.equals( action ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ValueMetadataGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ValueMetadataGenerator.java deleted file mode 100644 index 476957ec4fb6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/ValueMetadataGenerator.java +++ /dev/null @@ -1,283 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata; - -import java.util.Locale; - -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.model.AttributeContainer; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.configuration.internal.metadata.reader.PropertyAuditingData; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.mapper.CompositeMapperBuilder; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.OneToOne; -import org.hibernate.mapping.Value; -import org.hibernate.property.access.spi.PropertyAccessStrategy; -import org.hibernate.type.BasicType; -import org.hibernate.type.CollectionType; -import org.hibernate.type.ComponentType; -import org.hibernate.type.ManyToOneType; -import org.hibernate.type.OneToOneType; -import org.hibernate.type.Type; - -/** - * @author Chris Cranford - */ -public class ValueMetadataGenerator extends AbstractMetadataGenerator { - - private final BasicMetadataGenerator basicMetadataGenerator; - private final ComponentMetadataGenerator componentMetadataGenerator; - private final ToOneRelationMetadataGenerator toOneRelationMetadataGenerator; - private final JoinColumnCollectionMetadataGenerator joinedColumnCollectionGenerator; - private final MiddleTableCollectionMetadataGenerator middleTableCollectionGenerator; - - public ValueMetadataGenerator( - EnversMetadataBuildingContext metadataBuildingContext, - BasicMetadataGenerator basicMetadataGenerator) { - super( metadataBuildingContext ); - this.basicMetadataGenerator = basicMetadataGenerator; - - // case special value-based generators - this.componentMetadataGenerator = new ComponentMetadataGenerator( metadataBuildingContext, this ); - this.toOneRelationMetadataGenerator = new ToOneRelationMetadataGenerator( metadataBuildingContext ); - this.joinedColumnCollectionGenerator = new JoinColumnCollectionMetadataGenerator( metadataBuildingContext, basicMetadataGenerator, this ); - this.middleTableCollectionGenerator = new MiddleTableCollectionMetadataGenerator( metadataBuildingContext, basicMetadataGenerator, this ); - } - - public void addValue( - AttributeContainer attributeContainer, - Value value, - PropertyAccessStrategy propertyAccessStrategy, - CompositeMapperBuilder currentMapper, - String entityName, - EntityMappingData mappingData, - PropertyAuditingData propertyAuditingData, - boolean insertable, - boolean firstPass, - boolean processModifiedFlags) { - if ( firstPass ) { - addValueInFirstPass( - attributeContainer, - value, - propertyAccessStrategy, - currentMapper, - entityName, - mappingData, - propertyAuditingData, - insertable, - processModifiedFlags - ); - } - else { - addValueInSecondPass( - attributeContainer, - value, - propertyAccessStrategy, - currentMapper, - entityName, - mappingData, - propertyAuditingData, - insertable, - processModifiedFlags - ); - } - } - - private void addValueInFirstPass( - AttributeContainer attributeContainer, - Value value, - PropertyAccessStrategy propertyAccessStrategy, - CompositeMapperBuilder currentMapper, - String entityName, - EntityMappingData mappingData, - PropertyAuditingData propertyAuditingData, - boolean insertable, - boolean processModifiedFlag) { - final Type type = value.getType(); - propertyAuditingData.setPropertyAccessStrategy( propertyAccessStrategy ); - - if ( type instanceof BasicType ) { - basicMetadataGenerator.addBasic( - attributeContainer, - propertyAuditingData, - value, - currentMapper, - insertable, - false - ); - } - else if ( type instanceof ComponentType) { - componentMetadataGenerator.addComponent( - attributeContainer, - propertyAuditingData, - value, - currentMapper, - entityName, - mappingData, - true - ); - } - else { - if ( !processedInSecondPass( type ) ) { - // If we got here in the first pass, it means the basic mapper didn't map it, and none of the - // above branches either. - throwUnsupportedTypeException( type, entityName, propertyAuditingData.getName() ); - } - return; - } - - if ( isModifiedFlagsAllowed( processModifiedFlag, propertyAuditingData ) ) { - addModifiedFlags( attributeContainer, propertyAuditingData, value ); - } - } - - private void addValueInSecondPass( - AttributeContainer attributeContainer, - Value value, - PropertyAccessStrategy propertyAccessStrategy, - CompositeMapperBuilder currentMapper, - String entityName, - EntityMappingData mappingData, - PropertyAuditingData propertyAuditingData, - boolean insertable, - boolean processModifiedFlag) { - final Type type = value.getType(); - - if ( type instanceof ComponentType ) { - componentMetadataGenerator.addComponent( - attributeContainer, - propertyAuditingData, - value, - currentMapper, - entityName, - mappingData, - false - ); - // mod flag field has been already generated in first pass - return; - } - else if ( type instanceof ManyToOneType ) { - toOneRelationMetadataGenerator.addToOne( - attributeContainer, - propertyAuditingData, - value, - currentMapper, - entityName, - insertable - ); - } - else if ( type instanceof OneToOneType ) { - final OneToOne oneToOne = (OneToOne) value; - if ( oneToOne.getReferencedPropertyName() != null ) { - toOneRelationMetadataGenerator.addOneToOneNotOwning( - propertyAuditingData, - value, - currentMapper, - entityName - ); - } - else { - // @OneToOne relation marked with @PrimaryKeyJoinColumn - toOneRelationMetadataGenerator.addOneToOnePrimaryKeyJoinColumn( - propertyAuditingData, - value, - currentMapper, - entityName, - insertable - ); - } - } - else if ( type instanceof CollectionType ) { - - final EntityConfiguration referencingEntityConfiguration = getAuditedEntityConfiguration( entityName ); - if ( referencingEntityConfiguration == null ) { - throw new EnversMappingException( - String.format( - Locale.ENGLISH, - "Unable to read auditing configuration for %s!", - entityName - ) - ); - } - - final Collection collection = (Collection) value; - String referencedEntityName = MappingTools.getReferencedEntityName( collection.getElement() ); - - final CollectionMetadataContext context = new CollectionMetadataContext() { - @Override - public EntityMappingData getEntityMappingData() { - return mappingData; - } - - @Override - public Collection getCollection() { - return collection; - } - - @Override - public CompositeMapperBuilder getMapperBuilder() { - return currentMapper; - } - - @Override - public String getReferencedEntityName() { - return referencedEntityName; - } - - @Override - public String getReferencingEntityName() { - return entityName; - } - - @Override - public EntityConfiguration getReferencingEntityConfiguration() { - return referencingEntityConfiguration; - } - - @Override - public PropertyAuditingData getPropertyAuditingData() { - return propertyAuditingData; - } - }; - - if ( context.isMiddleTableCollection() ) { - middleTableCollectionGenerator.addCollection( context ); - } - else { - joinedColumnCollectionGenerator.addCollection(context ); - } - } - else { - return; - } - - if ( isModifiedFlagsAllowed( processModifiedFlag, propertyAuditingData ) ) { - addModifiedFlags( attributeContainer, propertyAuditingData, value ); - } - } - - private boolean processedInSecondPass(Type type) { - return type instanceof ComponentType || type instanceof ManyToOneType || - type instanceof OneToOneType || type instanceof CollectionType; - } - - private boolean isModifiedFlagsAllowed(boolean processModifiedFlags, PropertyAuditingData propertyAuditingData) { - return processModifiedFlags && propertyAuditingData.isUsingModifiedFlag(); - } - - private void addModifiedFlags(AttributeContainer attributeContainer, PropertyAuditingData propertyAuditingData, Value value) { - getMetadataBuildingContext().getConfiguration() - .getModifiedColumnNamingStrategy() - .addModifiedColumns( - getMetadataBuildingContext().getConfiguration(), - value, - attributeContainer, - propertyAuditingData - ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AnnotationsMetadataReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AnnotationsMetadataReader.java deleted file mode 100644 index 1885979cabb0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AnnotationsMetadataReader.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.lang.annotation.Annotation; - -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.SecondaryAuditTable; -import org.hibernate.envers.SecondaryAuditTables; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.models.spi.ClassDetails; - -/** - * A helper class to read versioning meta-data from annotations on a persistent class. - * - * @author Adam Warski (adam at warski dot org) - * @author Sebastian Komander - * @author Chris Cranford - */ -public final class AnnotationsMetadataReader { - private final EnversMetadataBuildingContext metadataBuildingContext; - - public AnnotationsMetadataReader(EnversMetadataBuildingContext metadataBuildingContext) { - this.metadataBuildingContext = metadataBuildingContext; - } - - private RelationTargetAuditMode getDefaultAudited(ClassDetails classDetails) { - final Audited defaultAudited = classDetails.getDirectAnnotationUsage( Audited.class ); - - if ( defaultAudited != null ) { - return defaultAudited.targetAuditMode(); - } - else { - return null; - } - } - - private void addAuditTable(ClassAuditingData auditData, ClassDetails classDetails) { - final AuditTable auditTable = classDetails.getDirectAnnotationUsage( AuditTable.class ); - if ( auditTable != null ) { - auditData.setAuditTable( auditTable ); - } - else { - auditData.setAuditTable( getDefaultAuditTable() ); - } - } - - private void addAuditSecondaryTables(ClassAuditingData auditData, ClassDetails classDetails) { - // Getting information on secondary tables - final SecondaryAuditTable secondaryVersionsTable1 = classDetails.getDirectAnnotationUsage( SecondaryAuditTable.class ); - if ( secondaryVersionsTable1 != null ) { - auditData.getSecondaryTableDictionary().put( - secondaryVersionsTable1.secondaryTableName(), - secondaryVersionsTable1.secondaryAuditTableName() - ); - } - - final SecondaryAuditTables secondaryAuditTables = classDetails.getDirectAnnotationUsage( SecondaryAuditTables.class ); - if ( secondaryAuditTables != null ) { - for ( SecondaryAuditTable secondaryAuditTable2 : secondaryAuditTables.value() ) { - auditData.getSecondaryTableDictionary().put( - secondaryAuditTable2.secondaryTableName(), - secondaryAuditTable2.secondaryAuditTableName() - ); - } - } - } - - public ClassAuditingData getAuditData(PersistentClass persistentClass) { - final ClassAuditingData auditData = new ClassAuditingData( persistentClass ); - final ClassDetails classDetails = metadataBuildingContext.getClassDetailsRegistry().resolveClassDetails( - persistentClass.getClassName() - ); - - final RelationTargetAuditMode auditMode = getDefaultAudited( classDetails ); - if ( auditMode != null ) { - auditData.setDefaultAudited( true ); - } - - new AuditedPropertiesReader( - metadataBuildingContext, - PersistentPropertiesSource.forClass( persistentClass, classDetails ), - auditData - ).read(); - - addAuditTable( auditData, classDetails ); - addAuditSecondaryTables( auditData, classDetails ); - - return auditData; - } - - private final AuditTable defaultAuditTable = new AuditTable() { - public String value() { - return ""; - } - - public String schema() { - return ""; - } - - public String catalog() { - return ""; - } - - public Class annotationType() { - return this.getClass(); - } - }; - - private AuditTable getDefaultAuditTable() { - return defaultAuditTable; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditJoinTableData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditJoinTableData.java deleted file mode 100644 index bec639134d9b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditJoinTableData.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.configuration.internal.metadata.ColumnNameIterator; - -import jakarta.persistence.JoinColumn; - -/** - * A data class that represents an {@link AuditJoinTable} annotation. - * - * @author Chris Cranford - */ -public class AuditJoinTableData { - - private final String name; - private final String catalog; - private final String schema; - private final List inverseJoinColumnNames = new ArrayList<>( 0 ); - - /** - * Creates a data descriptor that uses default values - */ - public AuditJoinTableData() { - this.name = ""; - this.catalog = ""; - this.schema = ""; - } - - public AuditJoinTableData(AuditJoinTable auditJoinTable) { - this.name = auditJoinTable.name(); - this.catalog = auditJoinTable.catalog(); - this.schema = auditJoinTable.schema(); - - for ( JoinColumn joinColumn : auditJoinTable.inverseJoinColumns() ) { - inverseJoinColumnNames.add( joinColumn.name() ); - } - } - - public String getName() { - return name; - } - - public String getCatalog() { - return catalog; - } - - public String getSchema() { - return schema; - } - - public Collection getInverseJoinColumnNames() { - return Collections.unmodifiableCollection( inverseJoinColumnNames ); - } - - public ColumnNameIterator getInverseJoinColumnNamesIterator() { - final Iterator iterator = inverseJoinColumnNames.iterator(); - return new ColumnNameIterator() { - @Override - public boolean hasNext() { - return iterator.hasNext(); - } - - @Override - public String next() { - return iterator.next(); - } - }; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditOverrideData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditOverrideData.java deleted file mode 100644 index f77acf5c5041..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditOverrideData.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import org.hibernate.envers.AuditOverride; - -/** - * A boot-time descriptor that represents a {@link AuditOverride} annotation. - * - * @author Chris Cranford - */ -public class AuditOverrideData { - - private final String name; - private final boolean audited; - private final Class forClass; - private final AuditJoinTableData auditJoinTableData; - - public AuditOverrideData(AuditOverride auditOverride) { - this.name = auditOverride.name(); - this.audited = auditOverride.isAudited(); - this.forClass = auditOverride.forClass(); - this.auditJoinTableData = new AuditJoinTableData( auditOverride.auditJoinTable() ); - } - - public String getName() { - return name; - } - - public boolean isAudited() { - return audited; - } - - public Class getForClass() { - return forClass; - } - - public AuditJoinTableData getAuditJoinTableData() { - return auditJoinTableData; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditedPropertiesHolder.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditedPropertiesHolder.java deleted file mode 100644 index c596e0b3057a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditedPropertiesHolder.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.util.List; - -/** - * Implementations hold other audited properties. - * - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - * @author Chris Cranford - */ -public interface AuditedPropertiesHolder { - /** - * Add an audited property. - * - * @param propertyName Name of the audited property. - * @param auditingData Data for the audited property. - */ - void addPropertyAuditingData(String propertyName, PropertyAuditingData auditingData); - - /** - * @param propertyName Name of a property. - * - * @return Auditing data for the property. - */ - PropertyAuditingData getPropertyAuditingData(String propertyName); - - /** - * @return true if the holder contains any audited property - */ - boolean isEmpty(); - - /** - * @return true if the holder contains the given audited property - */ - boolean contains(String propertyName); - - /** - * @return the holder's property audit overrides - */ - List getAuditingOverrides(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditedPropertiesReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditedPropertiesReader.java deleted file mode 100644 index ad1edc627086..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/AuditedPropertiesReader.java +++ /dev/null @@ -1,952 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.lang.annotation.Annotation; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; - -import org.hibernate.HibernateException; -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; -import org.hibernate.envers.CollectionAuditTable; -import org.hibernate.envers.NotAudited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.RelationTargetNotFoundAction; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.internal.ModifiedColumnNameResolver; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.Property; -import org.hibernate.mapping.Value; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.FieldDetails; -import org.hibernate.models.spi.MemberDetails; -import org.hibernate.models.spi.SourceModelBuildingContext; -import org.hibernate.spi.NavigablePath; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Lob; -import jakarta.persistence.MapKey; -import jakarta.persistence.MapKeyEnumerated; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Transient; -import jakarta.persistence.Version; - -import static org.hibernate.envers.configuration.internal.ModelsHelper.dynamicFieldDetails; -import static org.hibernate.envers.configuration.internal.ModelsHelper.getMember; -import static org.hibernate.envers.internal.tools.Tools.newHashMap; -import static org.hibernate.envers.internal.tools.Tools.newHashSet; - -/** - * Reads persistent properties form a {@link PersistentPropertiesSource} and adds the ones that are audited to a - * {@link AuditedPropertiesHolder}, filling all the auditing data. - * - * @author Adam Warski (adam at warski dot org) - * @author Erik-Berndt Scheper - * @author Hern&aacut;n Chanfreau - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Lukasz Zuchowski (author at zuchos dot com) - * @author Chris Cranford - */ -public class AuditedPropertiesReader { - - private static final AuditJoinTableData DEFAULT_AUDIT_JOIN_TABLE = new AuditJoinTableData(); - - public static final String NO_PREFIX = ""; - - private final PersistentPropertiesSource persistentPropertiesSource; - private final AuditedPropertiesHolder auditedPropertiesHolder; - private final EnversMetadataBuildingContext metadataBuildingContext; - private final String propertyNamePrefix; - - private final Map propertyAccessedPersistentProperties; - private final Set fieldAccessedPersistentProperties; - // Mapping class field to corresponding element. - private final Map propertiesGroupMapping; - - private final Set overriddenAuditedProperties; - private final Set overriddenNotAuditedProperties; - private final Map overriddenAuditedPropertiesJoinTables; - - private final Set overriddenAuditedClasses; - private final Set overriddenNotAuditedClasses; - - public AuditedPropertiesReader( - EnversMetadataBuildingContext metadataBuildingContext, - PersistentPropertiesSource persistentPropertiesSource, - AuditedPropertiesHolder auditedPropertiesHolder) { - this ( metadataBuildingContext, persistentPropertiesSource, auditedPropertiesHolder, NO_PREFIX ); - } - - public AuditedPropertiesReader( - EnversMetadataBuildingContext metadataBuildingContext, - PersistentPropertiesSource persistentPropertiesSource, - AuditedPropertiesHolder auditedPropertiesHolder, - String propertyNamePrefix) { - this.persistentPropertiesSource = persistentPropertiesSource; - this.auditedPropertiesHolder = auditedPropertiesHolder; - this.metadataBuildingContext = metadataBuildingContext; - this.propertyNamePrefix = propertyNamePrefix; - - propertyAccessedPersistentProperties = newHashMap(); - fieldAccessedPersistentProperties = newHashSet(); - propertiesGroupMapping = newHashMap(); - - overriddenAuditedProperties = newHashSet(); - overriddenNotAuditedProperties = newHashSet(); - overriddenAuditedPropertiesJoinTables = newHashMap(); - - overriddenAuditedClasses = newHashSet(); - overriddenNotAuditedClasses = newHashSet(); - } - - public void read() { - read(null); - } - - public void read(Audited allClassAudited) { - // First reading the access types for the persistent properties. - readPersistentPropertiesAccess(); - - if ( persistentPropertiesSource.isDynamicComponent() ) { - addPropertiesFromDynamicComponent( persistentPropertiesSource ); - } - else { - // Retrieve classes and properties that are explicitly marked for auditing process by any superclass - // of currently mapped entity or itself. - final ClassDetails classDetails = persistentPropertiesSource.getClassDetails(); - if ( persistentPropertiesSource.hasCompositeUserType() ) { - for ( String propertyName : fieldAccessedPersistentProperties ) { - final Property property = persistentPropertiesSource.getProperty( propertyName ); - final Value propertyValue = property.getValue(); - if ( propertyValue instanceof Component ) { - this.addFromComponentProperty( property, "field", (Component) propertyValue, allClassAudited ); - } - else { - this.addFromNotComponentProperty( property, "field", allClassAudited ); - } - } - for ( String propertyName : propertyAccessedPersistentProperties.keySet() ) { - final Property property = persistentPropertiesSource.getProperty( propertyName ); - final Value propertyValue = property.getValue(); - if ( propertyValue instanceof Component ) { - this.addFromComponentProperty( property, "property", (Component) propertyValue, allClassAudited ); - } - else { - this.addFromNotComponentProperty( property, "property", allClassAudited ); - } - } - } - else { - readAuditOverrides( classDetails ); - // Adding all properties from the given class. - addPropertiesFromClass( classDetails ); - } - } - } - - /** - * Recursively constructs sets of audited and not audited properties and classes which behavior has been overridden - * using {@link AuditOverride} annotation. - * - * @param classDetails Class that is being processed. Currently mapped entity shall be passed during first invocation. - */ - private void readAuditOverrides(ClassDetails classDetails) { - /* TODO: Code to remove with @Audited.auditParents - start. */ - final Audited allClassAudited = classDetails.getDirectAnnotationUsage( Audited.class ); - if ( allClassAudited != null && allClassAudited.auditParents().length > 0 ) { - for ( Class c : allClassAudited.auditParents() ) { - final ClassDetails parentClass = metadataBuildingContext.getClassDetailsRegistry() - .resolveClassDetails( c.getName() ); - checkSuperclass( classDetails, parentClass ); - if ( !overriddenNotAuditedClasses.contains( parentClass ) ) { - // If the class has not been marked as not audited by the subclass. - overriddenAuditedClasses.add( parentClass ); - } - } - } - /* TODO: Code to remove with @Audited.auditParents - finish. */ - final List auditOverrides = computeAuditOverrides( classDetails ); - for ( AuditOverride auditOverride : auditOverrides ) { - if ( auditOverride.forClass() != void.class ) { - final ClassDetails overrideClass = metadataBuildingContext.getClassDetailsRegistry() - .resolveClassDetails( auditOverride.forClass().getName() ); - checkSuperclass( classDetails, overrideClass ); - final String propertyName = auditOverride.name(); - if ( !StringTools.isEmpty( propertyName ) ) { - // Override @Audited annotation on property level. - final MemberDetails property = getProperty( overrideClass, propertyName ); - if ( auditOverride.isAudited() ) { - if ( !overriddenNotAuditedProperties.contains( property ) ) { - // If the property has not been marked as not audited by the subclass. - overriddenAuditedProperties.add( property ); - overriddenAuditedPropertiesJoinTables.put( property, auditOverride.auditJoinTable() ); - } - } - else { - if ( !overriddenAuditedProperties.contains( property ) ) { - // If the property has not been marked as audited by the subclass. - overriddenNotAuditedProperties.add( property ); - } - } - } - else { - // Override @Audited annotation on class level. - if ( auditOverride.isAudited() ) { - if ( !overriddenNotAuditedClasses.contains( overrideClass ) ) { - // If the class has not been marked as not audited by the subclass. - overriddenAuditedClasses.add( overrideClass ); - } - } - else { - if ( !overriddenAuditedClasses.contains( overrideClass ) ) { - // If the class has not been marked as audited by the subclass. - overriddenNotAuditedClasses.add( overrideClass ); - } - } - } - } - } - final ClassDetails superclass = classDetails.getSuperClass(); - if ( !classDetails.isInterface() && !Object.class.getName().equals( superclass.getName() ) ) { - readAuditOverrides( superclass ); - } - } - - /** - * @param classDetails Source class. - * - * @return List of @AuditOverride annotations applied at class level. - */ - private List computeAuditOverrides(ClassDetails classDetails) { - final AuditOverrides auditOverrides = classDetails.getDirectAnnotationUsage( AuditOverrides.class ); - final AuditOverride auditOverride = classDetails.getDirectAnnotationUsage( AuditOverride.class ); - if ( auditOverrides == null && auditOverride != null ) { - return Arrays.asList( auditOverride ); - } - else if ( auditOverrides != null && auditOverride == null ) { - return Arrays.asList( auditOverrides.value() ); - } - else if ( auditOverrides != null && auditOverride != null ) { - throw new EnversMappingException( - "@AuditOverrides annotation should encapsulate all @AuditOverride declarations. " + - "Please revise Envers annotations applied to class " + classDetails.getName() + "." - ); - } - return Collections.emptyList(); - } - - /** - * Checks whether one class is assignable from another. If not {@link EnversMappingException} is thrown. - * - * @param child Subclass. - * @param parent Superclass. - */ - private void checkSuperclass(ClassDetails child, ClassDetails parent) { - if ( !child.isImplementor( parent.toJavaClass() ) ) { - throw new EnversMappingException( - "Class " + parent.getName() + " is not assignable from " + child.getName() + ". " + - "Please revise Envers annotations applied to " + child.getName() + " type." - ); - } - } - - /** - * Checks whether class contains property with a given name. If not {@link EnversMappingException} is thrown. - * - * @param classDetails Class. - * @param propertyName Property name. - * - * @return Property object. - */ - private MemberDetails getProperty(ClassDetails classDetails, String propertyName) { - final MemberDetails member = getMember( classDetails, propertyName ); - if ( member == null ) { - throw new EnversMappingException( - "Property '" + propertyName + "' not found in class " + classDetails.getName() + ". " + - "Please revise Envers annotations applied to class " + persistentPropertiesSource.getClassDetails() + "." - ); - } - return member; - } - - private void readPersistentPropertiesAccess() { - final Iterator propertyIter = persistentPropertiesSource.getPropertyIterator(); - while ( propertyIter.hasNext() ) { - final Property property = propertyIter.next(); - addPersistentProperty( property ); - // See HHH-6636 - if ( "embedded".equals( property.getPropertyAccessorName() ) && !NavigablePath.IDENTIFIER_MAPPER_PROPERTY.equals( property.getName() ) ) { - createPropertiesGroupMapping( property ); - } - } - } - - private void addPersistentProperty(Property property) { - if ( "field".equals( property.getPropertyAccessorName() ) ) { - fieldAccessedPersistentProperties.add( property.getName() ); - } - else { - propertyAccessedPersistentProperties.put( property.getName(), property.getPropertyAccessorName() ); - } - } - - private void createPropertiesGroupMapping(Property property) { - final Component component = (Component) property.getValue(); - for ( Property componentProperty : component.getProperties() ) { - propertiesGroupMapping.put( componentProperty.getName(), property.getName() ); - } - } - - /** - * @param classDetails Class which properties are currently being added. - * - * @return {@link Audited} annotation of specified class. If processed type hasn't been explicitly marked, method - * checks whether given class exists in {@link AuditedPropertiesReader#overriddenAuditedClasses} collection. - * In case of success, {@link Audited} configuration of currently mapped entity is returned, otherwise - * {@code null}. If processed type exists in {@link AuditedPropertiesReader#overriddenNotAuditedClasses} - * collection, the result is also {@code null}. - */ - private Audited computeAuditConfiguration(ClassDetails classDetails) { - Audited allClassAudited = classDetails.getDirectAnnotationUsage( Audited.class ); - // If processed class is not explicitly marked with @Audited annotation, check whether auditing is - // forced by any of its child entities configuration (@AuditedOverride.forClass). - if ( allClassAudited == null && overriddenAuditedClasses.contains( classDetails ) ) { - // Declared audited parent copies @Audited.modStore and @Audited.targetAuditMode configuration from - // currently mapped entity. - allClassAudited = persistentPropertiesSource.getClassDetails().getDirectAnnotationUsage( Audited.class ); - if ( allClassAudited == null ) { - // If parent class declares @Audited on the field/property level. - allClassAudited = DEFAULT_AUDITED; - } - } - else if ( allClassAudited != null && overriddenNotAuditedClasses.contains( classDetails ) ) { - return null; - } - return allClassAudited; - } - - private void addPropertiesFromDynamicComponent(PersistentPropertiesSource propertiesSource) { - Audited audited = computeAuditConfiguration( propertiesSource.getClassDetails() ); - if ( !fieldAccessedPersistentProperties.isEmpty() ) { - throw new EnversMappingException( - "Audited dynamic component cannot have properties with access=\"field\" for properties: " + - fieldAccessedPersistentProperties + - ". \n Change properties access=\"property\", to make it work)" - ); - } - for ( Map.Entry entry : propertyAccessedPersistentProperties.entrySet() ) { - String property = entry.getKey(); - String accessType = entry.getValue(); - if ( !auditedPropertiesHolder.contains( property ) ) { - final Value propertyValue = persistentPropertiesSource.getProperty( property ).getValue(); - final SourceModelBuildingContext buildingContext = metadataBuildingContext.getSourceModelBuildingContext(); - final FieldDetails fieldDetails = dynamicFieldDetails( propertiesSource, property, buildingContext ); - if ( propertyValue instanceof Component ) { - this.addFromComponentProperty( - fieldDetails, - accessType, - (Component) propertyValue, - audited - ); - } - else { - this.addFromNotComponentProperty( fieldDetails, accessType, audited ); - } - } - } - } - - /** - * Recursively adds all audited properties of entity class and its superclasses. - * - * @param classDetails Currently processed class. - */ - private void addPropertiesFromClass(ClassDetails classDetails) { - final Audited allClassAudited = computeAuditConfiguration( classDetails ); - - //look in the class - classDetails.forEachField( (i, field) -> addFromProperty( - field, - it -> "field", - fieldAccessedPersistentProperties, - allClassAudited - ) ); - classDetails.forEachMethod( (i, method) -> addFromProperty( - method, - propertyAccessedPersistentProperties::get, - propertyAccessedPersistentProperties.keySet(), - allClassAudited - ) ); - - if ( isClassHierarchyTraversalNeeded( allClassAudited ) ) { - final ClassDetails superclass = classDetails.getSuperClass(); - if ( !classDetails.isInterface() && !"java.lang.Object".equals( superclass.getName() ) ) { - addPropertiesFromClass( superclass ); - } - } - } - - protected boolean isClassHierarchyTraversalNeeded(Audited allClassAudited) { - return allClassAudited != null || !auditedPropertiesHolder.isEmpty(); - } - - private void addFromProperty( - MemberDetails memberDetails, - Function accessTypeProvider, - Set persistentProperties, - Audited allClassAudited) { - if ( !memberDetails.isPersistable() || memberDetails.hasDirectAnnotationUsage( Transient.class ) ) { - return; - } - - final String attributeName = memberDetails.resolveAttributeName(); - final String accessType = accessTypeProvider.apply( attributeName ); - - // If this is not a persistent property, with the same access type as currently checked, - // it's not audited as well. - // If the property was already defined by the subclass, is ignored by superclasses - if ( persistentProperties.contains( attributeName ) - && !auditedPropertiesHolder.contains( attributeName ) ) { - final Value propertyValue = persistentPropertiesSource.getProperty( attributeName ).getValue(); - if ( propertyValue instanceof Component ) { - this.addFromComponentProperty( memberDetails, accessType, (Component) propertyValue, allClassAudited ); - } - else { - this.addFromNotComponentProperty( memberDetails, accessType, allClassAudited ); - } - } - else if ( propertiesGroupMapping.containsKey( attributeName ) ) { - // Retrieve embedded component name based on class field. - final String embeddedName = propertiesGroupMapping.get( attributeName ); - if ( !auditedPropertiesHolder.contains( embeddedName ) ) { - // Manage properties mapped within tag. - final Value propertyValue = persistentPropertiesSource.getProperty( embeddedName ).getValue(); - this.addFromPropertiesGroup( - embeddedName, - memberDetails, - accessType, - (Component) propertyValue, - allClassAudited - ); - } - } - } - - private void addFromPropertiesGroup( - String embeddedName, - MemberDetails memberDetails, - String accessType, - Component propertyValue, - Audited allClassAudited) { - final ComponentAuditingData componentData = new ComponentAuditingData(); - final boolean isAudited = fillPropertyData( memberDetails, componentData, accessType, allClassAudited ); - if ( isAudited ) { - // EntityPersister.getPropertyNames() returns name of embedded component instead of class field. - componentData.setName( embeddedName ); - // Marking component properties as placed directly in class (not inside another component). - componentData.setBeanName( null ); - - final PersistentPropertiesSource componentPropertiesSource = PersistentPropertiesSource.forComponent( - metadataBuildingContext, - propertyValue - ); - final AuditedPropertiesReader audPropReader = new AuditedPropertiesReader( - metadataBuildingContext, - componentPropertiesSource, - componentData, - propertyNamePrefix + MappingTools.createComponentPrefix( embeddedName ) - ); - audPropReader.read(); - - auditedPropertiesHolder.addPropertyAuditingData( embeddedName, componentData ); - } - } - - private void addFromComponentProperty( - MemberDetails memberDetails, - String accessType, - Component propertyValue, - Audited allClassAudited) { - final ComponentAuditingData componentData = new ComponentAuditingData(); - final boolean isAudited = fillPropertyData( memberDetails, componentData, accessType, allClassAudited ); - - final PersistentPropertiesSource componentPropertiesSource; - if ( propertyValue.isDynamic() ) { - final ClassDetails mapClassDetails = metadataBuildingContext.getClassDetailsRegistry() - .getClassDetails( Map.class.getName() ); - componentPropertiesSource = PersistentPropertiesSource.forComponent( propertyValue, mapClassDetails, true ); - } - else { - componentPropertiesSource = PersistentPropertiesSource.forComponent( metadataBuildingContext, propertyValue ); - } - - final ComponentAuditedPropertiesReader audPropReader = new ComponentAuditedPropertiesReader( - metadataBuildingContext, - componentPropertiesSource, - componentData, - propertyNamePrefix + MappingTools.createComponentPrefix( memberDetails.resolveAttributeName() ) - ); - audPropReader.read( allClassAudited ); - - if ( isAudited ) { - // Now we know that the property is audited - auditedPropertiesHolder.addPropertyAuditingData( memberDetails.resolveAttributeName(), componentData ); - } - } - - private void addFromNotComponentProperty(MemberDetails memberDetails, String accessType, Audited allClassAudited) { - final PropertyAuditingData propertyData = new PropertyAuditingData(); - final boolean isAudited = fillPropertyData( memberDetails, propertyData, accessType, allClassAudited ); - - if ( isAudited ) { - // Now we know that the property is audited - auditedPropertiesHolder.addPropertyAuditingData( memberDetails.resolveAttributeName(), propertyData ); - } - } - - - /** - * Checks if a property is audited and if yes, fills all of its data. - * - * @param memberDetails Property to check. - * @param propertyData Property data, on which to set this property's modification store. - * @param accessType Access type for the property. - * - * @return False if this property is not audited. - */ - private boolean fillPropertyData( - MemberDetails memberDetails, - PropertyAuditingData propertyData, - String accessType, - Audited allClassAudited) { - - // check if a property is declared as not audited to exclude it - // useful if a class is audited but some properties should be excluded - final NotAudited unVer = memberDetails.getDirectAnnotationUsage( NotAudited.class ); - if ( ( unVer != null - && !overriddenAuditedProperties.contains( memberDetails ) ) - || overriddenNotAuditedProperties.contains( memberDetails ) ) { - return false; - } - else { - // if the optimistic locking field has to be unversioned and the current property - // is the optimistic locking field, don't audit it - if ( metadataBuildingContext.getConfiguration().isDoNotAuditOptimisticLockingField() ) { - final Version jpaVer = memberDetails.getDirectAnnotationUsage( Version.class ); - if ( jpaVer != null ) { - return false; - } - } - } - - final String propertyName = propertyNamePrefix + memberDetails.resolveAttributeName(); - final String modifiedFlagsSuffix = metadataBuildingContext.getConfiguration().getModifiedFlagsSuffix(); - if ( !this.checkAudited( memberDetails, propertyData,propertyName, allClassAudited, modifiedFlagsSuffix ) ) { - return false; - } - - validateLobMappingSupport( memberDetails ); - - propertyData.setName( propertyName ); - propertyData.setBeanName( memberDetails.resolveAttributeName() ); - propertyData.setAccessType( accessType ); - - addPropertyJoinTables( memberDetails, propertyData ); - addPropertyCollectionAuditTable( memberDetails, propertyData ); - addPropertyAuditingOverrides( memberDetails, propertyData ); - if ( !processPropertyAuditingOverrides( memberDetails, propertyData ) ) { - // not audited due to AuditOverride annotation - return false; - } - addPropertyMapKey( memberDetails, propertyData ); - setPropertyAuditMappedBy( memberDetails, propertyData ); - setPropertyRelationMappedBy( memberDetails, propertyData ); - - return true; - } - - private void addFromComponentProperty( - Property property, - String accessType, - Component propertyValue, - Audited allClassAudited) { - final ComponentAuditingData componentData = new ComponentAuditingData(); - final boolean isAudited = fillPropertyData( property, componentData, accessType, allClassAudited ); - - final PersistentPropertiesSource componentPropertiesSource; - if ( propertyValue.isDynamic() ) { - final ClassDetails mapClassDetails = metadataBuildingContext.getClassDetailsRegistry() - .getClassDetails( Map.class.getName() ); - componentPropertiesSource = PersistentPropertiesSource.forComponent( propertyValue, mapClassDetails, true ); - } - else { - componentPropertiesSource = PersistentPropertiesSource.forComponent( metadataBuildingContext, propertyValue ); - } - - final ComponentAuditedPropertiesReader audPropReader = new ComponentAuditedPropertiesReader( - metadataBuildingContext, - componentPropertiesSource, - componentData, - propertyNamePrefix + MappingTools.createComponentPrefix( property.getName() ) - ); - audPropReader.read( allClassAudited ); - - if ( isAudited ) { - // Now we know that the property is audited - auditedPropertiesHolder.addPropertyAuditingData( property.getName(), componentData ); - } - } - - private void addFromNotComponentProperty(Property property, String accessType, Audited allClassAudited) { - final PropertyAuditingData propertyData = new PropertyAuditingData(); - final boolean isAudited = fillPropertyData( property, propertyData, accessType, allClassAudited ); - - if ( isAudited ) { - // Now we know that the property is audited - auditedPropertiesHolder.addPropertyAuditingData( property.getName(), propertyData ); - } - } - - - /** - * Checks if a property is audited and if yes, fills all of its data. - * - * @param property Property to check. - * @param propertyData Property data, on which to set this property's modification store. - * @param accessType Access type for the property. - * - * @return False if this property is not audited. - */ - private boolean fillPropertyData( - Property property, - PropertyAuditingData propertyData, - String accessType, - Audited allClassAudited) { - - final String propertyName = propertyNamePrefix + property.getName(); - final String modifiedFlagsSuffix = metadataBuildingContext.getConfiguration().getModifiedFlagsSuffix(); - if ( !this.checkAudited( property, propertyData,propertyName, allClassAudited, modifiedFlagsSuffix ) ) { - return false; - } - - propertyData.setName( propertyName ); - propertyData.setBeanName( property.getName() ); - propertyData.setAccessType( accessType ); - - propertyData.setJoinTable( DEFAULT_AUDIT_JOIN_TABLE ); - if ( !processPropertyAuditingOverrides( property, propertyData ) ) { - // not audited due to AuditOverride annotation - return false; - } - - return true; - } - - private void validateLobMappingSupport(MemberDetails memberDetails) { - // HHH-9834 - Sanity check - try { - if ( memberDetails.hasDirectAnnotationUsage( ElementCollection.class ) ) { - if ( memberDetails.hasDirectAnnotationUsage( Lob.class ) ) { - if ( !memberDetails.getType().isImplementor( Map.class ) ) { - throw new EnversMappingException( - "@ElementCollection combined with @Lob is only supported for Map collection types." - ); - } - } - } - } - catch ( EnversMappingException e ) { - throw new HibernateException( - String.format( - Locale.ENGLISH, - "Invalid mapping in [%s] for property [%s]", - memberDetails.getDeclaringType().getName(), - memberDetails.resolveAttributeName() - ), - e - ); - } - } - - protected boolean checkAudited( - MemberDetails memberDetails, - PropertyAuditingData propertyData, String propertyName, - Audited allClassAudited, String modifiedFlagSuffix) { - // Checking if this property is explicitly audited or if all properties are. - Audited aud = ( memberDetails.hasDirectAnnotationUsage( Audited.class ) ) - ? memberDetails.getDirectAnnotationUsage( Audited.class ) - : allClassAudited; - if ( aud == null - && overriddenAuditedProperties.contains( memberDetails ) - && !overriddenNotAuditedProperties.contains( memberDetails ) ) { - // Assigning @Audited defaults. If anyone needs to customize those values in the future, - // appropriate fields shall be added to @AuditOverride annotation. - aud = DEFAULT_AUDITED; - } - if ( aud != null ) { - propertyData.setRelationTargetAuditMode( aud.targetAuditMode() ); - propertyData.setRelationTargetNotFoundAction( getRelationNotFoundAction( memberDetails, allClassAudited ) ); - propertyData.setUsingModifiedFlag( checkUsingModifiedFlag( aud ) ); - propertyData.setModifiedFlagName( ModifiedColumnNameResolver.getName( propertyName, modifiedFlagSuffix ) ); - if ( !StringTools.isEmpty( aud.modifiedColumnName() ) ) { - propertyData.setExplicitModifiedFlagName( aud.modifiedColumnName() ); - } - return true; - } - else { - return false; - } - } - - protected boolean checkAudited( - Property property, - PropertyAuditingData propertyData, String propertyName, - Audited allClassAudited, String modifiedFlagSuffix) { - // Checking if this property is explicitly audited or if all properties are. - if ( allClassAudited != null ) { - propertyData.setRelationTargetAuditMode( allClassAudited.targetAuditMode() ); - propertyData.setRelationTargetNotFoundAction( - allClassAudited == null ? - RelationTargetNotFoundAction.DEFAULT : - allClassAudited.targetNotFoundAction() - ); - propertyData.setUsingModifiedFlag( checkUsingModifiedFlag( allClassAudited ) ); - propertyData.setModifiedFlagName( ModifiedColumnNameResolver.getName( propertyName, modifiedFlagSuffix ) ); - if ( !StringTools.isEmpty( allClassAudited.modifiedColumnName() ) ) { - propertyData.setExplicitModifiedFlagName( allClassAudited.modifiedColumnName() ); - } - return true; - } - else { - return false; - } - } - - protected boolean checkUsingModifiedFlag(Audited aud) { - // HHH-10468 - if ( metadataBuildingContext.getConfiguration().hasSettingForUseModifiedFlag() ) { - // HHH-10468 - // Modify behavior so that if the global setting has been set by user properties, then - // the audit behavior should be a disjunction between the global setting and the field - // annotation. This allows the annotation to take precedence when the global value is - // false and for the global setting to take precedence when true. - return metadataBuildingContext.getConfiguration().isModifiedFlagsEnabled() || aud.withModifiedFlag(); - } - // no global setting enabled, use the annotation's value only. - return aud.withModifiedFlag(); - } - - private void setPropertyRelationMappedBy(MemberDetails memberDetails, PropertyAuditingData propertyData) { - final OneToMany oneToMany = memberDetails.getDirectAnnotationUsage( OneToMany.class ); - if ( oneToMany != null && StringHelper.isNotEmpty( oneToMany.mappedBy() ) ) { - propertyData.setRelationMappedBy( oneToMany.mappedBy() ); - } - } - - private void setPropertyAuditMappedBy(MemberDetails memberDetails, PropertyAuditingData propertyData) { - final AuditMappedBy auditMappedBy = memberDetails.getDirectAnnotationUsage( AuditMappedBy.class ); - if ( auditMappedBy != null ) { - propertyData.setAuditMappedBy( auditMappedBy.mappedBy() ); - if ( StringHelper.isNotEmpty( auditMappedBy.positionMappedBy() ) ) { - propertyData.setPositionMappedBy( auditMappedBy.positionMappedBy() ); - } - } - } - - private void addPropertyMapKey(MemberDetails memberDetails, PropertyAuditingData propertyData) { - final MapKey mapKey = memberDetails.getDirectAnnotationUsage( MapKey.class ); - if ( mapKey != null ) { - propertyData.setMapKey( mapKey.name() ); - } - else { - final MapKeyEnumerated mapKeyEnumerated = memberDetails.getDirectAnnotationUsage( MapKeyEnumerated.class ); - if ( mapKeyEnumerated != null ) { - propertyData.setMapKeyEnumType( mapKeyEnumerated.value() ); - } - } - } - - private void addPropertyJoinTables(MemberDetails memberDetails, PropertyAuditingData propertyData) { - // The AuditJoinTable annotation source will follow the following priority rules - // 1. Use the override if one is specified - // 2. Use the site annotation if one is specified - // 3. Use the default if neither are specified - // - // The prime directive for (1) is so that when users in a subclass use @AuditOverride(s) - // the join-table specified there should have a higher priority in the event the - // super-class defines an equivalent @AuditJoinTable at the site/property level. - - final AuditJoinTable overrideJoinTable = overriddenAuditedPropertiesJoinTables.get( memberDetails ); - if ( overrideJoinTable != null ) { - propertyData.setJoinTable( new AuditJoinTableData( overrideJoinTable ) ); - } - else { - final AuditJoinTable propertyJoinTable = memberDetails.getDirectAnnotationUsage( AuditJoinTable.class ); - if ( propertyJoinTable != null ) { - propertyData.setJoinTable( new AuditJoinTableData( propertyJoinTable ) ); - } - else { - propertyData.setJoinTable( DEFAULT_AUDIT_JOIN_TABLE ); - } - } - } - - private void addPropertyCollectionAuditTable(MemberDetails memberDetails, PropertyAuditingData propertyAuditingData) { - final CollectionAuditTable collectionAuditTableAnn = memberDetails.getDirectAnnotationUsage( CollectionAuditTable.class ); - if ( collectionAuditTableAnn != null ) { - propertyAuditingData.setCollectionAuditTable( collectionAuditTableAnn ); - } - } - - /** - * Add the {@link AuditOverride} annotations. - * - * @param memberDetails the property being processed - * @param propertyData the Envers auditing data for this property - */ - private void addPropertyAuditingOverrides(MemberDetails memberDetails, PropertyAuditingData propertyData) { - final AuditOverride annotationOverride = memberDetails.getDirectAnnotationUsage( AuditOverride.class ); - if ( annotationOverride != null ) { - propertyData.addAuditingOverride( annotationOverride ); - } - final AuditOverrides annotationOverrides = memberDetails.getDirectAnnotationUsage( AuditOverrides.class ); - if ( annotationOverrides != null ) { - propertyData.addAuditingOverrides( annotationOverrides ); - } - } - - /** - * Process the {@link AuditOverride} annotations for this property. - * - * @param memberDetails the property for which the {@link AuditOverride} - * annotations are being processed - * @param propertyData the Envers auditing data for this property - * - * @return {@code false} if isAudited() of the override annotation was set to - */ - private boolean processPropertyAuditingOverrides(MemberDetails memberDetails, PropertyAuditingData propertyData) { - // Only components register audit overrides, classes will have no entries. - for ( AuditOverrideData override : auditedPropertiesHolder.getAuditingOverrides() ) { - if ( memberDetails.resolveAttributeName().equals( override.getName() ) ) { - // the override applies to this property - if ( !override.isAudited() ) { - return false; - } - else { - if ( override.getAuditJoinTableData() != null ) { - propertyData.setJoinTable( override.getAuditJoinTableData() ); - } - } - } - } - return true; - } - - private boolean processPropertyAuditingOverrides(Property property, PropertyAuditingData propertyData) { - // Only components register audit overrides, classes will have no entries. - for ( AuditOverrideData override : auditedPropertiesHolder.getAuditingOverrides() ) { - if ( property.getName().equals( override.getName() ) ) { - // the override applies to this property - if ( !override.isAudited() ) { - return false; - } - else { - if ( override.getAuditJoinTableData() != null ) { - propertyData.setJoinTable( override.getAuditJoinTableData() ); - } - } - } - } - return true; - } - - protected boolean isOverriddenNotAudited(MemberDetails memberDetails) { - return overriddenNotAuditedProperties.contains( memberDetails ); - } - - protected boolean isOverriddenNotAudited(ClassDetails classDetails) { - return overriddenNotAuditedClasses.contains( classDetails ); - } - - protected boolean isOverriddenAudited(MemberDetails memberDetails) { - return overriddenAuditedProperties.contains( memberDetails ); - } - - protected boolean isOverriddenAudited(ClassDetails classDetails) { - return overriddenAuditedClasses.contains( classDetails ); - } - - private RelationTargetNotFoundAction getRelationNotFoundAction(MemberDetails memberDetails, Audited classAudited) { - final Audited propertyAudited = memberDetails.getDirectAnnotationUsage( Audited.class ); - - // class isn't annotated, check property - if ( classAudited == null ) { - if ( propertyAudited == null ) { - // both class and property are not annotated, use default behavior - return RelationTargetNotFoundAction.DEFAULT; - } - // Property is annotated use its value - return propertyAudited.targetNotFoundAction(); - } - - // if class is annotated, take its value by default - RelationTargetNotFoundAction action = classAudited.targetNotFoundAction(); - if ( propertyAudited != null ) { - // both places have audited, use the property value only if it is not DEFAULT - if ( !propertyAudited.targetNotFoundAction().equals( RelationTargetNotFoundAction.DEFAULT ) ) { - action = propertyAudited.targetNotFoundAction(); - } - } - - return action; - } - - private static final Audited DEFAULT_AUDITED = new Audited() { - @Override - public RelationTargetAuditMode targetAuditMode() { - return RelationTargetAuditMode.AUDITED; - } - - @Override - public RelationTargetNotFoundAction targetNotFoundAction() { - return RelationTargetNotFoundAction.DEFAULT; - } - - @Override - public Class[] auditParents() { - return new Class[0]; - } - - @Override - public boolean withModifiedFlag() { - return false; - } - - @Override - public String modifiedColumnName() { - return ""; - } - - @Override - public Class annotationType() { - return this.getClass(); - } - }; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ClassAuditingData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ClassAuditingData.java deleted file mode 100644 index 20970b407091..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ClassAuditingData.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import org.hibernate.envers.AuditTable; -import org.hibernate.mapping.PersistentClass; - -/** - * Boot-time audit data for a specific entity class. - * - * @author Adam Warski (adam at warski dot org) - * @author Sebastian Komander - * @author Hern&aacut;n Chanfreau - * @author Chris Cranford - */ -public class ClassAuditingData implements AuditedPropertiesHolder { - - private final PersistentClass persistentClass; - private final Map properties; - private final Map secondaryTableDictionary; - - private AuditTable auditTable; - - /** - * True if the class is audited globally (this helps to cover the cases when there are no fields in the class, - * but it's still audited). - */ - private boolean defaultAudited; - - public ClassAuditingData(PersistentClass persistentClass) { - this.persistentClass = persistentClass; - this.properties = new HashMap<>(); - this.secondaryTableDictionary = new HashMap<>(); - } - - @Override - public boolean isEmpty() { - return properties.isEmpty(); - } - - @Override - public void addPropertyAuditingData(String propertyName, PropertyAuditingData auditingData) { - properties.put( propertyName, auditingData ); - } - - @Override - public PropertyAuditingData getPropertyAuditingData(String propertyName) { - return properties.get( propertyName ); - } - - @Override - public List getAuditingOverrides() { - return Collections.emptyList(); - } - - public PersistentClass getPersistentClass() { - return persistentClass; - } - - public String getEntityName() { - return persistentClass.getEntityName(); - } - - public Iterable getPropertyNames() { - return properties.keySet(); - } - - public Map getSecondaryTableDictionary() { - return secondaryTableDictionary; - } - - public AuditTable getAuditTable() { - return auditTable; - } - - public void setAuditTable(AuditTable auditTable) { - this.auditTable = auditTable; - } - - public void setDefaultAudited(boolean defaultAudited) { - this.defaultAudited = defaultAudited; - } - - public boolean isAudited() { - return defaultAudited || properties.size() > 0; - } - - @Override - public boolean contains(String propertyName) { - return properties.containsKey( propertyName ); - } - - public Iterable getNonSyntheticPropertyNames() { - return properties.entrySet().stream() - .filter( e -> !e.getValue().isSynthetic() ) - .map( Map.Entry::getKey ) - .collect( Collectors.toList() ); - } - - public Iterable getSyntheticProperties() { - return properties.values().stream() - .filter( PropertyAuditingData::isSynthetic ) - .collect( Collectors.toList() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ComponentAuditedPropertiesReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ComponentAuditedPropertiesReader.java deleted file mode 100644 index 54193ffdbe52..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ComponentAuditedPropertiesReader.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.boot.internal.ModifiedColumnNameResolver; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.models.spi.ClassDetails; -import org.hibernate.models.spi.MemberDetails; - -import jakarta.persistence.MappedSuperclass; - -/** - * Reads the audited properties for components. - * - * @author Hern&aacut;n Chanfreau - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public class ComponentAuditedPropertiesReader extends AuditedPropertiesReader { - - private final ComponentAuditingData componentAuditingData; - - public ComponentAuditedPropertiesReader( - EnversMetadataBuildingContext metadataBuildingContext, - PersistentPropertiesSource persistentPropertiesSource, - AuditedPropertiesHolder auditedPropertiesHolder) { - this( metadataBuildingContext, persistentPropertiesSource, auditedPropertiesHolder, NO_PREFIX ); - } - - public ComponentAuditedPropertiesReader( - EnversMetadataBuildingContext metadataBuildingContext, - PersistentPropertiesSource persistentPropertiesSource, - AuditedPropertiesHolder auditedPropertiesHolder, - String propertyNamePrefix) { - super( - metadataBuildingContext, - persistentPropertiesSource, - auditedPropertiesHolder, - propertyNamePrefix - ); - this.componentAuditingData = (ComponentAuditingData) auditedPropertiesHolder; - } - - @Override - protected boolean isClassHierarchyTraversalNeeded(Audited allClassAudited) { - // we always traverse the hierarchy for components - return true; - } - - @Override - protected boolean checkAudited( - MemberDetails memberDetails, - PropertyAuditingData propertyData, - String propertyName, - Audited allClassAudited, - String modifiedFlagSuffix) { - // Checking if this property is explicitly audited or if all properties are. - final Audited aud = memberDetails.getDirectAnnotationUsage( Audited.class ); - if ( aud != null ) { - propertyData.setRelationTargetAuditMode( aud.targetAuditMode() ); - propertyData.setUsingModifiedFlag( checkUsingModifiedFlag( aud ) ); - propertyData.setModifiedFlagName( ModifiedColumnNameResolver.getName( propertyName, modifiedFlagSuffix ) ); - if ( StringHelper.isNotEmpty( aud.modifiedColumnName() ) ) { - propertyData.setExplicitModifiedFlagName( aud.modifiedColumnName() ); - } - } - else { - - // get declaring class for property - final ClassDetails declaringClass = memberDetails.getDeclaringType(); - - // check component data to make sure that no audit overrides were not defined at - // the parent class or the embeddable at the property level. - boolean classAuditedOverride = false; - boolean classNotAuditedOverride = false; - for ( AuditOverrideData auditOverride : componentAuditingData.getAuditingOverrides() ) { - if ( auditOverride.getForClass() != void.class ) { - final String className = auditOverride.getForClass().getName(); - if ( declaringClass.getName().equals( className ) ) { - if ( !auditOverride.isAudited() ) { - if ( "".equals( auditOverride.getName() ) ) { - classNotAuditedOverride = true; - } - if ( memberDetails.resolveAttributeName().equals( auditOverride.getName() ) ) { - return false; - } - } - else { - if ( "".equals( auditOverride.getName() ) ) { - classAuditedOverride = true; - } - if ( memberDetails.resolveAttributeName().equals( auditOverride.getName() ) ) { - return true; - } - } - } - } - } - - // make sure taht if the class or property are explicitly 'isAudited=false', use that. - if ( classNotAuditedOverride || isOverriddenNotAudited( memberDetails ) || isOverriddenNotAudited( declaringClass ) ) { - return false; - } - - // make sure that if the class or property are explicitly 'isAudited=true', use that. - if ( classAuditedOverride || isOverriddenAudited( memberDetails ) || isOverriddenAudited( declaringClass ) ) { - return true; - } - - // make sure that if a component is annotated with audited, it is honored. - if ( allClassAudited != null ) { - return true; - } - - // assumption here is if a component reader is looking at a @MappedSuperclass, it should be treated - // as not being audited if we have reached htis point; allowing components and any @Embeddable - // class being audited by default. - if ( declaringClass.hasDirectAnnotationUsage( MappedSuperclass.class ) ) { - return false; - } - } - return true; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ComponentAuditingData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ComponentAuditingData.java deleted file mode 100644 index 0581e6d9c1d8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/ComponentAuditingData.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.hibernate.envers.internal.tools.Tools.newHashMap; - -/** - * Audit mapping meta-data for component. - * - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - * @author Chris Cranford - */ -public class ComponentAuditingData extends PropertyAuditingData implements AuditedPropertiesHolder { - private final Map properties; - - public ComponentAuditingData() { - this.properties = newHashMap(); - } - - @Override - public boolean isEmpty() { - return properties.isEmpty(); - } - - @Override - public void addPropertyAuditingData(String propertyName, PropertyAuditingData auditingData) { - properties.put( propertyName, auditingData ); - } - - @Override - public PropertyAuditingData getPropertyAuditingData(String propertyName) { - return properties.get( propertyName ); - } - - @Override - public boolean contains(String propertyName) { - return properties.containsKey( propertyName ); - } - - public Set getPropertyNames() { - return properties.keySet(); - } - - public Iterable getNonSyntheticPropertyNames() { - return properties.entrySet().stream() - .filter( e -> !e.getValue().isSynthetic() ) - .map( Map.Entry::getKey ) - .collect( Collectors.toList() ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/PersistentPropertiesSource.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/PersistentPropertiesSource.java deleted file mode 100644 index 1429267f1adb..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/PersistentPropertiesSource.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.util.Iterator; - -import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; -import org.hibernate.envers.boot.EnversMappingException; -import org.hibernate.envers.boot.spi.EnversMetadataBuildingContext; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.models.spi.ClassDetails; - -/** - * A source of data on persistent properties of a class or component. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface PersistentPropertiesSource { - Iterator getPropertyIterator(); - - Property getProperty(String propertyName); - - ClassDetails getClassDetails(); - - boolean isDynamicComponent(); - - boolean hasCompositeUserType(); - - /** - * Get a persistent properties source for a persistent class. - * - * @param persistentClass the persistent class - * @param classDetails the class details - * @return the properties source - */ - static PersistentPropertiesSource forClass(PersistentClass persistentClass, ClassDetails classDetails) { - return new PersistentPropertiesSource() { - @Override - public Iterator getPropertyIterator() { - return persistentClass.getProperties().iterator(); - } - - @Override - public Property getProperty(String propertyName) { - return persistentClass.getProperty( propertyName ); - } - - @Override - public ClassDetails getClassDetails() { - return classDetails; - } - - @Override - public boolean isDynamicComponent() { - return false; - } - - @Override - public boolean hasCompositeUserType() { - return false; - } - }; - } - - /** - * Get a persistent properties source for a component that needs its class resolved. - * - * @param context the metadata building context - * @param component the component - * @param dynamic whether the component is dynamic or not - * @return the properties source - */ - static PersistentPropertiesSource forComponent(EnversMetadataBuildingContext context, Component component, boolean dynamic) { - try { - final ClassDetails classDetails = context.getClassDetailsRegistry() - .resolveClassDetails( component.getComponentClassName() ); - return forComponent( component, classDetails, dynamic ); - } - catch (ClassLoadingException e) { - throw new EnversMappingException( e ); - } - } - - static PersistentPropertiesSource forComponent(EnversMetadataBuildingContext context, Component component) { - return forComponent( context, component, false ); - } - - /** - * Get a persistent properties source for a component with its class already resolved. - * - * @param component the component - * @param classDetails the class details - * @param dynamic whether the component is dynamic or not - * @return the properties source - */ - static PersistentPropertiesSource forComponent(Component component, ClassDetails classDetails, boolean dynamic) { - return new PersistentPropertiesSource() { - @Override - public Iterator getPropertyIterator() { - return component.getProperties().iterator(); - } - - @Override - public Property getProperty(String propertyName) { - return component.getProperty( propertyName ); - } - - @Override - public ClassDetails getClassDetails() { - return classDetails; - } - - @Override - public boolean isDynamicComponent() { - return dynamic; - } - - @Override - public boolean hasCompositeUserType() { - return component.getTypeName() != null; - } - }; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/PropertyAuditingData.java b/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/PropertyAuditingData.java deleted file mode 100644 index 65b91dadb65e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/configuration/internal/metadata/reader/PropertyAuditingData.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.configuration.internal.metadata.reader; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import jakarta.persistence.EnumType; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.CollectionAuditTable; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.RelationTargetNotFoundAction; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.mapping.Value; -import org.hibernate.property.access.spi.PropertyAccessStrategy; -import org.hibernate.type.Type; - -/** - * The boot-time representation of an audited property. - * - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public class PropertyAuditingData { - private String name; - private String beanName; - private String mapKey; - private EnumType mapKeyEnumType; - private CollectionAuditTable collectionAuditTable; - private AuditJoinTableData joinTable; - private String accessType; - private final List auditJoinTableOverrides = new ArrayList<>( 0 ); - private RelationTargetAuditMode relationTargetAuditMode; - private RelationTargetNotFoundAction relationTargetNotFoundAction; - private String auditMappedBy; - private String relationMappedBy; - private String positionMappedBy; - private boolean forceInsertable; - private boolean usingModifiedFlag; - private String modifiedFlagName; - private String explicitModifiedFlagName; - private Value value; - private Type propertyType; - private Type virtualPropertyType; - private PropertyAccessStrategy propertyAccessStrategy; - // Synthetic properties are ones which are not part of the actual java model. - // They're properties used for bookkeeping by Hibernate - private boolean synthetic; - - public PropertyAuditingData() { - } - - /** - * Create a property with the default {@link RelationTargetAuditMode} mode of AUDITED. - * - * @param name the property name - * @param accessType the access type - * @param forceInsertable whether the property is forced insertable - */ - public PropertyAuditingData( - String name, - String accessType, - boolean forceInsertable) { - this( - name, - accessType, - RelationTargetAuditMode.AUDITED, - RelationTargetNotFoundAction.DEFAULT, - null, - null, - forceInsertable, - false, - null - ); - } - - /** - * Create a property with the default {@link RelationTargetAuditMode} mode of AUDITED. - * - * @param name the property name - * @param accessType the access type - * @param relationTargetNotFoundAction the relation target not found action - * @param forceInsertable whether the property is forced insertable - * @param synthetic whether the property is a synthetic, non-logic column-based property - * @param value the mapping model's value - */ - public PropertyAuditingData( - String name, - String accessType, - RelationTargetNotFoundAction relationTargetNotFoundAction, - boolean forceInsertable, - boolean synthetic, - Value value) { - this( - name, - accessType, - RelationTargetAuditMode.AUDITED, - relationTargetNotFoundAction, - null, - null, - forceInsertable, - synthetic, - value - ); - } - - public PropertyAuditingData( - String name, - String accessType, - RelationTargetAuditMode relationTargetAuditMode, - RelationTargetNotFoundAction relationTargetNotFoundAction, - String auditMappedBy, - String positionMappedBy, - boolean forceInsertable, - boolean synthetic, - Value value) { - this.name = name; - this.beanName = name; - this.accessType = accessType; - this.relationTargetAuditMode = relationTargetAuditMode; - this.relationTargetNotFoundAction = relationTargetNotFoundAction; - this.auditMappedBy = auditMappedBy; - this.positionMappedBy = positionMappedBy; - this.forceInsertable = forceInsertable; - this.synthetic = synthetic; - this.value = value; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getBeanName() { - return beanName; - } - - public void setBeanName(String beanName) { - this.beanName = beanName; - } - - public String getMapKey() { - return mapKey; - } - - public void setMapKey(String mapKey) { - this.mapKey = mapKey; - } - - public EnumType getMapKeyEnumType() { - return mapKeyEnumType; - } - - public void setMapKeyEnumType(EnumType mapKeyEnumType) { - this.mapKeyEnumType = mapKeyEnumType; - } - - public AuditJoinTableData getJoinTable() { - return joinTable; - } - - public void setJoinTable(AuditJoinTableData joinTable) { - this.joinTable = joinTable; - } - - public String getAccessType() { - return accessType; - } - - public void setAccessType(String accessType) { - this.accessType = accessType; - } - - public List getAuditingOverrides() { - return Collections.unmodifiableList( auditJoinTableOverrides ); - } - - public String getAuditMappedBy() { - return auditMappedBy; - } - - public boolean hasAuditedMappedBy() { - return auditMappedBy != null; - } - - public void setAuditMappedBy(String auditMappedBy) { - this.auditMappedBy = auditMappedBy; - } - - public String getRelationMappedBy() { - return relationMappedBy; - } - - public boolean hasRelationMappedBy() { - return relationMappedBy != null; - } - - public void setRelationMappedBy(String relationMappedBy) { - this.relationMappedBy = relationMappedBy; - } - - public String getPositionMappedBy() { - return positionMappedBy; - } - - public void setPositionMappedBy(String positionMappedBy) { - this.positionMappedBy = positionMappedBy; - } - - public boolean isForceInsertable() { - return forceInsertable; - } - - public void setForceInsertable(boolean forceInsertable) { - this.forceInsertable = forceInsertable; - } - - public boolean isUsingModifiedFlag() { - return usingModifiedFlag; - } - - public void setUsingModifiedFlag(boolean usingModifiedFlag) { - this.usingModifiedFlag = usingModifiedFlag; - } - - public String getModifiedFlagName() { - return modifiedFlagName; - } - - public void setModifiedFlagName(String modifiedFlagName) { - this.modifiedFlagName = modifiedFlagName; - } - - public boolean isModifiedFlagNameExplicitlySpecified() { - return !StringTools.isEmpty( explicitModifiedFlagName ); - } - - public String getExplicitModifiedFlagName() { - return explicitModifiedFlagName; - } - - public void setExplicitModifiedFlagName(String modifiedFlagName) { - this.explicitModifiedFlagName = modifiedFlagName; - } - - public void addAuditingOverride(AuditOverride annotation) { - if ( annotation != null ) { - final String overrideName = annotation.name(); - boolean present = false; - for ( AuditOverrideData current : auditJoinTableOverrides ) { - if ( current.getName().equals( overrideName ) ) { - present = true; - break; - } - } - if ( !present ) { - auditJoinTableOverrides.add( new AuditOverrideData( annotation ) ); - } - } - } - - public void addAuditingOverrides(AuditOverrides annotationOverrides) { - if ( annotationOverrides != null ) { - for ( AuditOverride annotation : annotationOverrides.value() ) { - addAuditingOverride( annotation ); - } - } - } - - /** - * Get the relationTargetAuditMode property. - * - * @return the relationTargetAuditMode property value - */ - public RelationTargetAuditMode getRelationTargetAuditMode() { - return relationTargetAuditMode; - } - - /** - * Set the relationTargetAuditMode property value. - * - * @param relationTargetAuditMode the relationTargetAuditMode to set - */ - public void setRelationTargetAuditMode(RelationTargetAuditMode relationTargetAuditMode) { - this.relationTargetAuditMode = relationTargetAuditMode; - } - - public RelationTargetNotFoundAction getRelationTargetNotFoundAction() { - return relationTargetNotFoundAction; - } - - public void setRelationTargetNotFoundAction(RelationTargetNotFoundAction relationTargetNotFoundAction) { - this.relationTargetNotFoundAction = relationTargetNotFoundAction; - } - - public boolean isSynthetic() { - return synthetic; - } - - public Value getValue() { - return value; - } - - public void setValue(Value value) { - this.value = value; - } - - public Type getPropertyType() { - return propertyType; - } - - public void setPropertyType(Type propertyType) { - this.propertyType = propertyType; - } - - public PropertyAccessStrategy getPropertyAccessStrategy() { - return propertyAccessStrategy; - } - - public void setPropertyAccessStrategy(PropertyAccessStrategy propertyAccessStrategy) { - this.propertyAccessStrategy = propertyAccessStrategy; - } - - public Type getVirtualPropertyType() { - return virtualPropertyType; - } - - public void setVirtualPropertyType(Type virtualPropertyType) { - this.virtualPropertyType = virtualPropertyType; - } - - public CollectionAuditTable getCollectionAuditTable() { - return collectionAuditTable; - } - - public void setCollectionAuditTable(CollectionAuditTable collectionAuditTable) { - this.collectionAuditTable = collectionAuditTable; - } - - public PropertyData resolvePropertyData() { - if ( propertyType != null && virtualPropertyType != null ) { - return new PropertyData( - name, - beanName, - accessType, - usingModifiedFlag, - modifiedFlagName, - synthetic, - propertyType, - virtualPropertyType.getReturnedClass(), - propertyAccessStrategy - ); - } - else if ( propertyType != null ) { - return new PropertyData( - name, - beanName, - accessType, - usingModifiedFlag, - modifiedFlagName, - synthetic, - propertyType, - propertyAccessStrategy - ); - } - return new PropertyData( - name, - beanName, - accessType, - usingModifiedFlag, - modifiedFlagName, - synthetic, - null, - propertyAccessStrategy - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/OrderedSequenceGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/OrderedSequenceGenerator.java deleted file mode 100644 index f973b9a8aa62..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/OrderedSequenceGenerator.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.enhanced; - -import java.util.Properties; - -import org.hibernate.boot.model.relational.QualifiedName; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; -import org.hibernate.id.enhanced.DatabaseStructure; -import org.hibernate.id.enhanced.SequenceStyleGenerator; -import org.hibernate.type.Type; - -/** - * Revision number generator has to produce values in ascending order (gaps may occur). - *

- * This generator is only applicable when {@code USE_REVISION_ENTITY_WITH_NATIVE_ID} is {@code false} in the - * bootstrapping configuration properties. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class OrderedSequenceGenerator extends SequenceStyleGenerator { - @Override - protected DatabaseStructure buildSequenceStructure( - Type type, - Properties params, - JdbcEnvironment jdbcEnvironment, - QualifiedName sequenceName, - int initialValue, - int incrementSize) { - final Object noCacheValue = params.get( "nocache" ); - final boolean noCache = Boolean.TRUE.equals( noCacheValue ) - || noCacheValue instanceof String && Boolean.parseBoolean( noCacheValue.toString() ); - return new OrderedSequenceStructure( - jdbcEnvironment, - sequenceName, - initialValue, - incrementSize, - noCache, - type.getReturnedClass() - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/OrderedSequenceStructure.java b/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/OrderedSequenceStructure.java deleted file mode 100644 index a8c922a365c9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/OrderedSequenceStructure.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.enhanced; - -import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject; -import org.hibernate.boot.model.relational.Database; -import org.hibernate.boot.model.relational.QualifiedName; -import org.hibernate.boot.model.relational.SqlStringGenerationContext; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.DialectDelegateWrapper; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; -import org.hibernate.id.enhanced.SequenceStructure; - -/** - * Describes a sequence that supports ordered sequences. - * - * @author Chris Cranford - */ -public class OrderedSequenceStructure extends SequenceStructure { - - private final AuxiliaryDatabaseObject sequenceObject; - private final String suffix; - - public OrderedSequenceStructure( - JdbcEnvironment jdbcEnvironment, - QualifiedName qualifiedSequenceName, - int initialValue, - int incrementSize, - Class numberType) { - this( jdbcEnvironment, qualifiedSequenceName, initialValue, incrementSize, false, numberType ); - } - - public OrderedSequenceStructure( - JdbcEnvironment jdbcEnvironment, - QualifiedName qualifiedSequenceName, - int initialValue, - int incrementSize, - boolean noCache, - Class numberType) { - super( "envers", qualifiedSequenceName, initialValue, incrementSize, numberType ); - this.sequenceObject = new OrderedSequence(); - final Dialect dialect = DialectDelegateWrapper.extractRealDialect( jdbcEnvironment.getDialect() ); - if ( dialect instanceof OracleDialect ) { - this.suffix = ( noCache ? " NOCACHE" : "" ) + " ORDER"; - } - else { - this.suffix = null; - } - } - - @Override - protected void buildSequence(Database database) { - database.addAuxiliaryDatabaseObject( sequenceObject ); - this.physicalSequenceName = getQualifiedName(); - } - - private class OrderedSequence implements AuxiliaryDatabaseObject { - @Override - public String getExportIdentifier() { - return getQualifiedName().render(); - } - - @Override - public boolean appliesToDialect(Dialect dialect) { - // applies to all dialects - // sqlCreateStrings applies dialect specific changes - return true; - } - - @Override - public boolean beforeTablesOnCreation() { - return true; - } - - @Override - public String[] sqlCreateStrings(SqlStringGenerationContext context) { - Dialect dialect = context.getDialect(); - final String[] createStrings = dialect.getSequenceSupport().getCreateSequenceStrings( - context.format( getPhysicalName() ), - getInitialValue(), - getSourceIncrementSize() - ); - - if ( suffix != null ) { - for ( int i = 0; i < createStrings.length; ++i ) { - createStrings[i] = createStrings[i] + suffix; - } - } - - return createStrings; - } - - @Override - public String[] sqlDropStrings(SqlStringGenerationContext context) { - Dialect dialect = context.getDialect(); - return dialect.getSequenceSupport().getDropSequenceStrings( context.format( getPhysicalName() ) ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdRevisionEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdRevisionEntity.java deleted file mode 100644 index f281a16dcfba..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdRevisionEntity.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.enhanced; - -import jakarta.persistence.Entity; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -@Entity -public final class SequenceIdRevisionEntity extends SequenceIdRevisionMapping { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdRevisionMapping.java b/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdRevisionMapping.java deleted file mode 100644 index ddbae7f57b25..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdRevisionMapping.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.enhanced; - -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.Transient; -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.DateTimeFormatter; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -import java.io.Serializable; -import java.util.Date; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -@MappedSuperclass -public class SequenceIdRevisionMapping implements Serializable { - private static final long serialVersionUID = 4159156677698841902L; - - @Id - @GeneratedValue(generator = "RevisionNumberSequenceGenerator") - @GenericGenerator( - name = "RevisionNumberSequenceGenerator", - strategy = "org.hibernate.envers.enhanced.OrderedSequenceGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "sequence_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1") - } - ) - @RevisionNumber - private int id; - - @RevisionTimestamp - private long timestamp; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - @Transient - public Date getRevisionDate() { - return new Date( timestamp ); - } - - public long getTimestamp() { - return timestamp; - } - - @SuppressWarnings("unused") - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SequenceIdRevisionMapping) ) { - return false; - } - - final SequenceIdRevisionMapping that = (SequenceIdRevisionMapping) o; - return id == that.id && timestamp == that.timestamp; - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + (int) (timestamp ^ (timestamp >>> 32)); - return result; - } - - @Override - public String toString() { - return "SequenceIdRevisionEntity(id = " + id - + ", revisionDate = " + DateTimeFormatter.INSTANCE.format(getRevisionDate() ) - + ")"; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdTrackingModifiedEntitiesRevisionEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdTrackingModifiedEntitiesRevisionEntity.java deleted file mode 100644 index 21e3d8bfb555..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdTrackingModifiedEntitiesRevisionEntity.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.enhanced; - -import jakarta.persistence.Entity; - -/** - * Extension of standard {@link SequenceIdRevisionEntity} that allows tracking entity names changed in each revision. - * This revision entity is implicitly used when {@code org.hibernate.envers.track_entities_changed_in_revision} - * parameter is set to {@code true}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public final class SequenceIdTrackingModifiedEntitiesRevisionEntity extends SequenceIdTrackingModifiedEntitiesRevisionMapping { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdTrackingModifiedEntitiesRevisionMapping.java b/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdTrackingModifiedEntitiesRevisionMapping.java deleted file mode 100644 index dd4ff098b4b4..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/enhanced/SequenceIdTrackingModifiedEntitiesRevisionMapping.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.enhanced; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.MappedSuperclass; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.envers.ModifiedEntityNames; - -import java.util.HashSet; -import java.util.Set; - -/** - * Extension of standard {@link SequenceIdRevisionMapping} that allows tracking entity names changed in each revision. - * This revision entity is implicitly used when {@code org.hibernate.envers.track_entities_changed_in_revision} - * parameter is set to {@code true}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -public class SequenceIdTrackingModifiedEntitiesRevisionMapping extends SequenceIdRevisionMapping { - @ElementCollection(fetch = FetchType.EAGER) - @JoinTable(name = "REVCHANGES", joinColumns = @JoinColumn(name = "REV")) - @Column(name = "ENTITYNAME") - @Fetch(FetchMode.JOIN) - @ModifiedEntityNames - private Set modifiedEntityNames = new HashSet<>(); - - @SuppressWarnings("unused") - public Set getModifiedEntityNames() { - return modifiedEntityNames; - } - - @SuppressWarnings("unused") - public void setModifiedEntityNames(Set modifiedEntityNames) { - this.modifiedEntityNames = modifiedEntityNames; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SequenceIdTrackingModifiedEntitiesRevisionMapping) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - final SequenceIdTrackingModifiedEntitiesRevisionMapping that = (SequenceIdTrackingModifiedEntitiesRevisionMapping) o; - - if ( modifiedEntityNames == null ) { - return that.modifiedEntityNames == null; - } - else { - return modifiedEntityNames.equals( that.modifiedEntityNames ); - } - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (modifiedEntityNames != null ? modifiedEntityNames.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "SequenceIdTrackingModifiedEntitiesRevisionEntity(" + super.toString() - + ", modifiedEntityNames = " + modifiedEntityNames + ")"; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversCollectionEventListener.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversCollectionEventListener.java deleted file mode 100644 index dd01b68fba60..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversCollectionEventListener.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import java.io.Serializable; -import java.util.List; -import java.util.Set; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.entities.mapper.ExtendedPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.internal.synchronization.work.AuditWorkUnit; -import org.hibernate.envers.internal.synchronization.work.CollectionChangeWorkUnit; -import org.hibernate.envers.internal.synchronization.work.FakeBidirectionalRelationWorkUnit; -import org.hibernate.envers.internal.synchronization.work.PersistentCollectionChangeWorkUnit; -import org.hibernate.event.spi.AbstractCollectionEvent; -import org.hibernate.persister.collection.AbstractCollectionPersister; -import org.hibernate.persister.collection.OneToManyPersister; - -/** - * Base class for Envers' collection event related listeners - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class BaseEnversCollectionEventListener extends BaseEnversEventListener { - protected BaseEnversCollectionEventListener(EnversService enversService) { - super( enversService ); - } - - protected final CollectionEntry getCollectionEntry(AbstractCollectionEvent event) { - return event.getSession().getPersistenceContextInternal().getCollectionEntry( event.getCollection() ); - } - - protected final void onCollectionAction( - AbstractCollectionEvent event, - PersistentCollection newColl, - Serializable oldColl, - CollectionEntry collectionEntry) { - if ( shouldGenerateRevision( event ) ) { - checkIfTransactionInProgress( event.getSession() ); - - final AuditProcess auditProcess = getEnversService().getAuditProcessManager().get( event.getSession() ); - - final String entityName = event.getAffectedOwnerEntityName(); - final String ownerEntityName = ( (AbstractCollectionPersister) collectionEntry.getLoadedPersister() ).getOwnerEntityName(); - final String referencingPropertyName = collectionEntry.getRole().substring( ownerEntityName.length() + 1 ); - - // Checking if this is not a "fake" many-to-one bidirectional relation. The relation description may be - // null in case of collections of non-entities. - final RelationDescription rd = searchForRelationDescription( entityName, referencingPropertyName ); - if ( rd != null && rd.getMappedByPropertyName() != null ) { - generateFakeBidirecationalRelationWorkUnits( - auditProcess, - newColl, - oldColl, - entityName, - referencingPropertyName, - event, - rd - ); - } - else { - final PersistentCollectionChangeWorkUnit workUnit = new PersistentCollectionChangeWorkUnit( - event.getSession(), - entityName, - getEnversService(), - newColl, - collectionEntry, - oldColl, - event.getAffectedOwnerIdOrNull(), - referencingPropertyName - ); - auditProcess.addWorkUnit( workUnit ); - - if ( workUnit.containsWork() ) { - // There are some changes: a revision needs also be generated for the collection owner - auditProcess.addWorkUnit( - new CollectionChangeWorkUnit( - event.getSession(), - event.getAffectedOwnerEntityName(), - referencingPropertyName, - getEnversService(), - event.getAffectedOwnerIdOrNull(), - event.getAffectedOwnerOrNull() - ) - ); - - generateBidirectionalCollectionChangeWorkUnits( auditProcess, event, workUnit, rd ); - } - } - } - } - - protected final void onCollectionActionInversed( - AbstractCollectionEvent event, - PersistentCollection newColl, - Serializable oldColl, - CollectionEntry collectionEntry) { - if ( shouldGenerateRevision( event ) ) { - final String entityName = event.getAffectedOwnerEntityName(); - final String ownerEntityName = ( (AbstractCollectionPersister) collectionEntry.getLoadedPersister() ).getOwnerEntityName(); - final String referencingPropertyName = collectionEntry.getRole().substring( ownerEntityName.length() + 1 ); - - final RelationDescription rd = searchForRelationDescription( entityName, referencingPropertyName ); - if ( rd != null ) { - if ( rd.getRelationType().equals( RelationType.TO_MANY_NOT_OWNING ) && rd.isIndexed() ) { - onCollectionAction( event, newColl, oldColl, collectionEntry ); - } - } - } - } - - /** - * Forces persistent collection initialization. - * - * @param event Collection event. - * - * @return Stored snapshot. - */ - protected Serializable initializeCollection(AbstractCollectionEvent event) { - event.getCollection().forceInitialization(); - return event.getCollection().getStoredSnapshot(); - } - - /** - * Checks whether modification of not-owned relation field triggers new revision and owner entity is versioned. - * - * @param event Collection event. - * - * @return {@code true} if revision based on given event should be generated, {@code false} otherwise. - */ - protected boolean shouldGenerateRevision(AbstractCollectionEvent event) { - final String entityName = event.getAffectedOwnerEntityName(); - if ( getEnversService().getEntitiesConfigurations().isVersioned( entityName ) ) { - final CollectionEntry collectionEntry = getCollectionEntry( event ); - final boolean isInverse = collectionEntry.getLoadedPersister().isInverse(); - final boolean isOneToMany = collectionEntry.getLoadedPersister() instanceof OneToManyPersister; - if ( isInverse || isOneToMany ) { - return getEnversService().getConfig().isGenerateRevisionsForCollections(); - } - return true; - } - // if the entity is not audited, we dont generate a revision. - return false; - } - - /** - * Looks up a relation description corresponding to the given property in the given entity. If no description is - * found in the given entity, the parent entity is checked (so that inherited relations work). - * - * @param entityName Name of the entity, in which to start looking. - * @param referencingPropertyName The name of the property. - * - * @return A found relation description corresponding to the given entity or {@code null}, if no description can - * be found. - */ - private RelationDescription searchForRelationDescription(String entityName, String referencingPropertyName) { - final EntityConfiguration configuration = getEnversService().getEntitiesConfigurations().get( entityName ); - final String propertyName = sanitizeReferencingPropertyName( referencingPropertyName ); - final RelationDescription rd = configuration.getRelationDescription( propertyName ); - if ( rd == null && configuration.getParentEntityName() != null ) { - return searchForRelationDescription( configuration.getParentEntityName(), propertyName ); - } - - return rd; - } - - private String sanitizeReferencingPropertyName(String propertyName) { - if ( propertyName != null && propertyName.indexOf( '.' ) != -1 ) { - return propertyName.replaceAll( "\\.", "\\_" ); - } - return propertyName; - } - - private void generateFakeBidirecationalRelationWorkUnits( - AuditProcess auditProcess, - PersistentCollection newColl, - Serializable oldColl, - String collectionEntityName, - String referencingPropertyName, - AbstractCollectionEvent event, - RelationDescription rd) { - // First computing the relation changes - final ExtendedPropertyMapper propertyMapper = getEnversService() - .getEntitiesConfigurations() - .get( collectionEntityName ) - .getPropertyMapper(); - final List collectionChanges = propertyMapper.mapCollectionChanges( - event.getSession(), - referencingPropertyName, - newColl, - oldColl, - event.getAffectedOwnerIdOrNull() - ); - - // Getting the id mapper for the related entity, as the work units generated will correspond to the related - // entities. - final String relatedEntityName = rd.getToEntityName(); - final IdMapper relatedIdMapper = getEnversService().getEntitiesConfigurations().get( relatedEntityName ).getIdMapper(); - - // For each collection change, generating the bidirectional work unit. - for ( PersistentCollectionChangeData changeData : collectionChanges ) { - final Object relatedObj = changeData.getChangedElement(); - final Serializable relatedId = (Serializable) relatedIdMapper.mapToIdFromEntity( relatedObj ); - final RevisionType revType = (RevisionType) changeData.getData().get( - getEnversService().getConfig().getRevisionTypePropertyName() - ); - - // This can be different from relatedEntityName, in case of inheritance (the real entity may be a subclass - // of relatedEntityName). - final String realRelatedEntityName = event.getSession().bestGuessEntityName( relatedObj ); - - // By default, the nested work unit is a collection change work unit. - final AuditWorkUnit nestedWorkUnit = new CollectionChangeWorkUnit( - event.getSession(), - realRelatedEntityName, - rd.getMappedByPropertyName(), - getEnversService(), - relatedId, - relatedObj - ); - - auditProcess.addWorkUnit( - new FakeBidirectionalRelationWorkUnit( - event.getSession(), - realRelatedEntityName, - getEnversService(), - relatedId, - referencingPropertyName, - event.getAffectedOwnerOrNull(), - rd, - revType, - changeData.getChangedElementIndex(), - nestedWorkUnit - ) - ); - } - - // We also have to generate a collection change work unit for the owning entity. - auditProcess.addWorkUnit( - new CollectionChangeWorkUnit( - event.getSession(), - collectionEntityName, - referencingPropertyName, - getEnversService(), - event.getAffectedOwnerIdOrNull(), - event.getAffectedOwnerOrNull() - ) - ); - } - - private void generateBidirectionalCollectionChangeWorkUnits( - AuditProcess auditProcess, - AbstractCollectionEvent event, - PersistentCollectionChangeWorkUnit workUnit, - RelationDescription rd) { - // Checking if this is enabled in configuration ... - if ( !getEnversService().getConfig().isGenerateRevisionsForCollections() ) { - return; - } - - // Checking if this is not a bidirectional relation - then, a revision needs also be generated for - // the other side of the relation. - // relDesc can be null if this is a collection of simple values (not a relation). - if ( rd != null && rd.isBidirectional() ) { - final String relatedEntityName = rd.getToEntityName(); - final IdMapper relatedIdMapper = getEnversService().getEntitiesConfigurations().get( relatedEntityName ).getIdMapper(); - - final Set toPropertyNames = getEnversService().getEntitiesConfigurations().getToPropertyNames( - event.getAffectedOwnerEntityName(), - rd.getFromPropertyName(), - relatedEntityName - ); - final String toPropertyName = toPropertyNames.iterator().next(); - - for ( PersistentCollectionChangeData changeData : workUnit.getCollectionChanges() ) { - final Object relatedObj = changeData.getChangedElement(); - final Serializable relatedId = (Serializable) relatedIdMapper.mapToIdFromEntity( relatedObj ); - - auditProcess.addWorkUnit( - new CollectionChangeWorkUnit( - event.getSession(), - event.getSession().bestGuessEntityName( relatedObj ), - toPropertyName, - getEnversService(), - relatedId, - relatedObj - ) - ); - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversEventListener.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversEventListener.java deleted file mode 100644 index 24dd8f46cc97..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversEventListener.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import java.util.Set; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.internal.synchronization.work.CollectionChangeWorkUnit; -import org.hibernate.envers.internal.tools.EntityTools; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; - -/** - * Base class for all Envers event listeners - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public abstract class BaseEnversEventListener implements EnversListener { - private final EnversService enversService; - - protected BaseEnversEventListener(EnversService enversService) { - this.enversService = enversService; - } - - protected EnversService getEnversService() { - return enversService; - } - - protected final void generateBidirectionalCollectionChangeWorkUnits( - AuditProcess auditProcess, - EntityPersister entityPersister, - String entityName, - Object[] newState, - Object[] oldState, - SessionImplementor session) { - // Checking if this is enabled in configuration ... - if ( !enversService.getConfig().isGenerateRevisionsForCollections() ) { - return; - } - - // Checks every property of the entity, if it is an "owned" to-one relation to another entity. - // If the value of that property changed, and the relation is bi-directional, a new revision - // for the related entity is generated. - final String[] propertyNames = entityPersister.getPropertyNames(); - - for ( int i = 0; i < propertyNames.length; i++ ) { - final String propertyName = propertyNames[i]; - final RelationDescription relDesc = enversService.getEntitiesConfigurations().getRelationDescription( - entityName, - propertyName - ); - if ( relDesc != null && relDesc.isBidirectional() && relDesc.getRelationType() == RelationType.TO_ONE && - relDesc.isInsertable() ) { - // Checking for changes - final Object oldValue = oldState == null ? null : oldState[i]; - final Object newValue = newState == null ? null : newState[i]; - - if ( !EntityTools.entitiesEqual( session, relDesc.getToEntityName(), oldValue, newValue ) ) { - // We have to generate changes both in the old collection (size decreses) and new collection - // (size increases). - if ( newValue != null ) { - addCollectionChangeWorkUnit( auditProcess, session, entityName, relDesc, newValue ); - } - - if ( oldValue != null ) { - addCollectionChangeWorkUnit( auditProcess, session, entityName, relDesc, oldValue ); - } - } - } - } - } - - private void addCollectionChangeWorkUnit( - AuditProcess auditProcess, SessionImplementor session, - String fromEntityName, RelationDescription relDesc, Object value) { - // relDesc.getToEntityName() doesn't always return the entity name of the value - in case - // of subclasses, this will be root class, no the actual class. So it can't be used here. - String toEntityName; - Object id; - - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( value ); - if ( lazyInitializer != null ) { - id = lazyInitializer.getInternalIdentifier(); - // We've got to initialize the object from the proxy to later read its state. - value = EntityTools.getTargetFromProxy( session.getFactory(), lazyInitializer ); - // HHH-7249 - // This call must occur after the proxy has been initialized or the returned name will - // be to the base class which will impact the discriminator value chosen when using an - // inheritance strategy with discriminators. - toEntityName = session.bestGuessEntityName( value ); - } - else { - toEntityName = session.guessEntityName( value ); - - final IdMapper idMapper = enversService.getEntitiesConfigurations().get( toEntityName ).getIdMapper(); - id = idMapper.mapToIdFromEntity( value ); - } - - final Set toPropertyNames = enversService.getEntitiesConfigurations().getToPropertyNames( - fromEntityName, - relDesc.getFromPropertyName(), - toEntityName - ); - final String toPropertyName = toPropertyNames.iterator().next(); - - auditProcess.addWorkUnit( - new CollectionChangeWorkUnit( - session, - toEntityName, - toPropertyName, - enversService, - id, - value - ) - ); - } - - protected void checkIfTransactionInProgress(SessionImplementor session) { - if ( !session.isTransactionInProgress() ) { - // Historical data would not be flushed to audit tables if outside of active transaction - // (AuditProcess#doBeforeTransactionCompletion(SessionImplementor) not executed). - throw new AuditException( "Unable to create revision because of non-active transaction" ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversUpdateEventListener.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversUpdateEventListener.java deleted file mode 100644 index e0e9e11fc190..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/BaseEnversUpdateEventListener.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityConfiguration; - -/** - * @author Chris Cranford - */ -public abstract class BaseEnversUpdateEventListener extends BaseEnversEventListener { - public BaseEnversUpdateEventListener(EnversService enversService) { - super( enversService ); - } - - /** - * Returns whether the entity has {@code withModifiedFlag} features and has no old state, most likely implying - * it was updated in a detached entity state. - * - * @param entityName The associated entity name. - * @param oldState The event old (likely detached) entity state. - * @return {@code true} if the entity is/has been updated in detached state, otherwise {@code false}. - */ - protected boolean isDetachedEntityUpdate(String entityName, Object[] oldState) { - final EntityConfiguration configuration = getEnversService().getEntitiesConfigurations().get( entityName ); - if ( configuration.getPropertyMapper() != null && oldState == null ) { - return configuration.getPropertyMapper().hasPropertiesWithModifiedFlag(); - } - return false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversListener.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversListener.java deleted file mode 100644 index 51fbb03333c9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversListener.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -/** - * Marker interface for Envers listeners for duplication handling. - * - * @author Steve Ebersole - */ -public interface EnversListener { -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversListenerDuplicationStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversListenerDuplicationStrategy.java deleted file mode 100644 index 92a611e8734e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversListenerDuplicationStrategy.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.event.service.spi.DuplicationStrategy; - -/** - * Event listener duplication strategy for envers - * - * @author Steve Ebersole - */ -public class EnversListenerDuplicationStrategy implements DuplicationStrategy { - /** - * Singleton access - */ - public static final EnversListenerDuplicationStrategy INSTANCE = new EnversListenerDuplicationStrategy(); - - @Override - public boolean areMatch(Object listener, Object original) { - return listener.getClass().equals( original.getClass() ) && EnversListener.class.isInstance( listener ); - } - - @Override - public Action getAction() { - return Action.KEEP_ORIGINAL; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostCollectionRecreateEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostCollectionRecreateEventListenerImpl.java deleted file mode 100644 index c8400071cbeb..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostCollectionRecreateEventListenerImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.event.spi.PostCollectionRecreateEvent; -import org.hibernate.event.spi.PostCollectionRecreateEventListener; - -/** - * Envers-specific collection recreation event listener - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - * @author Chris Cranford - */ -public class EnversPostCollectionRecreateEventListenerImpl - extends BaseEnversCollectionEventListener - implements PostCollectionRecreateEventListener { - - public EnversPostCollectionRecreateEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public void onPostRecreateCollection(PostCollectionRecreateEvent event) { - final CollectionEntry collectionEntry = getCollectionEntry( event ); - if ( !collectionEntry.getLoadedPersister().isInverse() ) { - onCollectionAction( event, event.getCollection(), null, collectionEntry ); - } - else { - onCollectionActionInversed( event, event.getCollection(), null, collectionEntry ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostDeleteEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostDeleteEventListenerImpl.java deleted file mode 100644 index e5374cd4479a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostDeleteEventListenerImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.internal.synchronization.work.AuditWorkUnit; -import org.hibernate.envers.internal.synchronization.work.DelWorkUnit; -import org.hibernate.event.spi.PostDeleteEvent; -import org.hibernate.event.spi.PostDeleteEventListener; -import org.hibernate.persister.entity.EntityPersister; - -/** - * Envers-specific entity (post) deletion event listener - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - */ -public class EnversPostDeleteEventListenerImpl extends BaseEnversEventListener implements PostDeleteEventListener { - public EnversPostDeleteEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public void onPostDelete(PostDeleteEvent event) { - final String entityName = event.getPersister().getEntityName(); - - if ( getEnversService().getEntitiesConfigurations().isVersioned( entityName ) ) { - checkIfTransactionInProgress( event.getSession() ); - - final AuditProcess auditProcess = getEnversService().getAuditProcessManager().get( event.getSession() ); - - final AuditWorkUnit workUnit = new DelWorkUnit( - event.getSession(), - event.getPersister().getEntityName(), - getEnversService(), - event.getId(), - event.getPersister(), - event.getDeletedState() - ); - auditProcess.addWorkUnit( workUnit ); - - if ( workUnit.containsWork() ) { - generateBidirectionalCollectionChangeWorkUnits( - auditProcess, - event.getPersister(), - entityName, - null, - event.getDeletedState(), - event.getSession() - ); - } - } - } - - @Override - public boolean requiresPostCommitHandling(EntityPersister persister) { - return getEnversService().getEntitiesConfigurations().isVersioned( persister.getEntityName() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostInsertEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostInsertEventListenerImpl.java deleted file mode 100644 index a43d18e6ec56..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostInsertEventListenerImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.internal.synchronization.work.AddWorkUnit; -import org.hibernate.envers.internal.synchronization.work.AuditWorkUnit; -import org.hibernate.event.spi.PostInsertEvent; -import org.hibernate.event.spi.PostInsertEventListener; -import org.hibernate.persister.entity.EntityPersister; - -/** - * Envers-specific entity (post) insertion event listener - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - */ -public class EnversPostInsertEventListenerImpl extends BaseEnversEventListener implements PostInsertEventListener { - public EnversPostInsertEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public void onPostInsert(PostInsertEvent event) { - final String entityName = event.getPersister().getEntityName(); - - if ( getEnversService().getEntitiesConfigurations().isVersioned( entityName ) ) { - checkIfTransactionInProgress( event.getSession() ); - - final AuditProcess auditProcess = getEnversService().getAuditProcessManager().get( event.getSession() ); - - final AuditWorkUnit workUnit = new AddWorkUnit( - event.getSession(), - event.getPersister().getEntityName(), - getEnversService(), - event.getId(), - event.getPersister(), - event.getState() - ); - auditProcess.addWorkUnit( workUnit ); - - if ( workUnit.containsWork() ) { - generateBidirectionalCollectionChangeWorkUnits( - auditProcess, - event.getPersister(), - entityName, - event.getState(), - null, - event.getSession() - ); - } - } - } - - @Override - public boolean requiresPostCommitHandling(EntityPersister persister) { - return getEnversService().getEntitiesConfigurations().isVersioned( persister.getEntityName() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostUpdateEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostUpdateEventListenerImpl.java deleted file mode 100644 index 8eb4dcc0fb04..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPostUpdateEventListenerImpl.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.internal.synchronization.work.AuditWorkUnit; -import org.hibernate.envers.internal.synchronization.work.ModWorkUnit; -import org.hibernate.event.spi.PostUpdateEvent; -import org.hibernate.event.spi.PostUpdateEventListener; -import org.hibernate.persister.entity.EntityPersister; - -/** - * Envers-specific entity (post) update event listener - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - * @author Chris Cranford - */ -public class EnversPostUpdateEventListenerImpl extends BaseEnversUpdateEventListener implements PostUpdateEventListener { - public EnversPostUpdateEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public void onPostUpdate(PostUpdateEvent event) { - final String entityName = event.getPersister().getEntityName(); - - if ( getEnversService().getEntitiesConfigurations().isVersioned( entityName ) ) { - checkIfTransactionInProgress( event.getSession() ); - - final AuditProcess auditProcess = getEnversService().getAuditProcessManager().get( event.getSession() ); - - Object[] oldState = getOldDBState( auditProcess, entityName, event ); - final Object[] newDbState = postUpdateDBState( event ); - final AuditWorkUnit workUnit = new ModWorkUnit( - event.getSession(), - event.getPersister().getEntityName(), - getEnversService(), - event.getId(), - event.getPersister(), - newDbState, - oldState - ); - auditProcess.addWorkUnit( workUnit ); - - if ( workUnit.containsWork() ) { - generateBidirectionalCollectionChangeWorkUnits( - auditProcess, - event.getPersister(), - entityName, - newDbState, - oldState, - event.getSession() - ); - } - } - } - - private Object[] getOldDBState(AuditProcess auditProcess, String entityName, PostUpdateEvent event) { - if ( isDetachedEntityUpdate( entityName, event.getOldState() ) ) { - return auditProcess.getCachedEntityState( event.getId(), entityName ); - } - return event.getOldState(); - } - - private Object[] postUpdateDBState(PostUpdateEvent event) { - final Object[] newDbState = event.getState().clone(); - if ( event.getOldState() != null ) { - final EntityPersister entityPersister = event.getPersister(); - for ( int i = 0; i < entityPersister.getPropertyNames().length; ++i ) { - if ( !entityPersister.getPropertyUpdateability()[i] ) { - // Assuming that PostUpdateEvent#getOldState() returns database state of the record before modification. - // Otherwise, we would have to execute SQL query to be sure of @Column(updatable = false) column value. - newDbState[i] = event.getOldState()[i]; - } - } - } - return newDbState; - } - - @Override - public boolean requiresPostCommitHandling(EntityPersister persister) { - return getEnversService().getEntitiesConfigurations().isVersioned( persister.getEntityName() ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreCollectionRemoveEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreCollectionRemoveEventListenerImpl.java deleted file mode 100644 index 691a20828100..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreCollectionRemoveEventListenerImpl.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import java.io.Serializable; - -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.event.spi.PreCollectionRemoveEvent; -import org.hibernate.event.spi.PreCollectionRemoveEventListener; - -/** - * Envers-specific collection removal event listener - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class EnversPreCollectionRemoveEventListenerImpl - extends BaseEnversCollectionEventListener - implements PreCollectionRemoveEventListener { - - public EnversPreCollectionRemoveEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public void onPreRemoveCollection(PreCollectionRemoveEvent event) { - final CollectionEntry collectionEntry = getCollectionEntry( event ); - if ( collectionEntry != null ) { - if ( !collectionEntry.getLoadedPersister().isInverse() ) { - Serializable oldColl = collectionEntry.getSnapshot(); - if ( !event.getCollection().wasInitialized() && shouldGenerateRevision( event ) ) { - // In case of uninitialized collection we need a fresh snapshot to properly calculate audit data. - oldColl = initializeCollection( event ); - } - onCollectionAction( event, null, oldColl, collectionEntry ); - } - else { - // HHH-7510 - Avoid LazyInitializationException when global_with_modified_flag = true - if ( getEnversService().getConfig().isModifiedFlagsEnabled() ) { - initializeCollection( event ); - } - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreCollectionUpdateEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreCollectionUpdateEventListenerImpl.java deleted file mode 100644 index 0bf29674ddd8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreCollectionUpdateEventListenerImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.event.spi.PreCollectionUpdateEvent; -import org.hibernate.event.spi.PreCollectionUpdateEventListener; - -/** - * Envers-specific collection update event listener - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Steve Ebersole - * @author Chris Cranford - */ -public class EnversPreCollectionUpdateEventListenerImpl - extends BaseEnversCollectionEventListener - implements PreCollectionUpdateEventListener { - - public EnversPreCollectionUpdateEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public void onPreUpdateCollection(PreCollectionUpdateEvent event) { - final CollectionEntry collectionEntry = getCollectionEntry( event ); - if ( !collectionEntry.getLoadedPersister().isInverse() ) { - onCollectionAction( event, event.getCollection(), collectionEntry.getSnapshot(), collectionEntry ); - } - else { - onCollectionActionInversed( event, event.getCollection(), collectionEntry.getSnapshot(), collectionEntry ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreUpdateEventListenerImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreUpdateEventListenerImpl.java deleted file mode 100644 index 3be700fcd995..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/event/spi/EnversPreUpdateEventListenerImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.event.spi; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.event.spi.PreUpdateEvent; -import org.hibernate.event.spi.PreUpdateEventListener; - -/** - * Envers-specific entity (pre) update event listener. - * - * @author Chris Cranford - */ -public class EnversPreUpdateEventListenerImpl extends BaseEnversUpdateEventListener implements PreUpdateEventListener { - public EnversPreUpdateEventListenerImpl(EnversService enversService) { - super( enversService ); - } - - @Override - public boolean onPreUpdate(PreUpdateEvent event) { - final String entityName = event.getPersister().getEntityName(); - if ( getEnversService().getEntitiesConfigurations().isVersioned( entityName ) ) { - checkIfTransactionInProgress( event.getSession() ); - if ( isDetachedEntityUpdate( entityName, event.getOldState() ) ) { - final AuditProcess auditProcess = getEnversService().getAuditProcessManager().get( event.getSession() ); - auditProcess.cacheEntityState( - event.getId(), - entityName, - event.getPersister().getDatabaseSnapshot( event.getId(), event.getSession() ) - ); - } - } - return false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/exception/AuditException.java b/hibernate-envers/src/main/java/org/hibernate/envers/exception/AuditException.java deleted file mode 100644 index e57f3267410b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/exception/AuditException.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.exception; - -import org.hibernate.HibernateException; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class AuditException extends HibernateException { - private static final long serialVersionUID = 4306480965630972168L; - - public AuditException(String message) { - super( message ); - } - - public AuditException(String message, Throwable cause) { - super( message, cause ); - } - - public AuditException(Throwable cause) { - super( cause ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java b/hibernate-envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java deleted file mode 100644 index 994dea81a5cd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/exception/NotAuditedException.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.exception; - - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotAuditedException extends AuditException { - private static final long serialVersionUID = 4809674577449455510L; - - private final String entityName; - - public NotAuditedException(String entityName, String message) { - super( message ); - this.entityName = entityName; - } - - public String getEntityName() { - return entityName; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java b/hibernate-envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java deleted file mode 100644 index 2b6916c66b0d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/exception/RevisionDoesNotExistException.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.exception; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.util.Date; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class RevisionDoesNotExistException extends AuditException { - private static final long serialVersionUID = -6417768274074962282L; - - private final Number revision; - private final Date date; - private final LocalDateTime localDateTime; - private final Instant instant; - - public RevisionDoesNotExistException(Number revision) { - super( "Revision " + revision + " does not exist." ); - this.revision = revision; - this.date = null; - this.localDateTime = null; - this.instant = null; - } - - public RevisionDoesNotExistException(Date date) { - super( "There is no revision before or at " + date + "." ); - this.date = date; - this.revision = null; - this.localDateTime = null; - this.instant = null; - } - - public RevisionDoesNotExistException(LocalDateTime localDateTime) { - super( "There is no revision before or at " + localDateTime + "." ); - this.localDateTime = localDateTime; - this.revision = null; - this.date = null; - this.instant = null; - } - - public RevisionDoesNotExistException(Instant instant) { - super( "There is no revision before or at " + instant + "." ); - this.instant = instant; - this.revision = null; - this.date = null; - this.localDateTime = null; - } - - public Number getRevision() { - return revision; - } - - public Date getDate() { - return date; - } - - public LocalDateTime getLocalDateTime() { - return localDateTime; - } - - public Instant getInstant() { - return instant; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/function/OrderByFragmentFunction.java b/hibernate-envers/src/main/java/org/hibernate/envers/function/OrderByFragmentFunction.java deleted file mode 100644 index 6f712bf13df3..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/function/OrderByFragmentFunction.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.function; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.metamodel.mapping.PluralAttributeMapping; -import org.hibernate.metamodel.mapping.ValuedModelPart; -import org.hibernate.metamodel.mapping.ordering.OrderByFragment; -import org.hibernate.persister.collection.CollectionPersister; -import org.hibernate.metamodel.model.domain.ReturnableType; -import org.hibernate.query.sqm.function.FunctionRenderer; -import org.hibernate.spi.NavigablePath; -import org.hibernate.query.spi.QueryEngine; -import org.hibernate.query.sqm.NodeBuilder; -import org.hibernate.query.sqm.function.AbstractSqmFunctionDescriptor; -import org.hibernate.query.sqm.function.SelfRenderingSqmFunction; -import org.hibernate.query.sqm.function.SqmFunctionDescriptor; -import org.hibernate.query.sqm.produce.function.ArgumentsValidator; -import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver; -import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators; -import org.hibernate.query.sqm.produce.function.StandardFunctionReturnTypeResolvers; -import org.hibernate.query.sqm.sql.FromClauseIndex; -import org.hibernate.query.sqm.sql.SqmToSqlAstConverter; -import org.hibernate.query.sqm.tree.SqmCopyContext; -import org.hibernate.query.sqm.tree.SqmTypedNode; -import org.hibernate.query.sqm.tree.expression.SqmLiteral; -import org.hibernate.sql.ast.spi.SqlAstQueryPartProcessingState; -import org.hibernate.sql.ast.tree.expression.Expression; -import org.hibernate.sql.ast.tree.from.DelegatingTableGroup; -import org.hibernate.sql.ast.tree.from.NamedTableReference; -import org.hibernate.sql.ast.tree.from.TableGroup; -import org.hibernate.sql.ast.tree.from.TableReference; -import org.hibernate.sql.ast.tree.select.QuerySpec; - -/** - * Envers specific FunctionContributor - * - * @author Christian Beikov - */ -public class OrderByFragmentFunction extends AbstractSqmFunctionDescriptor { - - public static final String FUNCTION_NAME = "_order_by_frag"; - public static final OrderByFragmentFunction INSTANCE = new OrderByFragmentFunction(); - - public OrderByFragmentFunction() { - super( - FUNCTION_NAME, - StandardArgumentsValidators.exactly( 2 ), - StandardFunctionReturnTypeResolvers.useArgType( 1 ), - null - ); - } - @Override - protected SelfRenderingSqmFunction generateSqmFunctionExpression( - List> arguments, - ReturnableType impliedResultType, - QueryEngine queryEngine) { - return new OrderByFragmentSelfRenderingSqmFunction<>( this, arguments, impliedResultType, queryEngine ); - } - - private static class AuditingTableGroup extends DelegatingTableGroup { - - private final TableGroup delegate; - private final String auditTableExpression; - private final String normalTableExpression; - - public AuditingTableGroup(TableGroup delegate, String normalTableExpression) { - this.delegate = delegate; - this.auditTableExpression = ( (NamedTableReference) delegate.getPrimaryTableReference() ).getTableExpression(); - this.normalTableExpression = normalTableExpression; - } - - @Override - protected TableGroup getTableGroup() { - return delegate; - } - - @Override - public TableReference resolveTableReference( - NavigablePath navigablePath, - String tableExpression) { - if ( tableExpression.equals( normalTableExpression ) ) { - tableExpression = auditTableExpression; - } - return super.resolveTableReference( navigablePath, tableExpression ); - } - - @Override - public TableReference resolveTableReference( - NavigablePath navigablePath, - ValuedModelPart modelPart, - String tableExpression) { - if ( tableExpression.equals( normalTableExpression ) ) { - return resolveTableReference( navigablePath, modelPart, auditTableExpression ); - } - return super.resolveTableReference( navigablePath, modelPart, tableExpression ); - } - - @Override - public TableReference getTableReference( - NavigablePath navigablePath, - String tableExpression, - boolean resolve) { - if ( tableExpression.equals( normalTableExpression ) ) { - tableExpression = auditTableExpression; - } - return super.getTableReference( navigablePath, tableExpression, resolve ); - } - - @Override - public TableReference getTableReference( - NavigablePath navigablePath, - ValuedModelPart modelPart, - String tableExpression, - boolean resolve) { - if ( tableExpression.equals( normalTableExpression ) ) { - return getTableReference( navigablePath, modelPart, auditTableExpression, resolve ); - } - return super.getTableReference( navigablePath, modelPart, tableExpression, resolve ); - } - } - - private static class OrderByFragmentSelfRenderingSqmFunction extends SelfRenderingSqmFunction { - - public OrderByFragmentSelfRenderingSqmFunction( - OrderByFragmentFunction orderByFragmentFunction, - List> arguments, - ReturnableType impliedResultType, - QueryEngine queryEngine) { - super( - orderByFragmentFunction, - (sqlAppender, sqlAstArguments, returnType, walker) -> {}, - arguments, - impliedResultType, - orderByFragmentFunction.getArgumentsValidator(), - orderByFragmentFunction.getReturnTypeResolver(), - queryEngine.getCriteriaBuilder(), - orderByFragmentFunction.getName() - ); - } - - private OrderByFragmentSelfRenderingSqmFunction( - SqmFunctionDescriptor descriptor, - FunctionRenderer renderer, - List> arguments, - ReturnableType impliedResultType, - ArgumentsValidator argumentsValidator, - FunctionReturnTypeResolver returnTypeResolver, - NodeBuilder nodeBuilder, - String name) { - super( - descriptor, - renderer, - arguments, - impliedResultType, - argumentsValidator, - returnTypeResolver, - nodeBuilder, - name - ); - } - - @Override - public OrderByFragmentSelfRenderingSqmFunction copy(SqmCopyContext context) { - final OrderByFragmentSelfRenderingSqmFunction existing = context.getCopy( this ); - if ( existing != null ) { - return existing; - } - final List> arguments = new ArrayList<>( getArguments().size() ); - for ( SqmTypedNode argument : getArguments() ) { - arguments.add( argument.copy( context ) ); - } - return context.registerCopy( - this, - new OrderByFragmentSelfRenderingSqmFunction<>( - getFunctionDescriptor(), - getFunctionRenderer(), - arguments, - getImpliedResultType(), - getArgumentsValidator(), - getReturnTypeResolver(), - nodeBuilder(), - getFunctionName() - ) - ); - } - - @Override - public Expression convertToSqlAst(SqmToSqlAstConverter walker) { - final String sqmAlias = ( (SqmLiteral) getArguments().get( 0 ) ).getLiteralValue(); - final String attributeRole = ( (SqmLiteral) getArguments().get( 1 ) ).getLiteralValue(); - final TableGroup tableGroup = ( (FromClauseIndex) walker.getFromClauseAccess() ).findTableGroup( - sqmAlias - ); - final CollectionPersister collectionDescriptor = - walker.getCreationContext().getMappingMetamodel() - .findCollectionDescriptor( attributeRole ); - final PluralAttributeMapping pluralAttribute = collectionDescriptor.getAttributeMapping(); - final QuerySpec queryPart = (QuerySpec) ( (SqlAstQueryPartProcessingState) walker.getCurrentProcessingState() ).getInflightQueryPart(); - final OrderByFragment fragment; - if ( pluralAttribute.getOrderByFragment() != null ) { - fragment = pluralAttribute.getOrderByFragment(); - } - else { - fragment = pluralAttribute.getManyToManyOrderByFragment(); - } - final String targetTableExpression; - if ( collectionDescriptor.getElementPersister() == null ) { - targetTableExpression = collectionDescriptor.getTableName(); - } - else { - targetTableExpression = collectionDescriptor.getElementPersister().getTableName(); - } - // We apply the fragment here and return null to signal that this is a no-op - fragment.apply( - queryPart, - new AuditingTableGroup( tableGroup, targetTableExpression ), - walker - ); - return null; - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/EnversLogging.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/EnversLogging.java deleted file mode 100644 index f5908309b49c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/EnversLogging.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal; - -import org.jboss.logging.Logger; - -import java.lang.invoke.MethodHandles; - -/** - * Sad when you need helpers for generating loggers... - * - * @author Steve Ebersole - */ -public class EnversLogging { - /** - * Disallow instantiation - */ - private EnversLogging() { - } - - public static EnversMessageLogger messageLogger(Class classNeedingLogging) { - return messageLogger( classNeedingLogging.getName() ); - } - - public static EnversMessageLogger messageLogger(String loggerName) { - return Logger.getMessageLogger( MethodHandles.lookup(), EnversMessageLogger .class, loggerName ); - } - - public static Logger logger(Class classNeedingLogging) { - return Logger.getLogger( classNeedingLogging ); - } - - public static Logger logger(String loggerName) { - return Logger.getLogger( loggerName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/EnversMessageLogger.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/EnversMessageLogger.java deleted file mode 100644 index b6e12c01d47f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/EnversMessageLogger.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal; - -import org.jboss.logging.BasicLogger; -import org.jboss.logging.annotations.MessageLogger; -import org.jboss.logging.annotations.ValidIdRange; - -/** - * The jboss-logging {@link MessageLogger} for the hibernate-envers module. It reserves message ids ranging from - * 25001 to 30000 inclusively. - *

- * New messages must be added after the last message defined to ensure message codes are unique. - */ -@MessageLogger(projectCode = "HHH") -@ValidIdRange(min = 25001, max = 30000) -public interface EnversMessageLogger extends BasicLogger { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/ComponentDescription.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/ComponentDescription.java deleted file mode 100644 index 53db4e649656..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/ComponentDescription.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import org.hibernate.envers.configuration.internal.metadata.reader.ComponentAuditingData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class ComponentDescription { - - private final ComponentType type; - private final String propertyName; - private final String auditMiddleEntityName; - private final MiddleIdData middleIdData; - private final ComponentAuditingData auditingData; - - private ComponentDescription(ComponentType type, - String propertyName, - String auditMiddleEntityName, - MiddleIdData middleIdData, - ComponentAuditingData componentAuditingData) { - this.type = type; - this.propertyName = propertyName; - this.auditMiddleEntityName = auditMiddleEntityName; - this.middleIdData = middleIdData; - this.auditingData = componentAuditingData; - } - - public static ComponentDescription many(String propertyName, String auditMiddleEntityName, MiddleIdData middleIdData) { - return new ComponentDescription( ComponentType.MANY, propertyName, auditMiddleEntityName, middleIdData, null ); - } - - public static ComponentDescription one(String propertyName, ComponentAuditingData componentAuditingData) { - return new ComponentDescription( ComponentType.ONE, propertyName, null, null, componentAuditingData ); - } - - public ComponentType getType() { - return type; - } - - public String getPropertyName() { - return propertyName; - } - - public String getAuditMiddleEntityName() { - return auditMiddleEntityName; - } - - public MiddleIdData getMiddleIdData() { - return middleIdData; - } - - public ComponentAuditingData getAuditingData() { - return auditingData; - } - - public enum ComponentType { - ONE, MANY - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntitiesConfigurations.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntitiesConfigurations.java deleted file mode 100644 index ef8e0a601fa1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntitiesConfigurations.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * Configuration of the user entities: property mapping of the entities, relations, inheritance. - * - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class EntitiesConfigurations { - private Map entitiesConfigurations; - private Map notAuditedEntitiesConfigurations; - - // Map versions entity name -> entity name - private Map entityNamesForVersionsEntityNames = new HashMap<>(); - - public EntitiesConfigurations( - Map entitiesConfigurations, - Map notAuditedEntitiesConfigurations) { - this.entitiesConfigurations = entitiesConfigurations; - this.notAuditedEntitiesConfigurations = notAuditedEntitiesConfigurations; - - generateBidirectionRelationInfo(); - generateVersionsEntityToEntityNames(); - } - - private void generateVersionsEntityToEntityNames() { - entityNamesForVersionsEntityNames = new HashMap<>(); - for ( Map.Entry entry : entitiesConfigurations.entrySet() ) { - entityNamesForVersionsEntityNames.put( entry.getValue().getVersionsEntityName(), entry.getKey() ); - } - } - - private void generateBidirectionRelationInfo() { - // Checking each relation if it is bidirectional. If so, storing that information. - for ( Map.Entry entry : entitiesConfigurations.entrySet() ) { - final String entityName = entry.getKey(); - final EntityConfiguration entCfg = entry.getValue(); - // Iterating over all relations from that entity - for ( RelationDescription relDesc : entCfg.getRelationsIterator() ) { - // If this is an "owned" relation, checking the related entity, if it has a relation that has - // a mapped-by attribute to the currently checked. If so, this is a bidirectional relation. - if ( relDesc.getRelationType() == RelationType.TO_ONE || - relDesc.getRelationType() == RelationType.TO_MANY_MIDDLE ) { - final EntityConfiguration entityConfiguration = entitiesConfigurations.get( relDesc.getToEntityName() ); - if ( entityConfiguration != null ) { - for ( RelationDescription other : entityConfiguration.getRelationsIterator() ) { - if ( relDesc.getFromPropertyName().equals( other.getMappedByPropertyName() ) && - (entityName.equals( other.getToEntityName() )) ) { - relDesc.setBidirectional( true ); - other.setBidirectional( true ); - } - } - } - } - } - } - } - - public EntityConfiguration get(String entityName) { - return entitiesConfigurations.get( entityName ); - } - - public EntityConfiguration getNotVersionEntityConfiguration(String entityName) { - return notAuditedEntitiesConfigurations.get( entityName ); - } - - public String getEntityNameForVersionsEntityName(String versionsEntityName) { - return entityNamesForVersionsEntityNames.get( versionsEntityName ); - } - - public boolean isVersioned(String entityName) { - return get( entityName ) != null; - } - - public boolean hasAuditedEntities() { - return entitiesConfigurations.size() != 0; - } - - public RelationDescription getRelationDescription(String entityName, String propertyName) { - final EntityConfiguration entCfg; - if ( isVersioned( entityName ) ) { - entCfg = get( entityName ); - } - else { - entCfg = getNotVersionEntityConfiguration( entityName ); - } - final RelationDescription relDesc = entCfg.getRelationDescription( propertyName ); - if ( relDesc != null ) { - return relDesc; - } - else if ( entCfg.getParentEntityName() != null ) { - // The field may be declared in a superclass ... - return getRelationDescription( entCfg.getParentEntityName(), propertyName ); - } - else { - return null; - } - } - - private Collection getRelationDescriptions(String entityName) { - final EntityConfiguration entCfg = entitiesConfigurations.get( entityName ); - Collection descriptions = new ArrayList<>(); - if ( entCfg.getParentEntityName() != null ) { - // collect descriptions from super classes - descriptions.addAll( getRelationDescriptions( entCfg.getParentEntityName() ) ); - } - for ( RelationDescription relationDescription : entCfg.getRelationsIterator() ) { - descriptions.add( relationDescription ); - } - return descriptions; - } - - public ComponentDescription getComponentDescription(final String entityName, final String propertyName) { - final EntityConfiguration entCfg; - if ( isVersioned( entityName ) ) { - entCfg = get( entityName ); - } - else { - entCfg = getNotVersionEntityConfiguration( entityName ); - } - final ComponentDescription relDesc = entCfg.getComponentDescription( propertyName ); - if ( relDesc != null ) { - return relDesc; - } - else if ( entCfg.getParentEntityName() != null ) { - // The field may be declared in a superclass ... - return getComponentDescription( entCfg.getParentEntityName(), propertyName ); - } - else { - return null; - } - } - - private void addWithParentEntityNames(String entityName, Set entityNames) { - entityNames.add( entityName ); - final EntityConfiguration entCfg = entitiesConfigurations.get( entityName ); - if ( entCfg.getParentEntityName() != null ) { - // collect descriptions from super classes - addWithParentEntityNames( entCfg.getParentEntityName(), entityNames ); - } - } - - private Set getEntityAndParentsNames(String entityName) { - final Set names = new HashSet<>(); - addWithParentEntityNames( entityName, names ); - return names; - } - - public Set getToPropertyNames(String fromEntityName, String fromPropertyName, String toEntityName) { - final Set entityAndParentsNames = getEntityAndParentsNames( fromEntityName ); - final Set toPropertyNames = new HashSet<>(); - for ( RelationDescription relationDescription : getRelationDescriptions( toEntityName ) ) { - final String relToEntityName = relationDescription.getToEntityName(); - final String mappedByPropertyName = relationDescription.getMappedByPropertyName(); - if ( entityAndParentsNames.contains( relToEntityName ) && mappedByPropertyName != null && mappedByPropertyName - .equals( fromPropertyName ) ) { - toPropertyNames.add( relationDescription.getFromPropertyName() ); - } - } - return toPropertyNames; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntityConfiguration.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntityConfiguration.java deleted file mode 100644 index 72a3e084b177..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntityConfiguration.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.envers.configuration.internal.metadata.reader.ComponentAuditingData; -import org.hibernate.envers.internal.entities.mapper.ExtendedPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; - -/** - * Runtime representation of an entity that may or may not be audited. - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Chris Cranford - */ -public class EntityConfiguration { - private final String versionsEntityName; - /** - * Holds the className for instantiation the configured entity - */ - private final String entityClassName; - private final IdMappingData idMappingData; - private final ExtendedPropertyMapper propertyMapper; - // Maps from property name - private final Map relations; - private final Map components; - private final String parentEntityName; - - public EntityConfiguration( - String versionsEntityName, - String entityClassName, - IdMappingData idMappingData, - ExtendedPropertyMapper propertyMapper, - String parentEntityName) { - this.versionsEntityName = versionsEntityName; - this.entityClassName = entityClassName; - this.idMappingData = idMappingData; - this.propertyMapper = propertyMapper; - this.parentEntityName = parentEntityName; - - this.relations = new HashMap<>(); - this.components = new HashMap<>(); - } - - public void addToOneRelation( - String fromPropertyName, - String toEntityName, - IdMapper idMapper, - boolean insertable, - boolean ignoreNotFound) { - relations.put( - fromPropertyName, - RelationDescription.toOne( - fromPropertyName, - RelationType.TO_ONE, - toEntityName, - null, - idMapper, - null, - null, - insertable, - ignoreNotFound - ) - ); - } - - public void addToOneNotOwningRelation( - String fromPropertyName, - String mappedByPropertyName, - String toEntityName, - IdMapper idMapper, - boolean ignoreNotFound) { - relations.put( - fromPropertyName, - RelationDescription.toOne( - fromPropertyName, - RelationType.TO_ONE_NOT_OWNING, - toEntityName, - mappedByPropertyName, - idMapper, - null, - null, - true, - ignoreNotFound - ) - ); - } - - public void addToManyNotOwningRelation( - String fromPropertyName, - String mappedByPropertyName, - String toEntityName, - IdMapper idMapper, - PropertyMapper fakeBidirectionalRelationMapper, - PropertyMapper fakeBidirectionalRelationIndexMapper, - boolean indexed) { - relations.put( - fromPropertyName, - RelationDescription.toMany( - fromPropertyName, - RelationType.TO_MANY_NOT_OWNING, - toEntityName, - mappedByPropertyName, - idMapper, - fakeBidirectionalRelationMapper, - fakeBidirectionalRelationIndexMapper, - null, - null, - null, - true, - indexed - ) - ); - } - - public void addToManyMiddleRelation( - String fromPropertyName, - String toEntityName, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - String auditMiddleEntityName) { - relations.put( - fromPropertyName, - RelationDescription.toMany( - fromPropertyName, - RelationType.TO_MANY_MIDDLE, - toEntityName, - null, - null, - null, - null, - referencingIdData, - referencedIdData, - auditMiddleEntityName, - true, - false - ) - ); - } - - public void addToManyMiddleNotOwningRelation( - String fromPropertyName, - String mappedByPropertyName, - String toEntityName, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - String auditMiddleEntityName) { - relations.put( - fromPropertyName, - RelationDescription.toMany( - fromPropertyName, - RelationType.TO_MANY_MIDDLE_NOT_OWNING, - toEntityName, - mappedByPropertyName, - null, - null, - null, - referencingIdData, - referencedIdData, - auditMiddleEntityName, - true, - false - ) - ); - } - - public void addToManyComponent(String propertyName, String auditMiddleEntityName, MiddleIdData middleIdData) { - components.put( propertyName, ComponentDescription.many( propertyName, auditMiddleEntityName, middleIdData ) ); - } - - public void addToOneComponent(String propertyName, ComponentAuditingData auditingData) { - components.put( propertyName, ComponentDescription.one( propertyName, auditingData ) ); - } - - public boolean isRelation(String propertyName) { - return relations.get( propertyName ) != null; - } - - public RelationDescription getRelationDescription(String propertyName) { - return relations.get( propertyName ); - } - - public ComponentDescription getComponentDescription(String propertyName) { - return components.get( propertyName ); - } - - public IdMappingData getIdMappingData() { - return idMappingData; - } - - public IdMapper getIdMapper() { - return idMappingData.getIdMapper(); - } - - public ExtendedPropertyMapper getPropertyMapper() { - return propertyMapper; - } - - public String getParentEntityName() { - return parentEntityName; - } - - /** - * @return the className for the configured entity - */ - public String getEntityClassName() { - return entityClassName; - } - - // For use by EntitiesConfigurations - - String getVersionsEntityName() { - return versionsEntityName; - } - - Iterable getRelationsIterator() { - return relations.values(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntityInstantiator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntityInstantiator.java deleted file mode 100644 index f1469815c2c9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/EntityInstantiator.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.ToOneDelegateSessionImplementor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; - - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - * @author Chris Cranford - */ -public class EntityInstantiator { - private final EnversService enversService; - private final AuditReaderImplementor versionsReader; - - public EntityInstantiator(EnversService enversService, AuditReaderImplementor versionsReader) { - this.enversService = enversService; - this.versionsReader = versionsReader; - } - - /** - * Creates an entity instance based on an entry from the versions table. - * - * @param entityName Name of the entity, which instances should be read - * @param versionsEntity An entry in the versions table, from which data should be mapped. - * @param revision Revision at which this entity was read. - * - * @return An entity instance, with versioned properties set as in the versionsEntity map, and proxies - * created for collections. - */ - public Object createInstanceFromVersionsEntity(String entityName, Map versionsEntity, Number revision) { - if ( versionsEntity == null ) { - return null; - } - - // The $type$ property holds the name of the (versions) entity - final String type = enversService.getEntitiesConfigurations() - .getEntityNameForVersionsEntityName( (String) versionsEntity.get( "$type$" ) ); - - if ( type != null ) { - entityName = type; - } - - // First mapping the primary key - final IdMapper idMapper = enversService.getEntitiesConfigurations().get( entityName ).getIdMapper(); - final Map originalId = (Map) versionsEntity.get( enversService.getConfig().getOriginalIdPropertyName() ); - - // Fixes HHH-4751 issue (@IdClass with @ManyToOne relation mapping inside) - // Note that identifiers are always audited - // Replace identifier proxies if do not point to audit tables - replaceNonAuditIdProxies( versionsEntity, revision ); - - final Object primaryKey = idMapper.mapToIdFromMap( originalId ); - - // Checking if the entity is in cache - if ( versionsReader.getFirstLevelCache().contains( entityName, revision, primaryKey ) ) { - return versionsReader.getFirstLevelCache().get( entityName, revision, primaryKey ); - } - - // If it is not in the cache, creating a new entity instance - Object ret = versionsReader.getSessionImplementor() - .getFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ) - .getRepresentationStrategy().getInstantiator() - .instantiate(); - - // Putting the newly created entity instance into the first level cache, in case a one-to-one bidirectional - // relation is present (which is eagerly loaded). - versionsReader.getFirstLevelCache().put( entityName, revision, primaryKey, ret ); - - enversService.getEntitiesConfigurations().get( entityName ).getPropertyMapper().mapToEntityFromMap( - enversService, - ret, - versionsEntity, - primaryKey, - versionsReader, - revision - ); - idMapper.mapToEntityFromMap( ret, originalId ); - - // Put entity on entityName cache after mapping it from the map representation - versionsReader.getFirstLevelCache().putOnEntityNameCache( primaryKey, revision, ret, entityName ); - - return ret; - } - - @SuppressWarnings("unchecked") - private void replaceNonAuditIdProxies(Map versionsEntity, Number revision) { - final Map originalId = (Map) versionsEntity.get( enversService.getConfig().getOriginalIdPropertyName() ); - for ( Object key : originalId.keySet() ) { - final Object value = originalId.get( key ); - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( value ); - if ( lazyInitializer != null ) { - final String entityName = lazyInitializer.getEntityName(); - final Object entityId = lazyInitializer.getInternalIdentifier(); - if ( enversService.getEntitiesConfigurations().isVersioned( entityName ) ) { - final String entityClassName = enversService.getEntitiesConfigurations().get( entityName ).getEntityClassName(); - final Class entityClass = ReflectionTools.loadClass( - entityClassName, - enversService.getClassLoaderService() - ); - final ToOneDelegateSessionImplementor delegate = new ToOneDelegateSessionImplementor( - versionsReader, - entityClass, - entityId, - revision, - RevisionType.DEL.equals( - versionsEntity.get( - enversService.getConfig().getRevisionTypePropertyName() - ) - ), - enversService - ); - originalId.put( - key, - versionsReader.getSessionImplementor() - .getFactory() - .getMappingMetamodel(). - getEntityDescriptor( entityName ) - .createProxy( entityId, delegate ) - ); - } - } - } - } - - @SuppressWarnings("unchecked") - public void addInstancesFromVersionsEntities( - String entityName, - Collection addTo, - List versionsEntities, - Number revision) { - for ( Map versionsEntity : versionsEntities ) { - addTo.add( createInstanceFromVersionsEntity( entityName, versionsEntity, revision ) ); - } - } - - public EnversService getEnversService() { - return enversService; - } - - public AuditReaderImplementor getAuditReaderImplementor() { - return versionsReader; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/IdMappingData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/IdMappingData.java deleted file mode 100644 index b8ba600a9810..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/IdMappingData.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import org.hibernate.envers.boot.model.Identifier; -import org.hibernate.envers.boot.model.IdentifierRelation; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class IdMappingData { - private final IdMapper idMapper; - private final Identifier identifier; - private final IdentifierRelation relation; - - public IdMappingData(IdMapper mapper, Identifier identifier, IdentifierRelation relation) { - this.idMapper = mapper; - this.identifier = identifier; - this.relation = relation; - } - - public IdMapper getIdMapper() { - return idMapper; - } - - public Identifier getIdentifier() { - return identifier; - } - - public IdentifierRelation getRelation() { - return relation; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/PropertyData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/PropertyData.java deleted file mode 100644 index 5071a3c8072a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/PropertyData.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import java.util.Objects; - -import org.hibernate.property.access.spi.PropertyAccessStrategy; -import org.hibernate.type.Type; - -/** - * The runtime representation of an audited property. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class PropertyData { - private final String name; - /** - * Name of the property in the bean. - */ - private final String beanName; - private final String accessType; - private boolean usingModifiedFlag; - private String modifiedFlagName; - // Synthetic properties are ones which are not part of the actual java model. - // They're properties used for bookkeeping by Hibernate - private boolean synthetic; - private Type propertyType; - private Class virtualReturnClass; - private PropertyAccessStrategy propertyAccessStrategy; - - /** - * Copies the given property data, except the name. - * - * @param newName New name. - * @param propertyData Property data to copy the rest of properties from. - */ - public PropertyData(String newName, PropertyData propertyData) { - this.name = newName; - this.beanName = propertyData.beanName; - this.accessType = propertyData.accessType; - - this.usingModifiedFlag = propertyData.usingModifiedFlag; - this.modifiedFlagName = propertyData.modifiedFlagName; - this.synthetic = propertyData.synthetic; - this.propertyType = propertyData.propertyType; - this.virtualReturnClass = propertyData.virtualReturnClass; - } - - /** - * @param name Name of the property. - * @param beanName Name of the property in the bean. - * @param accessType Accessor type for this property. - */ - public PropertyData(String name, String beanName, String accessType) { - this.name = name; - this.beanName = beanName; - this.accessType = accessType; - } - - public PropertyData(String name, String beanName, String accessType, Type propertyType) { - this( name, beanName, accessType ); - this.propertyType = propertyType; - } - - /** - * @param name Name of the property. - * @param beanName Name of the property in the bean. - * @param accessType Accessor type for this property. - * @param usingModifiedFlag Defines if field changes should be tracked - */ - public PropertyData( - String name, - String beanName, - String accessType, - boolean usingModifiedFlag, - String modifiedFlagName, - boolean synthetic) { - this( name, beanName, accessType ); - this.usingModifiedFlag = usingModifiedFlag; - this.modifiedFlagName = modifiedFlagName; - this.synthetic = synthetic; - } - - public PropertyData( - String name, - String beanName, - String accessType, - boolean usingModifiedFlag, - String modifiedFlagName, - boolean synthetic, - Type propertyType, - PropertyAccessStrategy propertyAccessStrategy) { - this( name, beanName, accessType, usingModifiedFlag, modifiedFlagName, synthetic, propertyType, null, propertyAccessStrategy ); - } - - public PropertyData( - String name, - String beanName, - String accessType, - boolean usingModifiedFlag, - String modifiedFlagName, - boolean synthetic, - Type propertyType, - Class virtualReturnClass, - PropertyAccessStrategy propertyAccessStrategy) { - this( name, beanName, accessType, usingModifiedFlag, modifiedFlagName, synthetic ); - this.propertyType = propertyType; - this.virtualReturnClass = virtualReturnClass; - this.propertyAccessStrategy = propertyAccessStrategy; - } - - public String getName() { - return name; - } - - public String getBeanName() { - return beanName; - } - - public String getAccessType() { - return accessType; - } - - public boolean isUsingModifiedFlag() { - return usingModifiedFlag; - } - - public String getModifiedFlagPropertyName() { - return modifiedFlagName; - } - - public boolean isSynthetic() { - return synthetic; - } - - public Type getType() { - return propertyType; - } - - public Class getVirtualReturnClass() { - return virtualReturnClass; - } - - public PropertyAccessStrategy getPropertyAccessStrategy() { - return propertyAccessStrategy; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - final PropertyData that = (PropertyData) o; - return usingModifiedFlag == that.usingModifiedFlag - && Objects.equals( accessType, that.accessType ) - && Objects.equals( beanName, that.beanName ) - && Objects.equals( name, that.name ) - && Objects.equals( synthetic, that.synthetic ); - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (beanName != null ? beanName.hashCode() : 0); - result = 31 * result + (accessType != null ? accessType.hashCode() : 0); - result = 31 * result + (usingModifiedFlag ? 1 : 0); - result = 31 * result + (synthetic ? 1 : 0); - return result; - } - - public static PropertyData forProperty(String propertyName, Type propertyType) { - return new PropertyData( - propertyName, - null, - null, - propertyType - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RelationDescription.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RelationDescription.java deleted file mode 100644 index 82a1e7d214c1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RelationDescription.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class RelationDescription { - private final String fromPropertyName; - private final RelationType relationType; - private final String toEntityName; - private final String mappedByPropertyName; - private final boolean ignoreNotFound; - private final IdMapper idMapper; - private final PropertyMapper fakeBidirectionalRelationMapper; - private final PropertyMapper fakeBidirectionalRelationIndexMapper; - private final MiddleIdData referencingIdData; - private final MiddleIdData referencedIdData; - private final String auditMiddleEntityName; - private final boolean insertable; - private final boolean indexed; - private boolean bidirectional; - - public static RelationDescription toOne( - String fromPropertyName, - RelationType relationType, - String toEntityName, - String mappedByPropertyName, - IdMapper idMapper, - PropertyMapper fakeBidirectionalRelationMapper, - PropertyMapper fakeBidirectionalRelationIndexMapper, - boolean insertable, - boolean ignoreNotFound) { - return new RelationDescription( - fromPropertyName, relationType, toEntityName, mappedByPropertyName, idMapper, - fakeBidirectionalRelationMapper, fakeBidirectionalRelationIndexMapper, null, null, null, insertable, ignoreNotFound, false - ); - } - - public static RelationDescription toMany( - String fromPropertyName, - RelationType relationType, - String toEntityName, - String mappedByPropertyName, - IdMapper idMapper, - PropertyMapper fakeBidirectionalRelationMapper, - PropertyMapper fakeBidirectionalRelationIndexMapper, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - String auditMiddleEntityName, - boolean insertable, - boolean indexed) { - // Envers populates collections by executing dedicated queries. Special handling of - // @NotFound(action = NotFoundAction.IGNORE) can be omitted in such case as exceptions - // (e.g. EntityNotFoundException, ObjectNotFoundException) are never thrown. - // Therefore assigning false to ignoreNotFound. - return new RelationDescription( - fromPropertyName, relationType, toEntityName, mappedByPropertyName, idMapper, fakeBidirectionalRelationMapper, - fakeBidirectionalRelationIndexMapper, referencingIdData, referencedIdData, auditMiddleEntityName, insertable, false, indexed - ); - } - - private RelationDescription( - String fromPropertyName, - RelationType relationType, - String toEntityName, - String mappedByPropertyName, - IdMapper idMapper, - PropertyMapper fakeBidirectionalRelationMapper, - PropertyMapper fakeBidirectionalRelationIndexMapper, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - String auditMiddleEntityName, - boolean insertable, - boolean ignoreNotFound, - boolean indexed) { - this.fromPropertyName = fromPropertyName; - this.relationType = relationType; - this.toEntityName = toEntityName; - this.mappedByPropertyName = mappedByPropertyName; - this.ignoreNotFound = ignoreNotFound; - this.idMapper = idMapper; - this.fakeBidirectionalRelationMapper = fakeBidirectionalRelationMapper; - this.fakeBidirectionalRelationIndexMapper = fakeBidirectionalRelationIndexMapper; - this.referencingIdData = referencingIdData; - this.referencedIdData = referencedIdData; - this.auditMiddleEntityName = auditMiddleEntityName; - this.insertable = insertable; - this.indexed = indexed; - this.bidirectional = false; - } - - public String getFromPropertyName() { - return fromPropertyName; - } - - public RelationType getRelationType() { - return relationType; - } - - public String getToEntityName() { - return toEntityName; - } - - public String getMappedByPropertyName() { - return mappedByPropertyName; - } - - public boolean isIgnoreNotFound() { - return ignoreNotFound; - } - - public IdMapper getIdMapper() { - return idMapper; - } - - public PropertyMapper getFakeBidirectionalRelationMapper() { - return fakeBidirectionalRelationMapper; - } - - public PropertyMapper getFakeBidirectionalRelationIndexMapper() { - return fakeBidirectionalRelationIndexMapper; - } - - public MiddleIdData getReferencingIdData() { - return referencingIdData; - } - - public MiddleIdData getReferencedIdData() { - return referencedIdData; - } - - public String getAuditMiddleEntityName() { - return auditMiddleEntityName; - } - - public boolean isInsertable() { - return insertable; - } - - public boolean isIndexed() { - return indexed; - } - - public boolean isBidirectional() { - return bidirectional; - } - - void setBidirectional(boolean bidirectional) { - this.bidirectional = bidirectional; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RelationType.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RelationType.java deleted file mode 100644 index 6ada34fa329b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RelationType.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - - -/** - * Type of a relation between two entities. - * - * @author Adam Warski (adam at warski dot org) - */ -public enum RelationType { - /** - * A single-reference-valued relation. The entity owns the relation. - */ - TO_ONE, - /** - * A single-reference-valued relation. The entity doesn't own the relation. It is directly mapped in the related - * entity. - */ - TO_ONE_NOT_OWNING, - /** - * A collection-of-references-valued relation. The entity doesn't own the relation. It is directly mapped in the - * related entity. - */ - TO_MANY_NOT_OWNING, - /** - * A collection-of-references-valued relation. The entity owns the relation. It is mapped using a middle table. - */ - TO_MANY_MIDDLE, - /** - * A collection-of-references-valued relation. The entity doesn't own the relation. It is mapped using a middle - * table. - */ - TO_MANY_MIDDLE_NOT_OWNING -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RevisionTimestampData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RevisionTimestampData.java deleted file mode 100644 index 21123f5cc2c6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RevisionTimestampData.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import java.util.Objects; - -/** - * @author Chris Cranford - * @author 6.0 - */ -public class RevisionTimestampData extends PropertyData { - - private final String typeName; - - public RevisionTimestampData(String name, String beanName, String accessType, String typeName) { - super( name, beanName, accessType ); - this.typeName = typeName; - } - - public RevisionTimestampData(RevisionTimestampData old, String typeName) { - this( old.getName(), old.getBeanName(), old.getAccessType(), typeName ); - } - - public String getTypeName() { - return typeName; - } - - public boolean isTimestampDate() { - return "date".equals( typeName ) - || "time".equals( typeName ) - || "timestamp".equals( typeName ); - } - - public boolean isTimestampLocalDateTime() { - return "LocalDateTime".equals( typeName ); - } - - public boolean isInstant() { - return "instant".equals( typeName ); - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + ( typeName != null ? typeName.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - if (!super.equals(o)) { - return false; - } - RevisionTimestampData that = (RevisionTimestampData) o; - return Objects.equals( typeName, that.typeName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RevisionTypeType.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RevisionTypeType.java deleted file mode 100644 index b0e1202fc34e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/RevisionTypeType.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities; - -import java.io.Serializable; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.Objects; - -import org.hibernate.HibernateException; -import org.hibernate.envers.RevisionType; -import org.hibernate.type.descriptor.WrapperOptions; -import org.hibernate.usertype.UserType; - -/** - * A hibernate type for the {@link RevisionType} enum. - * - * @author Adam Warski (adam at warski dot org) - */ -public class RevisionTypeType implements UserType, Serializable { - private static final long serialVersionUID = -1053201518229282688L; - - @Override - public int getSqlType() { - return Types.TINYINT; - } - - @Override - public Class returnedClass() { - return RevisionType.class; - } - - @Override - public RevisionType nullSafeGet(ResultSet rs, int position, WrapperOptions options) - throws SQLException { - byte byteValue = rs.getByte( position ); - if ( rs.wasNull() ) { - return null; - } - return RevisionType.fromRepresentation( byteValue ); - } - - @Override - public void nullSafeSet(PreparedStatement preparedStatement, RevisionType value, int index, WrapperOptions options) - throws SQLException { - if ( value == null ) { - preparedStatement.setNull( index, Types.TINYINT ); - } - else { - preparedStatement.setByte( index, value.getRepresentation() ); - } - } - - @Override - public RevisionType deepCopy(RevisionType value) throws HibernateException { - return value; - } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public RevisionType assemble(Serializable cached, Object owner) throws HibernateException { - return (RevisionType) cached; - } - - @Override - public Serializable disassemble(RevisionType value) throws HibernateException { - return value; - } - - @Override - public RevisionType replace(RevisionType original, RevisionType target, Object owner) throws HibernateException { - return original; - } - - @Override - public int hashCode(RevisionType x) throws HibernateException { - return x.hashCode(); - } - - @Override - public boolean equals(RevisionType x, RevisionType y) throws HibernateException { - return Objects.equals( x, y ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/AbstractMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/AbstractMapper.java deleted file mode 100644 index 6b7dc19ccebe..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/AbstractMapper.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; - -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.internal.util.ReflectHelper; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.service.ServiceRegistry; - -/** - * A base class for all entity mapper implementations. - * - * @author Chris Cranford - */ -public abstract class AbstractMapper { - - /** - * Get a value from the specified object. - * - * @param propertyData the property data, should not be {@literal null} - * @param object the object for which the value should be read, should not be {@literal null} - * @param serviceRegistry the service registry, should not be {@literal null} - * @param the return type - * @return the value read from the object, may be {@literal null} - */ - @SuppressWarnings("unchecked") - protected T getValueFromObject(PropertyData propertyData, Object object, ServiceRegistry serviceRegistry) { - final Getter getter = ReflectionTools.getGetter( object.getClass(), propertyData, serviceRegistry ); - return (T) getter.get( object ); - } - - /** - * Get a value from the specified object. - * - * @param propertyName the property name, should not be {@literal null} - * @param accessType the property access type, should not be {@literal null} - * @param object the object for which the value should be read, should not be {@literal null} - * @param serviceRegistry the service registry, should not be {@literal null} - * @param the return type - * @return the value read from the object, may be {@literal null} - */ - @SuppressWarnings("unchecked") - protected T getValueFromObject(String propertyName, String accessType, Object object, ServiceRegistry serviceRegistry) { - final Getter getter = ReflectionTools.getGetter( object.getClass(), propertyName, accessType, serviceRegistry ); - return (T) getter.get( object ); - } - - /** - * Set the specified value on the object. - * - * @param propertyData the property data, should not be {@literal null} - * @param object the object for which the value should be set, should not be {@literal null} - * @param value the value ot be set, may be {@literal null} - * @param serviceRegistry the service registry, should not be {@literal null} - */ - protected void setValueOnObject(PropertyData propertyData, Object object, Object value, ServiceRegistry serviceRegistry) { - final Setter setter = ReflectionTools.getSetter(object.getClass(), propertyData, serviceRegistry ); - setter.set( object, value ); - } - - /** - * Gets the value from the source object and sets the value in the destination object. - * - * @param propertyData the property data, should not be {@literal null} - * @param source the source object, should not be {@literal null} - * @param destination the destination object, should not be {@literal null} - * @param serviceRegistry the service registry, should not be {@literal null} - */ - protected void getAndSetValue(PropertyData propertyData, Object source, Object destination, ServiceRegistry serviceRegistry) { - final Getter getter = ReflectionTools.getGetter( source.getClass(), propertyData, serviceRegistry ); - final Setter setter = ReflectionTools.getSetter( destination.getClass(), propertyData, serviceRegistry ); - setter.set( destination, getter.get( source ) ); - } - - /** - * Creates a new object based on the specified class with the given constructor arguments. - * - * @param clazz the class, must not be {@literal null} - * @param args the variadic constructor arguments, may be omitted. - * @param the return class type - * @return a new instance of the class - */ - protected T newObjectInstance(Class clazz, Object... args) { - try { - final Constructor constructor = ReflectHelper.getDefaultConstructor( clazz ); - if ( constructor == null ) { - throw new AuditException( "Failed to locate default constructor for class: " + clazz.getName() ); - } - return constructor.newInstance( args ); - } - catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - throw new AuditException( e ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/AbstractPropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/AbstractPropertyMapper.java deleted file mode 100644 index df6f36ce4904..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/AbstractPropertyMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -/** - * Abstract implementation of a {@link PropertyMapper}. - * - * @author Chris Cranford - */ -public abstract class AbstractPropertyMapper extends AbstractMapper implements PropertyMapper { - private boolean map; - - @Override - public void markAsDynamicComponentMap() { - this.map = true; - } - - @Override - public boolean isDynamicComponentMap() { - return map; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ComponentPropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ComponentPropertyMapper.java deleted file mode 100644 index 1090c2d0e731..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ComponentPropertyMapper.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.internal.util.ReflectHelper; -import org.hibernate.metamodel.spi.EmbeddableInstantiator; -import org.hibernate.property.access.spi.Setter; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Lukasz Zuchowski (author at zuchos dot com) - * @author Chris Cranford - */ -public class ComponentPropertyMapper extends AbstractPropertyMapper implements CompositeMapperBuilder { - private final PropertyData propertyData; - private final MultiPropertyMapper delegate; - private final Class componentClass; - private final EmbeddableInstantiator embeddableInstantiator; - - public ComponentPropertyMapper( - PropertyData propertyData, - Class componentClass, - EmbeddableInstantiator instantiator) { - this.propertyData = propertyData; - this.embeddableInstantiator = instantiator; - //if class is a map it means that this is dynamic component - if ( Map.class.isAssignableFrom( componentClass ) ) { - this.delegate = new MultiDynamicComponentMapper( propertyData ); - this.componentClass = HashMap.class; - } - else { - this.delegate = new MultiPropertyMapper(); - this.componentClass = componentClass; - } - } - - @Override - public void add(PropertyData propertyData) { - delegate.add( propertyData ); - } - - @Override - public CompositeMapperBuilder addComponent( - PropertyData propertyData, - Class componentClass, - EmbeddableInstantiator instantiator) { - return delegate.addComponent( propertyData, componentClass, instantiator ); - } - - @Override - public void addComposite(PropertyData propertyData, PropertyMapper propertyMapper) { - delegate.addComposite( propertyData, propertyMapper ); - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - return delegate.mapToMapFromEntity( session, data, newObj, oldObj ); - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - if ( propertyData.isUsingModifiedFlag() ) { - data.put( - propertyData.getModifiedFlagPropertyName(), - delegate.mapToMapFromEntity( session, new HashMap<>(), newObj, oldObj ) - ); - } - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - if ( propertyData.isUsingModifiedFlag() ) { - boolean hasModifiedCollection = false; - for ( PropertyData propData : delegate.getProperties().keySet() ) { - if ( collectionPropertyName.equals( propData.getName() ) ) { - hasModifiedCollection = true; - break; - } - } - data.put( propertyData.getModifiedFlagPropertyName(), hasModifiedCollection ); - } - } - - @Override - public void mapToEntityFromMap( - final EnversService enversService, - final Object obj, - final Map data, - final Object primaryKey, - final AuditReaderImplementor versionsReader, - final Number revision) { - if ( data == null || obj == null ) { - return; - } - - if ( propertyData.getBeanName() == null ) { - // If properties are not encapsulated in a component but placed directly in a class - // (e.g. by applying tag). - delegate.mapToEntityFromMap( enversService, obj, data, primaryKey, versionsReader, revision ); - return; - } - - try { - - if ( isDynamicComponentMap() ) { - final Object subObj = ReflectHelper.getDefaultConstructor( componentClass ).newInstance(); - ( (Map) obj ).put( propertyData.getBeanName(), subObj ); - delegate.mapToEntityFromMap( enversService, subObj, data, primaryKey, versionsReader, revision ); - } - else { - final Setter setter = ReflectionTools.getSetter( - obj.getClass(), - propertyData, - enversService.getServiceRegistry() - ); - - if ( isAllPropertiesNull( data ) ) { - // single property, but default value need not be null, so we'll set it to null anyway - setter.set( obj, null ); - } - else { - final Object subObj; - if ( embeddableInstantiator != null ) { - final Object[] values = new Object[delegate.properties.size()]; - int i = 0; - for ( Map.Entry entry : delegate.properties.entrySet() ) { - values[i] = entry.getValue().mapToEntityFromMap( - enversService, - data, - primaryKey, - versionsReader, - revision - ); - i++; - } - subObj = embeddableInstantiator.instantiate( () -> values ); - } - else { - subObj = ReflectHelper.getDefaultConstructor( componentClass ).newInstance(); - delegate.mapToEntityFromMap( - enversService, - subObj, - data, - primaryKey, - versionsReader, - revision - ); - } - // set the component - setter.set( obj, subObj ); - } - } - } - catch ( Exception e ) { - throw new AuditException( e ); - } - } - - @Override - public Object mapToEntityFromMap( - final EnversService enversService, - final Map data, - final Object primaryKey, - final AuditReaderImplementor versionsReader, - final Number revision) { - if ( data == null || propertyData.getBeanName() == null ) { - // If properties are not encapsulated in a component but placed directly in a class - // (e.g. by applying tag). - return null; - } - - try { - final Object subObj; - if ( isDynamicComponentMap() ) { - subObj = ReflectHelper.getDefaultConstructor( componentClass ).newInstance(); - delegate.mapToEntityFromMap( enversService, subObj, data, primaryKey, versionsReader, revision ); - } - else { - if ( isAllPropertiesNull( data ) ) { - // single property, but default value need not be null, so we'll set it to null anyway - subObj = null; - } - else { - if ( embeddableInstantiator != null ) { - final Object[] values = new Object[delegate.properties.size()]; - int i = 0; - for ( Map.Entry entry : delegate.properties.entrySet() ) { - values[i] = entry.getValue().mapToEntityFromMap( - enversService, - data, - primaryKey, - versionsReader, - revision - ); - i++; - } - subObj = embeddableInstantiator.instantiate( () -> values ); - } - else { - subObj = ReflectHelper.getDefaultConstructor( componentClass ).newInstance(); - delegate.mapToEntityFromMap( - enversService, - subObj, - data, - primaryKey, - versionsReader, - revision - ); - } - } - } - return subObj; - } - catch ( Exception e ) { - throw new AuditException( e ); - } - } - - private boolean isAllPropertiesNull(Map data) { - for ( Map.Entry property : delegate.getProperties().entrySet() ) { - final Object value = data.get( property.getKey().getName() ); - if ( value != null || !( property.getValue() instanceof SinglePropertyMapper ) ) { - return false; - } - } - return true; - } - - @Override - public List mapCollectionChanges( - SessionImplementor session, String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, Object id) { - return delegate.mapCollectionChanges( session, referencingPropertyName, newColl, oldColl, id ); - } - - @Override - public Map getProperties() { - return delegate.getProperties(); - } - - @Override - public boolean hasPropertiesWithModifiedFlag() { - return delegate.hasPropertiesWithModifiedFlag(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/CompositeMapperBuilder.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/CompositeMapperBuilder.java deleted file mode 100644 index e05d12aff3ca..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/CompositeMapperBuilder.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.util.Map; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.metamodel.spi.EmbeddableInstantiator; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface CompositeMapperBuilder extends SimpleMapperBuilder { - CompositeMapperBuilder addComponent( - PropertyData propertyData, - Class componentClass, EmbeddableInstantiator instantiator); - - void addComposite(PropertyData propertyData, PropertyMapper propertyMapper); - - Map getProperties(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/DynamicComponentMapperSupport.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/DynamicComponentMapperSupport.java deleted file mode 100644 index 545428905c84..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/DynamicComponentMapperSupport.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -/** - * Contract for {@link PropertyMapper} implementations to expose whether they should be included - * as a wrapper for a {@code } mapping. - * - * In this mapping, values are actually stored as a key-value pair in a HashMap rather than - * them being treated as java-bean values using a setter method. - * - * @author Chris Cranford - */ -public interface DynamicComponentMapperSupport { - /** - * Mark the property mapper that it wraps a dynamic-component. - */ - void markAsDynamicComponentMap(); - - /** - * Returns whether the property mapper wraps a dynamic-component. - */ - boolean isDynamicComponentMap(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ExtendedPropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ExtendedPropertyMapper.java deleted file mode 100644 index 625a9c245745..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ExtendedPropertyMapper.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface ExtendedPropertyMapper extends PropertyMapper, CompositeMapperBuilder { - boolean map( - SessionImplementor session, - Map data, - String[] propertyNames, - Object[] newState, - Object[] oldState); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ModifiedFlagMapperSupport.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ModifiedFlagMapperSupport.java deleted file mode 100644 index cb72726024bc..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/ModifiedFlagMapperSupport.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -/** - * Contract for {@link PropertyMapper} implementations to expose whether they contain any property - * that uses {@link org.hibernate.envers.internal.entities.PropertyData#isUsingModifiedFlag()}. - * - * @author Chris Cranford - */ -public interface ModifiedFlagMapperSupport { - /** - * Returns whether the associated {@link PropertyMapper} has any properties that use - * the {@code witModifiedFlag} feature. - * - * @return {@code true} if a property uses {@code withModifiedFlag}, otherwise {@code false}. - */ - boolean hasPropertiesWithModifiedFlag(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/MultiDynamicComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/MultiDynamicComponentMapper.java deleted file mode 100644 index 769c7f25b0c0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/MultiDynamicComponentMapper.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Multi mapper for dynamic components (it knows that component is a map, not a class) - * - * @author Lukasz Zuchowski (author at zuchos dot com) - * @author Chris Cranford - */ -public class MultiDynamicComponentMapper extends MultiPropertyMapper { - - private PropertyData dynamicComponentData; - - public MultiDynamicComponentMapper(PropertyData dynamicComponentData) { - this.dynamicComponentData = dynamicComponentData; - } - - @Override - public void addComposite(PropertyData propertyData, PropertyMapper propertyMapper) { - // delegate to the super implementation and then mark the property mapper as a dynamic-component map. - super.addComposite( propertyData, propertyMapper ); - propertyMapper.markAsDynamicComponentMap(); - } - - @Override - public void add(PropertyData propertyData) { - final SinglePropertyMapper single = new SinglePropertyMapper(); - single.add( propertyData ); - - // delegate to our implementation of #addComposite for specialized behavior. - addComposite( propertyData, single ); - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - boolean ret = false; - for ( Map.Entry entry : properties.entrySet() ) { - final PropertyData propertyData = entry.getKey(); - final PropertyMapper propertyMapper = entry.getValue(); - if ( newObj == null && oldObj == null ) { - return false; - } - Object newValue = newObj == null ? null : getValue( newObj, propertyData ); - Object oldValue = oldObj == null ? null : getValue( oldObj, propertyData ); - - ret |= propertyMapper.mapToMapFromEntity( session, data, newValue, oldValue ); - } - - return ret; - } - - private Object getValue(Object newObj, PropertyData propertyData) { - return ( (Map) newObj ).get( propertyData.getBeanName() ); - } - - @Override - public boolean map( - SessionImplementor session, - Map data, - String[] propertyNames, - Object[] newState, - Object[] oldState) { - boolean ret = false; - for ( int i = 0; i < propertyNames.length; i++ ) { - final String propertyName = propertyNames[i]; - Map propertyDatas = getPropertyDatas(); - if ( propertyDatas.containsKey( propertyName ) ) { - final PropertyMapper propertyMapper = properties.get( propertyDatas.get( propertyName ) ); - final Object newObj = getAtIndexOrNull( newState, i ); - final Object oldObj = getAtIndexOrNull( oldState, i ); - ret |= propertyMapper.mapToMapFromEntity( session, data, newObj, oldObj ); - propertyMapper.mapModifiedFlagsToMapFromEntity( session, data, newObj, oldObj ); - } - } - - return ret; - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - for ( Map.Entry entry : properties.entrySet() ) { - final PropertyData propertyData = entry.getKey(); - final PropertyMapper propertyMapper = entry.getValue(); - if ( newObj == null && oldObj == null ) { - return; - } - Object newValue = newObj == null ? null : getValue( newObj, propertyData ); - Object oldValue = oldObj == null ? null : getValue( oldObj, propertyData ); - propertyMapper.mapModifiedFlagsToMapFromEntity( session, data, newValue, oldValue ); - } - } - - @Override - public void mapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - for ( PropertyMapper mapper : properties.values() ) { - mapper.mapToEntityFromMap( enversService, obj, data, primaryKey, versionsReader, revision ); - } - } - - @Override - public Object mapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - return null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/MultiPropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/MultiPropertyMapper.java deleted file mode 100644 index e8aeaf9e6ac2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/MultiPropertyMapper.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.MappingTools; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.envers.internal.tools.Tools; -import org.hibernate.envers.tools.Pair; -import org.hibernate.metamodel.spi.EmbeddableInstantiator; -import org.hibernate.property.access.spi.Getter; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Lukasz Zuchowski (author at zuchos dot com) - * @author Chris Cranford - */ -public class MultiPropertyMapper extends AbstractPropertyMapper implements ExtendedPropertyMapper { - protected final Map properties; - private final Map propertyDatas; - - public MultiPropertyMapper() { - properties = Tools.newLinkedHashMap(); - propertyDatas = Tools.newLinkedHashMap(); - } - - @Override - public void add(PropertyData propertyData) { - final SinglePropertyMapper single = new SinglePropertyMapper(); - single.add( propertyData ); - properties.put( propertyData, single ); - propertyDatas.put( propertyData.getName(), propertyData ); - } - - @Override - public CompositeMapperBuilder addComponent( - PropertyData propertyData, - Class componentClass, EmbeddableInstantiator instantiator) { - if ( properties.get( propertyData ) != null ) { - // This is needed for second pass to work properly in the components mapper - return (CompositeMapperBuilder) properties.get( propertyData ); - } - - final ComponentPropertyMapper componentMapperBuilder = new ComponentPropertyMapper( - propertyData, - componentClass, - instantiator - ); - addComposite( propertyData, componentMapperBuilder ); - - return componentMapperBuilder; - } - - @Override - public void addComposite(PropertyData propertyData, PropertyMapper propertyMapper) { - properties.put( propertyData, propertyMapper ); - propertyDatas.put( propertyData.getName(), propertyData ); - } - - protected Object getAtIndexOrNull(Object[] array, int index) { - return array == null ? null : array[index]; - } - - @Override - public boolean map( - SessionImplementor session, - Map data, - String[] propertyNames, - Object[] newState, - Object[] oldState) { - boolean ret = false; - for ( int i = 0; i < propertyNames.length; i++ ) { - final String propertyName = propertyNames[i]; - - if ( propertyDatas.containsKey( propertyName ) ) { - final PropertyMapper propertyMapper = properties.get( propertyDatas.get( propertyName ) ); - final Object newObj = getAtIndexOrNull( newState, i ); - final Object oldObj = getAtIndexOrNull( oldState, i ); - ret |= propertyMapper.mapToMapFromEntity( session, data, newObj, oldObj ); - propertyMapper.mapModifiedFlagsToMapFromEntity( session, data, newObj, oldObj ); - } - } - - return ret; - } - - @Override - public boolean mapToMapFromEntity( - final SessionImplementor session, - final Map data, - final Object newObj, - final Object oldObj) { - boolean ret = false; - for ( Map.Entry entry : properties.entrySet() ) { - final PropertyData propertyData = entry.getKey(); - final PropertyMapper propertyMapper = entry.getValue(); - - // synthetic properties are not part of the entity model; therefore they should be ignored. - if ( propertyData.isSynthetic() ) { - continue; - } - - Getter getter; - if ( newObj != null ) { - getter = ReflectionTools.getGetter( - newObj.getClass(), - propertyData, - session.getFactory().getServiceRegistry() - ); - } - else if ( oldObj != null ) { - getter = ReflectionTools.getGetter( - oldObj.getClass(), - propertyData, - session.getFactory().getServiceRegistry() - ); - } - else { - return false; - } - - ret |= propertyMapper.mapToMapFromEntity( - session, data, - newObj == null ? null : getter.get( newObj ), - oldObj == null ? null : getter.get( oldObj ) - ); - } - return ret; - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - final SessionImplementor session, - final Map data, - final Object newObj, - final Object oldObj) { - for ( Map.Entry entry : properties.entrySet() ) { - final PropertyData propertyData = entry.getKey(); - final PropertyMapper propertyMapper = entry.getValue(); - - // synthetic properties are not part of the entity model; therefore they should be ignored. - if ( propertyData.isSynthetic() ) { - continue; - } - - Getter getter; - if ( newObj != null ) { - getter = ReflectionTools.getGetter( - newObj.getClass(), - propertyData, - session.getFactory().getServiceRegistry() - ); - } - else if ( oldObj != null ) { - getter = ReflectionTools.getGetter( - oldObj.getClass(), - propertyData, - session.getFactory().getServiceRegistry() - ); - } - else { - break; - } - - propertyMapper.mapModifiedFlagsToMapFromEntity( - session, data, - newObj == null ? null : getter.get( newObj ), - oldObj == null ? null : getter.get( oldObj ) - ); - } - } - - @Override - public void mapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - for ( PropertyMapper mapper : properties.values() ) { - mapper.mapToEntityFromMap( enversService, obj, data, primaryKey, versionsReader, revision ); - } - } - - @Override - public Object mapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - return null; - } - - private Pair getMapperAndDelegatePropName(String referencingPropertyName) { - // Name of the property, to which we will delegate the mapping. - String delegatePropertyName; - - // Checking if the property name doesn't reference a collection in a component - then the name will containa a . - final int dotIndex = referencingPropertyName.indexOf( '.' ); - if ( dotIndex != -1 ) { - // Computing the name of the component - final String componentName = referencingPropertyName.substring( 0, dotIndex ); - // And the name of the property in the component - final String propertyInComponentName = MappingTools.createComponentPrefix( componentName ) - + referencingPropertyName.substring( dotIndex + 1 ); - - // We need to get the mapper for the component. - referencingPropertyName = componentName; - // As this is a component, we delegate to the property in the component. - delegatePropertyName = propertyInComponentName; - } - else { - // If this is not a component, we delegate to the same property. - delegatePropertyName = referencingPropertyName; - } - return Pair.make( properties.get( propertyDatas.get( referencingPropertyName ) ), delegatePropertyName ); - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - final Pair pair = getMapperAndDelegatePropName( collectionPropertyName ); - final PropertyMapper mapper = pair.getFirst(); - if ( mapper != null ) { - mapper.mapModifiedFlagsToMapForCollectionChange( pair.getSecond(), data ); - } - } - - @Override - public List mapCollectionChanges( - SessionImplementor session, - String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, Object id) { - final Pair pair = getMapperAndDelegatePropName( referencingPropertyName ); - final PropertyMapper mapper = pair.getFirst(); - if ( mapper != null ) { - return mapper.mapCollectionChanges( session, pair.getSecond(), newColl, oldColl, id ); - } - else { - return null; - } - } - - @Override - public Map getProperties() { - return properties; - } - - public Map getPropertyDatas() { - return propertyDatas; - } - - @Override - public boolean hasPropertiesWithModifiedFlag() { - for ( PropertyData property : getProperties().keySet() ) { - if ( property.isUsingModifiedFlag() ) { - return true; - } - } - return false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/PersistentCollectionChangeData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/PersistentCollectionChangeData.java deleted file mode 100644 index 2d5062233690..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/PersistentCollectionChangeData.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.util.Map; - -import org.hibernate.envers.tools.Pair; - -/** - * Data describing the change of a single object in a persistent collection (when the object was added, removed or - * modified in the collection). - * - * @author Adam Warski (adam at warski dot org) - */ -public class PersistentCollectionChangeData { - private final String entityName; - private final Map data; - private final Object changedElement; - - public PersistentCollectionChangeData(String entityName, Map data, Object changedElement) { - this.entityName = entityName; - this.data = data; - this.changedElement = changedElement; - } - - /** - * @return Name of the (middle) entity that holds the collection data. - */ - public String getEntityName() { - return entityName; - } - - public Map getData() { - return data; - } - - /** - * @return The affected element, which was changed (added, removed, modified) in the collection. - */ - public Object getChangedElement() { - if ( changedElement instanceof Pair ) { - return ( (Pair) changedElement ).getSecond(); - } - - if ( changedElement instanceof Map.Entry ) { - return ( (Map.Entry) changedElement ).getValue(); - } - - return changedElement; - } - - /** - * @return Index of the affected element, or {@code null} if the collection isn't indexed. - */ - public Object getChangedElementIndex() { - if ( changedElement instanceof Pair ) { - return ( (Pair) changedElement ).getFirst(); - } - - if ( changedElement instanceof Map.Entry ) { - return ( (Map.Entry) changedElement ).getKey(); - } - - return null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/PropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/PropertyMapper.java deleted file mode 100644 index 1309f521e6ac..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/PropertyMapper.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public interface PropertyMapper extends ModifiedFlagMapperSupport, DynamicComponentMapperSupport { - /** - * Maps properties to the given map, basing on differences between properties of new and old objects. - * - * @param session The current session. - * @param data Data to map to. - * @param newObj New state of the entity. - * @param oldObj Old state of the entity. - * - * @return True if there are any differences between the states represented by newObj and oldObj. - */ - boolean mapToMapFromEntity(SessionImplementor session, Map data, Object newObj, Object oldObj); - - /** - * Maps properties from the given map to the given object. - * - * @param enversService The EnversService. - * @param obj Object to map to. - * @param data Data to map from. - * @param primaryKey Primary key of the object to which we map (for relations) - * @param versionsReader VersionsReader for reading relations - * @param revision Revision at which the object is read, for reading relations - */ - void mapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision); - - Object mapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision); - - /** - * Maps collection changes. - * - * @param session The current session. - * @param referencingPropertyName Name of the field, which holds the collection in the entity. - * @param newColl New collection, after updates. - * @param oldColl Old collection, before updates. - * @param id Id of the object owning the collection. - * - * @return List of changes that need to be performed on the persistent store. - */ - List mapCollectionChanges( - SessionImplementor session, String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, Object id); - - void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj); - - void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SimpleMapperBuilder.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SimpleMapperBuilder.java deleted file mode 100644 index 914dfab89630..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SimpleMapperBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import org.hibernate.envers.internal.entities.PropertyData; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface SimpleMapperBuilder { - void add(PropertyData propertyData); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SinglePropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SinglePropertyMapper.java deleted file mode 100644 index 4dfd04347540..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SinglePropertyMapper.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import org.hibernate.HibernateException; -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.DialectDelegateWrapper; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.property.access.spi.SetterFieldImpl; - -/** - * TODO: diff - * - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public class SinglePropertyMapper extends AbstractPropertyMapper implements SimpleMapperBuilder { - private PropertyData propertyData; - - public SinglePropertyMapper(PropertyData propertyData) { - this.propertyData = propertyData; - } - - public SinglePropertyMapper() { - } - - @Override - public void add(PropertyData propertyData) { - if ( this.propertyData != null ) { - throw new AuditException( "Only one property can be added!" ); - } - - this.propertyData = propertyData; - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - data.put( propertyData.getName(), newObj ); - boolean dbLogicallyDifferent = true; - Dialect dialect = session.getFactory().getJdbcServices() - .getDialect(); - dialect = DialectDelegateWrapper.extractRealDialect( dialect ); - if ( ( dialect instanceof OracleDialect ) && (newObj instanceof String || oldObj instanceof String) ) { - // Don't generate new revision when database replaces empty string with NULL during INSERT or UPDATE statements. - dbLogicallyDifferent = !(StringTools.isEmpty( newObj ) && StringTools.isEmpty( oldObj )); - } - return dbLogicallyDifferent && !areEqual( newObj, oldObj ); - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - // Synthetic properties are not subject to withModifiedFlag analysis - if ( propertyData.isUsingModifiedFlag() && !propertyData.isSynthetic() ) { - data.put( propertyData.getModifiedFlagPropertyName(), !areEqual( newObj, oldObj ) ); - } - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - } - - @Override - public void mapToEntityFromMap( - final EnversService enversService, - final Object obj, - final Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - // synthetic properties are not part of the entity model; therefore they should be ignored. - if ( data == null || obj == null || propertyData.isSynthetic() ) { - return; - } - - final Object value = data.get( propertyData.getName() ); - - if ( isDynamicComponentMap() ) { - @SuppressWarnings("unchecked") - final Map map = (Map) obj; - map.put( propertyData.getBeanName(), value ); - } - else { - final Setter setter = ReflectionTools.getSetter( - obj.getClass(), - propertyData, - enversService.getServiceRegistry() - ); - - // We only set a null value if the field is not primitive. Otherwise, we leave it intact. - if ( value != null || !isPrimitive( setter, propertyData, obj.getClass() ) ) { - setter.set( obj, value ); - } - } - } - - @Override - public Object mapToEntityFromMap( - final EnversService enversService, - final Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - // synthetic properties are not part of the entity model; therefore they should be ignored. - if ( data == null || propertyData.isSynthetic() ) { - return null; - } - - return data.get( propertyData.getName() ); - } - - private boolean isPrimitive(Setter setter, PropertyData propertyData, Class cls) { - if ( cls == null ) { - throw new HibernateException( "No field found for property: " + propertyData.getName() ); - } - - if ( setter instanceof SetterFieldImpl ) { - // In a direct setter, getMethod() returns null - // Trying to look up the field - try { - return cls.getDeclaredField( propertyData.getBeanName() ).getType().isPrimitive(); - } - catch (NoSuchFieldException e) { - return isPrimitive( setter, propertyData, cls.getSuperclass() ); - } - } - else { - return setter.getMethod().getParameterTypes()[0].isPrimitive(); - } - } - - @Override - public List mapCollectionChanges( - SessionImplementor sessionImplementor, - String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, - Object id) { - return null; - } - - @Override - public boolean hasPropertiesWithModifiedFlag() { - return propertyData != null && propertyData.isUsingModifiedFlag(); - } - - private boolean areEqual(Object newObj, Object oldObj) { - // Should a Type have been specified on the property mapper, delegate there to make sure - // that proper equality comparison occurs based on the Type's semantics rather than the - // generalized EqualsHelper #areEqual call. - if ( propertyData.getType() != null ) { - return propertyData.getType().isEqual( newObj, oldObj ); - } - // todo (6.0) - Confirm if this is still necessary as everything should use a JavaTypeDescriptor. - // This was maintained for legacy 5.2 behavior only. - return Objects.deepEquals( newObj, oldObj ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SubclassPropertyMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SubclassPropertyMapper.java deleted file mode 100644 index 1c1518b62e8f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/SubclassPropertyMapper.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.metamodel.spi.EmbeddableInstantiator; - -/** - * A mapper which maps from a parent mapper and a "main" one, but adds only to the "main". The "main" mapper - * should be the mapper of the subclass. - * - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public class SubclassPropertyMapper extends AbstractPropertyMapper implements ExtendedPropertyMapper { - private ExtendedPropertyMapper main; - private ExtendedPropertyMapper parentMapper; - - public SubclassPropertyMapper(ExtendedPropertyMapper main, ExtendedPropertyMapper parentMapper) { - this.main = main; - this.parentMapper = parentMapper; - } - - @Override - public boolean map( - SessionImplementor session, - Map data, - String[] propertyNames, - Object[] newState, - Object[] oldState) { - final boolean parentDiffs = parentMapper.map( session, data, propertyNames, newState, oldState ); - final boolean mainDiffs = main.map( session, data, propertyNames, newState, oldState ); - - return parentDiffs || mainDiffs; - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - final boolean parentDiffs = parentMapper.mapToMapFromEntity( session, data, newObj, oldObj ); - final boolean mainDiffs = main.mapToMapFromEntity( session, data, newObj, oldObj ); - - return parentDiffs || mainDiffs; - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - parentMapper.mapModifiedFlagsToMapFromEntity( session, data, newObj, oldObj ); - main.mapModifiedFlagsToMapFromEntity( session, data, newObj, oldObj ); - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - parentMapper.mapModifiedFlagsToMapForCollectionChange( collectionPropertyName, data ); - main.mapModifiedFlagsToMapForCollectionChange( collectionPropertyName, data ); - } - - @Override - public void mapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - parentMapper.mapToEntityFromMap( enversService, obj, data, primaryKey, versionsReader, revision ); - main.mapToEntityFromMap( enversService, obj, data, primaryKey, versionsReader, revision ); - } - - @Override - public Object mapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - return null; - } - - @Override - public List mapCollectionChanges( - SessionImplementor session, String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, Object id) { - final List parentCollectionChanges = parentMapper.mapCollectionChanges( - session, - referencingPropertyName, - newColl, - oldColl, - id - ); - - final List mainCollectionChanges = main.mapCollectionChanges( - session, - referencingPropertyName, - newColl, - oldColl, - id - ); - - if ( parentCollectionChanges == null ) { - return mainCollectionChanges; - } - else { - if ( mainCollectionChanges != null ) { - parentCollectionChanges.addAll( mainCollectionChanges ); - } - return parentCollectionChanges; - } - } - - @Override - public CompositeMapperBuilder addComponent( - PropertyData propertyData, - Class componentClass, EmbeddableInstantiator instantiator) { - return main.addComponent( propertyData, componentClass, instantiator ); - } - - @Override - public void addComposite(PropertyData propertyData, PropertyMapper propertyMapper) { - main.addComposite( propertyData, propertyMapper ); - } - - @Override - public void add(PropertyData propertyData) { - main.add( propertyData ); - } - - @Override - public Map getProperties() { - final Map joinedProperties = new HashMap<>(); - joinedProperties.putAll( parentMapper.getProperties() ); - joinedProperties.putAll( main.getProperties() ); - return joinedProperties; - } - - @Override - public boolean hasPropertiesWithModifiedFlag() { - // checks all properties, exposed both by the main mapper and parent mapper. - for ( PropertyData property : getProperties().keySet() ) { - if ( property.isUsingModifiedFlag() ) { - return true; - } - } - return false; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/AbstractCompositeIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/AbstractCompositeIdMapper.java deleted file mode 100644 index 6c49e32f1277..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/AbstractCompositeIdMapper.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.Map; - -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.Tools; -import org.hibernate.internal.util.ReflectHelper; -import org.hibernate.service.ServiceRegistry; - -/** - * An abstract identifier mapper implementation specific for composite identifiers. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class AbstractCompositeIdMapper extends AbstractIdMapper implements SimpleIdMapperBuilder { - protected final Class compositeIdClass; - - protected Map ids; - - protected AbstractCompositeIdMapper(Class compositeIdClass, ServiceRegistry serviceRegistry) { - super( serviceRegistry ); - this.compositeIdClass = compositeIdClass; - ids = Tools.newLinkedHashMap(); - } - - @Override - public void add(PropertyData propertyData) { - add( propertyData, new SingleIdMapper( getServiceRegistry(), propertyData ) ); - } - - @Override - public void add(PropertyData propertyData, AbstractIdMapper idMapper) { - ids.put( propertyData, idMapper ); - } - - @Override - public Object mapToIdFromMap(Map data) { - if ( data == null ) { - return null; - } - - final Object compositeId = instantiateCompositeId(); - for ( AbstractIdMapper mapper : ids.values() ) { - if ( !mapper.mapToEntityFromMap( compositeId, data ) ) { - return null; - } - } - - return compositeId; - } - - @Override - public void mapToEntityFromEntity(Object objectTo, Object objectFrom) { - // no-op; does nothing - } - - protected Object instantiateCompositeId() { - try { - return ReflectHelper.getDefaultConstructor( compositeIdClass ).newInstance(); - } - catch ( Exception e ) { - throw new AuditException( e ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/AbstractIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/AbstractIdMapper.java deleted file mode 100644 index ca389762a505..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/AbstractIdMapper.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.Iterator; -import java.util.List; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.AbstractMapper; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.service.ServiceRegistry; - -/** - * The base abstract class implementation for identifier mappers. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public abstract class AbstractIdMapper extends AbstractMapper implements IdMapper { - private final ServiceRegistry serviceRegistry; - - public AbstractIdMapper(ServiceRegistry serviceRegistry) { - this.serviceRegistry = serviceRegistry; - } - - @Override - public ServiceRegistry getServiceRegistry() { - return serviceRegistry; - } - - private Parameters getParametersToUse(Parameters parameters, List paramDatas) { - if ( paramDatas.size() > 1 ) { - return parameters.addSubParameters( "and" ); - } - else { - return parameters; - } - } - - @Override - public void addIdsEqualToQuery(Parameters parameters, String prefix1, String prefix2) { - final List paramDatas = mapToQueryParametersFromId( null ); - - final Parameters parametersToUse = getParametersToUse( parameters, paramDatas ); - - for ( QueryParameterData paramData : paramDatas ) { - parametersToUse.addWhere( - paramData.getProperty( prefix1 ), - false, - "=", - paramData.getProperty( prefix2 ), - false - ); - } - } - - @Override - public void addIdsEqualToQuery(Parameters parameters, String prefix1, IdMapper mapper2, String prefix2) { - final List paramDatas1 = mapToQueryParametersFromId( null ); - final List paramDatas2 = mapper2.mapToQueryParametersFromId( null ); - - final Parameters parametersToUse = getParametersToUse( parameters, paramDatas1 ); - - final Iterator paramDataIter1 = paramDatas1.iterator(); - final Iterator paramDataIter2 = paramDatas2.iterator(); - while ( paramDataIter1.hasNext() ) { - final QueryParameterData paramData1 = paramDataIter1.next(); - final QueryParameterData paramData2 = paramDataIter2.next(); - - parametersToUse.addWhere( - paramData1.getProperty( prefix1 ), - false, - "=", - paramData2.getProperty( prefix2 ), - false - ); - } - } - - @Override - public void addNullableIdsEqualToQuery(Parameters parameters, String prefix1, IdMapper mapper2, String prefix2) { - final List paramDatas1 = mapToQueryParametersFromId( null ); - final List paramDatas2 = mapper2.mapToQueryParametersFromId( null ); - - final Parameters parametersToUse = getParametersToUse( parameters, paramDatas1 ); - - final Iterator paramDataIter1 = paramDatas1.iterator(); - final Iterator paramDataIter2 = paramDatas2.iterator(); - while ( paramDataIter1.hasNext() ) { - final QueryParameterData paramData1 = paramDataIter1.next(); - final QueryParameterData paramData2 = paramDataIter2.next(); - - parametersToUse.addWhereOrNullRestriction( - paramData1.getProperty( prefix1 ), - false, - "=", - paramData2.getProperty( prefix2 ), - false - ); - } - } - - @Override - public void addIdEqualsToQuery(Parameters parameters, Object id, String alias, String prefix, boolean equals) { - final List paramDatas = mapToQueryParametersFromId( id ); - - final Parameters parametersToUse = getParametersToUse( parameters, paramDatas ); - - for ( QueryParameterData paramData : paramDatas ) { - if ( paramData.getValue() == null ) { - handleNullValue( parametersToUse, alias, paramData.getProperty( prefix ), equals ); - } - else if ( alias == null ) { - parametersToUse.addWhereWithParam( - paramData.getProperty( prefix ), - equals ? "=" : "<>", - paramData.getValue() - ); - } - else { - parametersToUse.addWhereWithParam( - alias, - paramData.getProperty( prefix ), - equals ? "=" : "<>", - paramData.getValue() - ); - } - } - } - - @Override - public void addNamedIdEqualsToQuery(Parameters parameters, String prefix, boolean equals) { - final List paramDatas = mapToQueryParametersFromId( null ); - - final Parameters parametersToUse = getParametersToUse( parameters, paramDatas ); - - for ( QueryParameterData paramData : paramDatas ) { - parametersToUse.addWhereWithNamedParam( - paramData.getProperty( prefix ), - equals ? "=" : "<>", - paramData.getQueryParameterName() - ); - } - } - - @Override - public void addNamedIdEqualsToQuery(Parameters parameters, String prefix1, IdMapper mapper, boolean equals) { - final List paramDatas1 = mapToQueryParametersFromId( null ); - final List paramDatas2 = mapper.mapToQueryParametersFromId( null ); - - final Parameters parametersToUse = getParametersToUse( parameters, paramDatas1 ); - final Iterator paramDataIter1 = paramDatas1.iterator(); - final Iterator paramDataIter2 = paramDatas2.iterator(); - while ( paramDataIter1.hasNext() ) { - final QueryParameterData paramData1 = paramDataIter1.next(); - final QueryParameterData paramData2 = paramDataIter2.next(); - parametersToUse.addWhereWithNamedParam( - paramData1.getProperty( prefix1 ), - equals ? "=" : "<>", - paramData2.getQueryParameterName() - ); - } - } - - public abstract void mapToEntityFromEntity(Object objectTo, Object objectFrom); - - protected T getValueFromObject(PropertyData propertyData, Object object) { - return getValueFromObject( propertyData, object, getServiceRegistry() ); - } - - protected void setValueOnObject(PropertyData propertyData, Object object, Object value) { - setValueOnObject( propertyData, object, value, getServiceRegistry() ); - } - - protected void getAndSetValue(PropertyData propertyData, Object source, Object destination) { - getAndSetValue( propertyData, source, destination, getServiceRegistry() ); - } - - private void handleNullValue(Parameters parameters, String alias, String propertyName, boolean equals) { - if ( equals ) { - parameters.addNullRestriction( alias, propertyName ); - } - else { - parameters.addNotNullRestriction( alias, propertyName ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/EmbeddedIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/EmbeddedIdMapper.java deleted file mode 100644 index 64dda7e86f95..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/EmbeddedIdMapper.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.mapping.Component; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.service.ServiceRegistry; - -/** - * An identifier mapper implementation for {@link jakarta.persistence.EmbeddedId} mappings. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class EmbeddedIdMapper extends AbstractCompositeIdMapper implements SimpleIdMapperBuilder { - private PropertyData idPropertyData; - - public EmbeddedIdMapper(PropertyData propertyData, Component component) { - super( component.getComponentClass(), component.getServiceRegistry() ); - this.idPropertyData = propertyData; - } - - private EmbeddedIdMapper(PropertyData idPropertyData, Class compositeIdClass, ServiceRegistry serviceRegistry) { - super( compositeIdClass, serviceRegistry ); - this.idPropertyData = idPropertyData; - } - - @Override - public void mapToMapFromId(Map data, Object obj) { - for ( IdMapper idMapper : ids.values() ) { - idMapper.mapToMapFromEntity( data, obj ); - } - } - - @Override - public void mapToMapFromEntity(Map data, final Object obj) { - if ( obj == null ) { - return; - } - mapToMapFromId( data, getValueFromObject( idPropertyData, obj ) ); - } - - @Override - public boolean mapToEntityFromMap(final Object obj, final Map data) { - if ( data == null || obj == null ) { - return false; - } - - final Setter setter = ReflectionTools.getSetter( obj.getClass(), idPropertyData, getServiceRegistry() ); - try { - final Object subObj = instantiateCompositeId(); - - boolean ret = true; - for ( IdMapper idMapper : ids.values() ) { - ret &= idMapper.mapToEntityFromMap( subObj, data ); - } - - if ( ret ) { - setter.set( obj, subObj ); - } - - return ret; - } - catch (Exception e) { - throw new AuditException( e ); - } - } - - @Override - public IdMapper prefixMappedProperties(String prefix) { - final EmbeddedIdMapper ret = new EmbeddedIdMapper( idPropertyData, compositeIdClass, getServiceRegistry() ); - - for ( PropertyData propertyData : ids.keySet() ) { - final String propertyName = propertyData.getName(); - ret.ids.put( propertyData, new SingleIdMapper( getServiceRegistry(), new PropertyData( prefix + propertyName, propertyData ) ) ); - } - - return ret; - } - - @Override - public Object mapToIdFromEntity(final Object data) { - if ( data == null ) { - return null; - } - - return getValueFromObject( idPropertyData, data ); - } - - @Override - public List mapToQueryParametersFromId(Object obj) { - final Map data = new LinkedHashMap<>(); - mapToMapFromId( data, obj ); - - final List ret = new ArrayList<>(); - - for ( Map.Entry propertyData : data.entrySet() ) { - ret.add( new QueryParameterData( propertyData.getKey(), propertyData.getValue() ) ); - } - - return ret; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/IdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/IdMapper.java deleted file mode 100644 index 0ae0059f5d4e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/IdMapper.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.service.ServiceRegistry; - -/** - * Base contract for all identifier mappers. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface IdMapper { - ServiceRegistry getServiceRegistry(); - - void mapToMapFromId(Map data, Object obj); - - default void mapToMapFromId(Session session, Map data, Object obj) { - // Delegate to the old behavior, allowing implementations to override. - mapToMapFromId( data, obj ); - } - - void mapToMapFromEntity(Map data, Object obj); - - /** - * @param obj Object to map to. - * @param data Data to map. - * - * @return True if data was mapped; false otherwise (when the id is {@code null}). - */ - boolean mapToEntityFromMap(Object obj, Map data); - - Object mapToIdFromEntity(Object data); - - Object mapToIdFromMap(Map data); - - /** - * Creates a mapper with all mapped properties prefixed. A mapped property is a property which - * is directly mapped to values (not composite). - * - * @param prefix Prefix to add to mapped properties - * - * @return A copy of the current property mapper, with mapped properties prefixed. - */ - IdMapper prefixMappedProperties(String prefix); - - /** - * @param obj Id from which to map. - * - * @return A set parameter data, needed to build a query basing on the given id. - */ - List mapToQueryParametersFromId(Object obj); - - /** - * Adds query statements, which contains restrictions, which express the property that the id of the entity - * with alias prefix1, is equal to the id of the entity with alias prefix2 (the entity is the same). - * - * @param parameters Parameters, to which to add the statements. - * @param prefix1 First alias of the entity + prefix to add to the properties. - * @param prefix2 Second alias of the entity + prefix to add to the properties. - */ - void addIdsEqualToQuery(Parameters parameters, String prefix1, String prefix2); - - /** - * Adds query statements, which contains restrictions, which express the property that the id of the entity - * with alias prefix1, is equal to the id of the entity with alias prefix2 mapped by the second mapper - * (the second mapper must be for the same entity, but it can have, for example, prefixed properties). - * - * @param parameters Parameters, to which to add the statements. - * @param prefix1 First alias of the entity + prefix to add to the properties. - * @param mapper2 Second mapper for the same entity, which will be used to get properties for the right side - * of the equation. - * @param prefix2 Second alias of the entity + prefix to add to the properties. - */ - void addIdsEqualToQuery(Parameters parameters, String prefix1, IdMapper mapper2, String prefix2); - - /** - * Adds query statements, which contains restrictions, which express the property that the id of the entity - * with alias prefix1, is equal to the id of the entity with alias prefix2 mapped by the second mapper - * (the second mapper must be for the same entity, but it can have, for example, prefixed properties). - * - * @param parameters Parameters, to which to add the statements. - * @param prefix1 First alias of the entity + prefix to add to the properties. - * @param mapper2 Second mapper for the same entity, which will be used to get properties for the right side - * of the equation. - * @param prefix2 Second alias of the entity + prefix to add to the properties. - */ - void addNullableIdsEqualToQuery(Parameters parameters, String prefix1, IdMapper mapper2, String prefix2); - - /** - * Adds query statements, which contains restrictions, which express the property that the id of the entity - * with alias prefix, is equal to the given object. - * - * @param parameters Parameters, to which to add the statements. - * @param id Value of id. - * @param alias the alias to use in the specified parameters (may be null). - * @param prefix Prefix to add to the properties (may be null). - * @param equals Should this query express the {@code "="} relation or the {@code "<>"} relation. - */ - void addIdEqualsToQuery(Parameters parameters, Object id, String alias, String prefix, boolean equals); - - /** - * Adds query statements, which contains named parameters, which express the property that the id of the entity - * with alias prefix, is equal to the given object. It is the responsibility of the using method to read - * parameter values from the id and specify them on the final query object. - * - * @param parameters Parameters, to which to add the statements. - * @param prefix Prefix to add to the properties (may be null). - * @param equals Should this query express the {@code "="} relation or the {@code "<>"} relation. - */ - void addNamedIdEqualsToQuery(Parameters parameters, String prefix, boolean equals); - - /** - * Adds query statements, which contains named parameters that express the property that the id of the entity - * with alias prefix is equal to the given object using the specified mapper. - * - * @param parameters Parameters, to which to add the statements. - * @param prefix Prefix to add to the properties (may be null). - * @param mapper The identifier mapper to use - * @param equals Should this query express the {@code "="} relation or the {@code "<>"} relation. - * - * @since 5.2.2 - */ - void addNamedIdEqualsToQuery(Parameters parameters, String prefix, IdMapper mapper, boolean equals); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/MultipleIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/MultipleIdMapper.java deleted file mode 100644 index 1d82bc23f45f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/MultipleIdMapper.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.mapping.Component; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; -import org.hibernate.service.ServiceRegistry; - -/** - * An implementation of an identifier mapper for {@link jakarta.persistence.IdClass} or multiple - * {@link jakarta.persistence.Id} identifier mappings. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class MultipleIdMapper extends AbstractCompositeIdMapper implements SimpleIdMapperBuilder { - - private final boolean embedded; - - public MultipleIdMapper(Component component) { - super( component.getComponentClass(), component.getServiceRegistry() ); - this.embedded = component.isEmbedded(); - } - - private MultipleIdMapper(boolean embedded, Class compositeIdClass, ServiceRegistry serviceRegistry) { - super( compositeIdClass, serviceRegistry ); - this.embedded = embedded; - } - - @Override - public void add(PropertyData propertyData) { - ids.put( propertyData, resolveIdMapper( propertyData ) ); - } - - @Override - public void mapToMapFromId(Session session, Map data, Object obj) { - if ( compositeIdClass.isInstance( obj ) ) { - if ( embedded ) { - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( obj ); - if ( lazyInitializer != null ) { - obj = lazyInitializer.getInternalIdentifier(); - } - } - for ( Map.Entry entry : ids.entrySet() ) { - final PropertyData propertyData = entry.getKey(); - final AbstractIdMapper idMapper = entry.getValue(); - - if ( propertyData.getVirtualReturnClass() == null ) { - idMapper.mapToMapFromEntity( data, obj ); - } - else { - idMapper.mapToMapFromId( session, data, obj ); - } - } - } - else { - mapToMapFromId( data, obj ); - } - } - - @Override - public void mapToMapFromId(Map data, Object obj) { - for ( IdMapper idMapper : ids.values() ) { - idMapper.mapToMapFromEntity( data, obj ); - } - } - - @Override - public void mapToMapFromEntity(Map data, Object obj) { - if ( embedded ) { - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( obj ); - if ( lazyInitializer != null ) { - obj = lazyInitializer.getInternalIdentifier(); - } - } - for ( IdMapper idMapper : ids.values() ) { - idMapper.mapToMapFromEntity( data, obj ); - } - } - - @Override - public boolean mapToEntityFromMap(Object obj, Map data) { - boolean ret = true; - for ( IdMapper idMapper : ids.values() ) { - ret &= idMapper.mapToEntityFromMap( obj, data ); - } - - return ret; - } - - @Override - public IdMapper prefixMappedProperties(String prefix) { - final MultipleIdMapper ret = new MultipleIdMapper( embedded, compositeIdClass, getServiceRegistry() ); - - for ( PropertyData propertyData : ids.keySet() ) { - final String propertyName = propertyData.getName(); - ret.ids.put( propertyData, resolveIdMapper( new PropertyData( prefix + propertyName, propertyData ) ) ); - } - - return ret; - } - - @Override - public Object mapToIdFromEntity(Object data) { - if ( data == null ) { - return null; - } - - final Object compositeId = instantiateCompositeId(); - for ( AbstractIdMapper mapper : ids.values() ) { - mapper.mapToEntityFromEntity( compositeId, data ); - } - - return compositeId; - } - - @Override - public List mapToQueryParametersFromId(Object obj) { - final Map data = new LinkedHashMap<>(); - mapToMapFromId( data, obj ); - - final List ret = new ArrayList<>(); - - for ( Map.Entry propertyData : data.entrySet() ) { - ret.add( new QueryParameterData( propertyData.getKey(), propertyData.getValue() ) ); - } - - return ret; - } - - private SingleIdMapper resolveIdMapper(PropertyData propertyData) { - if ( propertyData.getVirtualReturnClass() != null ) { - return new VirtualEntitySingleIdMapper( getServiceRegistry(), propertyData ); - } - return new SingleIdMapper( getServiceRegistry(), propertyData ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/NestedEmbeddedIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/NestedEmbeddedIdMapper.java deleted file mode 100644 index 7a58d576a14c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/NestedEmbeddedIdMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.mapping.Component; - -/** - * An identifier mapper that is meant to support nested {@link jakarta.persistence.Embeddable} instances - * inside an existing {@link jakarta.persistence.EmbeddedId} identifier hierarchy. - * - * @author Chris Cranford - */ -public class NestedEmbeddedIdMapper extends EmbeddedIdMapper { - public NestedEmbeddedIdMapper(PropertyData propertyData, Component component) { - super( propertyData, component ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/QueryParameterData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/QueryParameterData.java deleted file mode 100644 index 1f99dfa0ba38..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/QueryParameterData.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.Objects; - -import org.hibernate.query.Query; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class QueryParameterData { - private String flatEntityPropertyName; - private Object value; - - public QueryParameterData(String flatEntityPropertyName, Object value) { - this.flatEntityPropertyName = flatEntityPropertyName; - this.value = value; - } - - public String getProperty(String prefix) { - if ( prefix != null ) { - return prefix + "." + flatEntityPropertyName; - } - else { - return flatEntityPropertyName; - } - } - - public Object getValue() { - return value; - } - - public void setParameterValue(Query query) { - query.setParameter( flatEntityPropertyName, value ); - } - - public String getQueryParameterName() { - return flatEntityPropertyName; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof QueryParameterData) ) { - return false; - } - - final QueryParameterData that = (QueryParameterData) o; - return Objects.equals( flatEntityPropertyName, that.flatEntityPropertyName ); - } - - @Override - public int hashCode() { - return (flatEntityPropertyName != null ? flatEntityPropertyName.hashCode() : 0); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/SimpleIdMapperBuilder.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/SimpleIdMapperBuilder.java deleted file mode 100644 index c1e8a9e603d8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/SimpleIdMapperBuilder.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.SimpleMapperBuilder; - -/** - * A simple identifier builder contract. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface SimpleIdMapperBuilder extends IdMapper, SimpleMapperBuilder { - /** - * Add a custom identifier mapper to the builder. - * - * @param propertyData the property data - * @param idMapper the mapper - */ - void add(PropertyData propertyData, AbstractIdMapper idMapper); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/SingleIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/SingleIdMapper.java deleted file mode 100644 index 2b58719c5dbd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/SingleIdMapper.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; -import org.hibernate.service.ServiceRegistry; - - -/** - * An implementation of an identifier mapper for a single basic attribute property. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class SingleIdMapper extends AbstractIdMapper implements SimpleIdMapperBuilder { - private PropertyData propertyData; - - public SingleIdMapper(ServiceRegistry serviceRegistry) { - super( serviceRegistry ); - } - - public SingleIdMapper(ServiceRegistry serviceRegistry, PropertyData propertyData) { - this( serviceRegistry ); - this.propertyData = propertyData; - } - - @Override - public void add(PropertyData propertyData) { - if ( this.propertyData != null ) { - throw new AuditException( "Only one property can be added!" ); - } - - this.propertyData = propertyData; - } - - @Override - public void add(PropertyData propertyData, AbstractIdMapper idMapper) { - throw new AuditException( "This method is not allowed for a single identifier mapper" ); - } - - @Override - public boolean mapToEntityFromMap(final Object obj, Map data) { - if ( data == null || obj == null ) { - return false; - } - - final Object value = data.get( propertyData.getName() ); - if ( value == null ) { - return false; - } - - setValueOnObject( propertyData, obj, value ); - return true; - } - - @Override - public Object mapToIdFromMap(Map data) { - if ( data == null ) { - return null; - } - - return data.get( propertyData.getName() ); - } - - @Override - public Object mapToIdFromEntity(final Object data) { - if ( data == null ) { - return null; - } - - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( data ); - if ( lazyInitializer != null ) { - return lazyInitializer.getInternalIdentifier(); - } - else { - return getValueFromObject( propertyData, data ); - } - } - - @Override - public void mapToMapFromId(Map data, Object obj) { - if ( data != null ) { - data.put( propertyData.getName(), obj ); - } - } - - @Override - public void mapToMapFromEntity(Map data, final Object obj) { - if ( obj == null ) { - data.put( propertyData.getName(), null ); - } - else { - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( obj ); - if ( lazyInitializer != null ) { - data.put( propertyData.getName(), lazyInitializer.getInternalIdentifier() ); - } - else { - final Object value = getValueFromObject( propertyData, obj ); - data.put( propertyData.getName(), value ); - } - } - } - - @Override - public void mapToEntityFromEntity(final Object objTo, final Object objFrom) { - if ( objTo == null || objFrom == null ) { - return; - } - getAndSetValue(propertyData, objFrom, objTo ); - } - - @Override - public IdMapper prefixMappedProperties(String prefix) { - return new SingleIdMapper( getServiceRegistry(), new PropertyData( prefix + propertyData.getName(), propertyData ) ); - } - - @Override - public List mapToQueryParametersFromId(Object obj) { - final List ret = new ArrayList<>(); - - ret.add( new QueryParameterData( propertyData.getName(), obj ) ); - - return ret; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/VirtualEntitySingleIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/VirtualEntitySingleIdMapper.java deleted file mode 100644 index 272fd4cc0d00..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/id/VirtualEntitySingleIdMapper.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.id; - -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntitiesConfigurations; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; -import org.hibernate.service.ServiceRegistry; -import org.hibernate.type.EntityType; - - -/** - * An extension to the {@link SingleIdMapper} implementation that supports the use case of an {@code @IdClass} - * mapping that contains an entity association where the {@code @IdClass} stores the primary key of the - * associated entity rather than the entity object itself. - *

- * Internally this mapper is capable of transforming the primary key values into the associated entity object - * and vice versa depending upon the operation. - * - * @author Chris Cranford - */ -public class VirtualEntitySingleIdMapper extends SingleIdMapper { - - private final PropertyData propertyData; - private final String entityName; - - private IdMapper entityIdMapper; - - public VirtualEntitySingleIdMapper(ServiceRegistry serviceRegistry, PropertyData propertyData) { - super( serviceRegistry, propertyData ); - this.propertyData = propertyData; - this.entityName = resolveEntityName( this.propertyData ); - } - - @Override - public void mapToMapFromId(Session session, Map data, Object obj) { - final Object value = getValueFromObject( propertyData, obj ); - - // Either loads the entity from the session's 1LC if it already exists or potentially creates a - // proxy object to represent the entity by identifier so that we can reference it in the map. - final Object entity = session.getReference( this.entityName, value ); - data.put( propertyData.getName(), entity ); - } - - @Override - public void mapToEntityFromEntity(Object objTo, Object objFrom) { - if ( objTo == null || objFrom == null ) { - return; - } - - final Getter getter = ReflectionTools.getGetter( - objFrom.getClass(), - propertyData, - getServiceRegistry() - ); - - final Setter setter = ReflectionTools.getSetter( - objTo.getClass(), - propertyData, - getServiceRegistry() - ); - - // Get the value from the containing entity - final Object value = getter.get( objFrom ); - if ( value == null ) { - return; - } - - if ( !value.getClass().equals( propertyData.getVirtualReturnClass() ) ) { - setter.set( objTo, getAssociatedEntityIdMapper().mapToIdFromEntity( value ) ); - } - else { - // This means we're setting the object - setter.set( objTo, value ); - } - } - - @Override - public boolean mapToEntityFromMap(Object obj, Map data) { - if ( data == null || obj == null ) { - return false; - } - - final Object value = data.get( propertyData.getName() ); - if ( value == null ) { - return false; - } - - final Setter setter = ReflectionTools.getSetter( - obj.getClass(), - propertyData, - getServiceRegistry() - ); - final Class paramClass = ReflectionTools.getType( - obj.getClass(), - propertyData, - getServiceRegistry() - ); - - if ( paramClass != null && paramClass.equals( propertyData.getVirtualReturnClass() ) ) { - setter.set( obj, getAssociatedEntityIdMapper().mapToIdFromEntity( value ) ); - } - else { - setter.set( obj, value ); - } - - return true; - } - - @Override - public void mapToMapFromEntity(Map data, Object obj) { - if ( obj == null ) { - data.put( propertyData.getName(), null ); - } - else { - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( obj ); - if ( lazyInitializer != null ) { - data.put( propertyData.getName(), lazyInitializer.getInternalIdentifier() ); - } - else { - final Object value = getValueFromObject( propertyData, obj ); - - if ( propertyData.getVirtualReturnClass().isInstance( value ) ) { - // The value is the primary key, need to map it via IdMapper - getPrefixedAssociatedEntityIdMapper( propertyData ).mapToMapFromId( data, value ); - } - else { - data.put( propertyData.getName(), value ); - } - } - } - } - - private IdMapper getAssociatedEntityIdMapper() { - if ( entityIdMapper == null ) { - entityIdMapper = resolveEntityIdMapper( getServiceRegistry(), entityName ); - } - return entityIdMapper; - } - - private IdMapper getPrefixedAssociatedEntityIdMapper(PropertyData propertyData) { - return getAssociatedEntityIdMapper().prefixMappedProperties( propertyData.getName() + "." ); - } - - private static String resolveEntityName(PropertyData propertyData) { - if ( EntityType.class.isInstance( propertyData.getType() ) ) { - final EntityType entityType = (EntityType) propertyData.getType(); - return entityType.getAssociatedEntityName(); - } - return null; - } - - private static IdMapper resolveEntityIdMapper(ServiceRegistry serviceRegistry, String entityName) { - final EntitiesConfigurations entitiesConfigurations = serviceRegistry.getService( EnversService.class ) - .getEntitiesConfigurations(); - - final EntityConfiguration auditedEntityConfiguration = entitiesConfigurations.get( entityName ); - if ( auditedEntityConfiguration != null ) { - return auditedEntityConfiguration.getIdMapper(); - } - else { - return entitiesConfigurations.getNotVersionEntityConfiguration( entityName ).getIdMapper(); - } - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractCollectionMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractCollectionMapper.java deleted file mode 100644 index a971edba3bdd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractCollectionMapper.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; -import java.lang.reflect.Constructor; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.AbstractPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.persister.collection.CollectionPersister; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public abstract class AbstractCollectionMapper extends AbstractPropertyMapper { - protected final Configuration configuration; - protected final CommonCollectionMapperData commonCollectionMapperData; - protected final Class collectionClass; - protected final boolean ordinalInId; - protected final boolean revisionTypeInId; - - private final Constructor proxyConstructor; - - protected AbstractCollectionMapper( - Configuration configuration, - CommonCollectionMapperData commonCollectionMapperData, - Class collectionClass, - Class proxyClass, - boolean ordinalInId, - boolean revisionTypeInId) { - this.configuration = configuration; - this.commonCollectionMapperData = commonCollectionMapperData; - this.collectionClass = collectionClass; - this.ordinalInId = ordinalInId; - this.revisionTypeInId = revisionTypeInId; - - try { - proxyConstructor = proxyClass.getConstructor( Initializor.class ); - } - catch (NoSuchMethodException e) { - throw new AuditException( e ); - } - } - - protected abstract Collection getNewCollectionContent(PersistentCollection newCollection); - - protected abstract Collection getOldCollectionContent(Serializable oldCollection); - - protected abstract Set buildCollectionChangeSet(Object eventCollection, Collection collection); - - /** - * Maps the changed collection element to the given map. - * - * @param idData Map to which composite-id data should be added. - * @param data Where to map the data. - * @param changed The changed collection element to map. - */ - protected abstract void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object changed); - - /** - * Creates map for storing identifier data. Ordinal parameter guarantees uniqueness of primary key. - * Composite primary key cannot contain embeddable properties since they might be nullable. - * - * @param ordinal Iteration ordinal. - * - * @return Map for holding identifier data. - */ - protected Map createIdMap(int ordinal) { - final Map idMap = new HashMap<>(); - if ( ordinalInId ) { - idMap.put( configuration.getEmbeddableSetOrdinalPropertyName(), ordinal ); - } - return idMap; - } - - protected void addCollectionChanges( - SessionImplementor session, - List collectionChanges, - Set changed, - RevisionType revisionType, - Object id) { - int ordinal = 0; - - for ( Object changedObj : changed ) { - final Map entityData = new HashMap<>(); - final Map originalId = createIdMap( ordinal++ ); - entityData.put( configuration.getOriginalIdPropertyName(), originalId ); - - collectionChanges.add( - new PersistentCollectionChangeData( - commonCollectionMapperData.getVersionsMiddleEntityName(), entityData, changedObj - ) - ); - // Mapping the collection owner's id. - commonCollectionMapperData.getReferencingIdData().getPrefixedMapper().mapToMapFromId( originalId, id ); - - // Mapping collection element and index (if present). - mapToMapFromObject( session, originalId, entityData, changedObj ); - - final Map dataMap = revisionTypeInId ? originalId : entityData; - dataMap.put( configuration.getRevisionTypePropertyName(), revisionType ); - } - } - - @Override - @SuppressWarnings("unchecked") - public List mapCollectionChanges( - SessionImplementor session, - String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, - Object id) { - final PropertyData propertyData = commonCollectionMapperData.getCollectionReferencingPropertyData(); - if ( !propertyData.getName().equals( referencingPropertyName ) ) { - return null; - } - - return mapCollectionChanges( session, newColl, oldColl, id ); - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - // Changes are mapped in the "mapCollectionChanges" method. - return false; - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - final PropertyData propertyData = commonCollectionMapperData.getCollectionReferencingPropertyData(); - if ( propertyData.isUsingModifiedFlag() ) { - if ( isNotPersistentCollection( newObj ) || isNotPersistentCollection( oldObj ) ) { - // Compare POJOs. - data.put( propertyData.getModifiedFlagPropertyName(), !Objects.deepEquals( newObj, oldObj ) ); - } - else if ( isFromNullToEmptyOrFromEmptyToNull( (PersistentCollection) newObj, (Serializable) oldObj ) ) { - data.put( propertyData.getModifiedFlagPropertyName(), true ); - } - else { - // HHH-7949 - Performance optimization to avoid lazy-fetching collections that have - // not been changed for deriving the modified flags value. - final PersistentCollection pc = (PersistentCollection) newObj; - if ( ( pc != null && !pc.isDirty() ) || ( newObj == null && oldObj == null ) ) { - data.put( propertyData.getModifiedFlagPropertyName(), false ); - return; - } - - final List changes = mapCollectionChanges( - session, - commonCollectionMapperData.getCollectionReferencingPropertyData().getName(), - pc, - (Serializable) oldObj, - null - ); - data.put( propertyData.getModifiedFlagPropertyName(), !changes.isEmpty() ); - } - } - } - - private boolean isNotPersistentCollection(Object obj) { - return obj != null && !(obj instanceof PersistentCollection); - } - - private boolean isFromNullToEmptyOrFromEmptyToNull(PersistentCollection newColl, Serializable oldColl) { - // Comparing new and old collection content. - final Collection newCollection = getNewCollectionContent( newColl ); - final Collection oldCollection = getOldCollectionContent( oldColl ); - - return oldCollection == null && newCollection != null && newCollection.isEmpty() - || newCollection == null && oldCollection != null && oldCollection.isEmpty(); - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - final PropertyData propertyData = commonCollectionMapperData.getCollectionReferencingPropertyData(); - if ( propertyData.isUsingModifiedFlag() ) { - data.put( - propertyData.getModifiedFlagPropertyName(), - propertyData.getName().equals( collectionPropertyName ) - ); - } - } - - protected abstract Initializor getInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - Object primaryKey, - Number revision, - boolean removed); - - protected CollectionPersister resolveCollectionPersister( - SessionImplementor session, - PersistentCollection collection) { - // First attempt to resolve the persister from the collection entry - if ( collection != null ) { - CollectionEntry collectionEntry = session.getPersistenceContextInternal().getCollectionEntry( collection ); - if ( collectionEntry != null ) { - CollectionPersister collectionPersister = collectionEntry.getCurrentPersister(); - if ( collectionPersister != null ) { - return collectionPersister; - } - } - } - - // Fallback to resolving the persister from the collection role - final CollectionPersister collectionPersister = session.getFactory() - .getMappingMetamodel() - .getCollectionDescriptor( commonCollectionMapperData.getRole() ); - - if ( collectionPersister == null ) { - throw new AuditException( - String.format( - Locale.ROOT, - "Failed to locate CollectionPersister for collection [%s]", - commonCollectionMapperData.getRole() - ) - ); - } - - return collectionPersister; - } - - /** - * Checks whether the old collection element and new collection element are the same. - * By default, this delegates to the collection persister's {@link CollectionPersister#getElementType()}. - * - * @param collectionPersister The collection persister. - * @param oldObject The collection element from the old persistent collection. - * @param newObject The collection element from the new persistent collection. - * - * @return true if the two objects are the same, false otherwise. - */ - protected boolean isSame(CollectionPersister collectionPersister, Object oldObject, Object newObject) { - return collectionPersister.getElementType().isSame( oldObject, newObject ); - } - - @Override - public void mapToEntityFromMap( - final EnversService enversService, - final Object obj, - final Map data, - final Object primaryKey, - final AuditReaderImplementor versionsReader, - final Number revision) { - final Object collectionProxy = mapToEntityFromMap( enversService, data, primaryKey, versionsReader, revision ); - final PropertyData collectionPropertyData = commonCollectionMapperData.getCollectionReferencingPropertyData(); - - if ( isDynamicComponentMap() ) { - final Map map = (Map) obj; - map.put( collectionPropertyData.getBeanName(), collectionProxy ); - } - else { - setValueOnObject( collectionPropertyData, obj, collectionProxy, enversService.getServiceRegistry() ); - } - } - - @Override - public Object mapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - final String revisionTypePropertyName = enversService.getConfig().getRevisionTypePropertyName(); - - // construct the collection proxy - final Object collectionProxy; - try { - collectionProxy = proxyConstructor.newInstance( - getInitializor( - enversService, - versionsReader, - primaryKey, - revision, - RevisionType.DEL.equals( data.get( revisionTypePropertyName ) ) - ) - ); - } - catch ( Exception e ) { - throw new AuditException( "Failed to construct collection proxy", e ); - } - return collectionProxy; - } - - /** - * Map collection changes using hash identity. - * - * @param session The session. - * @param newColl The new persistent collection. - * @param oldColl The old collection. - * @param id The owning entity identifier. - * @return the persistent collection changes. - */ - protected abstract List mapCollectionChanges( - SessionImplementor session, - PersistentCollection newColl, - Serializable oldColl, - Object id); - - @Override - public boolean hasPropertiesWithModifiedFlag() { - if ( commonCollectionMapperData != null ) { - final PropertyData propertyData = commonCollectionMapperData.getCollectionReferencingPropertyData(); - return propertyData != null && propertyData.isUsingModifiedFlag(); - } - return false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractOneToOneMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractOneToOneMapper.java deleted file mode 100644 index 7d52b7856503..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractOneToOneMapper.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; -import java.util.Map; -import jakarta.persistence.NoResultException; - -import org.hibernate.NonUniqueResultException; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.service.ServiceRegistry; - -/** - * Template class for property mappers that manage one-to-one relation. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public abstract class AbstractOneToOneMapper extends AbstractToOneMapper { - private final String entityName; - private final String referencedEntityName; - - protected AbstractOneToOneMapper( - String entityName, - String referencedEntityName, - PropertyData propertyData, - ServiceRegistry serviceRegistry) { - super( serviceRegistry, propertyData ); - this.entityName = entityName; - this.referencedEntityName = referencedEntityName; - } - - @Override - public void nullSafeMapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - Object value = nullSafeMapToEntityFromMap( enversService, data, primaryKey, versionsReader, revision ); - setPropertyValue( obj, value ); - } - - @Override - public Object nullSafeMapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - final EntityInfo referencedEntity = getEntityInfo( enversService, referencedEntityName ); - - Object value; - try { - value = queryForReferencedEntity( versionsReader, referencedEntity, (Serializable) primaryKey, revision ); - } - catch (NoResultException e) { - value = null; - } - catch (NonUniqueResultException e) { - throw new AuditException( - "Many versions results for one-to-one relationship " + entityName + - "." + getPropertyData().getBeanName() + ".", e - ); - } - return value; - } - - /** - * @param versionsReader Audit reader. - * @param referencedEntity Referenced entity descriptor. - * @param primaryKey Referenced entity identifier. - * @param revision Revision number. - * - * @return Referenced object or proxy of one-to-one relation. - */ - protected abstract Object queryForReferencedEntity( - AuditReaderImplementor versionsReader, EntityInfo referencedEntity, - Serializable primaryKey, Number revision); - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - if ( getPropertyData().isUsingModifiedFlag() ) { - data.put( - getPropertyData().getModifiedFlagPropertyName(), - collectionPropertyName.equals( getPropertyData().getName() ) - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractToOneMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractToOneMapper.java deleted file mode 100644 index 65295e149149..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/AbstractToOneMapper.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; -import java.util.List; -import java.util.Map; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.AbstractPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.service.ServiceRegistry; - -/** - * Base class for property mappers that manage to-one relation. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class AbstractToOneMapper extends AbstractPropertyMapper { - private final ServiceRegistry serviceRegistry; - private final PropertyData propertyData; - - protected AbstractToOneMapper(ServiceRegistry serviceRegistry, PropertyData propertyData) { - this.serviceRegistry = serviceRegistry; - this.propertyData = propertyData; - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - return false; - } - - @Override - public void mapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - if ( obj != null ) { - nullSafeMapToEntityFromMap( enversService, obj, data, primaryKey, versionsReader, revision ); - } - } - - @Override - public Object mapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - return nullSafeMapToEntityFromMap( enversService, data, primaryKey, versionsReader, revision ); - } - - @Override - public List mapCollectionChanges( - SessionImplementor session, - String referencingPropertyName, - PersistentCollection newColl, - Serializable oldColl, - Object id) { - return null; - } - - /** - * @param enversService The EnversService - * @param entityName Entity name. - * - * @return Entity class, name and information whether it is audited or not. - */ - protected EntityInfo getEntityInfo(EnversService enversService, String entityName) { - EntityConfiguration entCfg = enversService.getEntitiesConfigurations().get( entityName ); - boolean isRelationAudited = true; - if ( entCfg == null ) { - // a relation marked as RelationTargetAuditMode.NOT_AUDITED - entCfg = enversService.getEntitiesConfigurations().getNotVersionEntityConfiguration( entityName ); - isRelationAudited = false; - } - final Class entityClass = ReflectionTools.loadClass( entCfg.getEntityClassName(), enversService.getClassLoaderService() ); - return new EntityInfo( entityClass, entityName, isRelationAudited ); - } - - protected void setPropertyValue(Object targetObject, Object value) { - if ( isDynamicComponentMap() ) { - @SuppressWarnings("unchecked") - final Map map = (Map) targetObject; - map.put( propertyData.getBeanName(), value ); - } - else { - setValueOnObject( propertyData, targetObject, value, serviceRegistry ); - } - } - - /** - * @return Bean property that represents the relation. - */ - protected PropertyData getPropertyData() { - return propertyData; - } - - /** - * Parameter {@code obj} is never {@code null}. - */ - public abstract void nullSafeMapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision); - - public abstract Object nullSafeMapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision); - - /** - * Simple descriptor of an entity. - */ - protected static class EntityInfo { - private final Class entityClass; - private final String entityName; - private final boolean audited; - - public EntityInfo(Class entityClass, String entityName, boolean audited) { - this.entityClass = entityClass; - this.entityName = entityName; - this.audited = audited; - } - - public Class getEntityClass() { - return entityClass; - } - - public String getEntityName() { - return entityName; - } - - public boolean isAudited() { - return audited; - } - } - - @Override - public boolean hasPropertiesWithModifiedFlag() { - return propertyData != null && propertyData.isUsingModifiedFlag(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/BasicCollectionMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/BasicCollectionMapper.java deleted file mode 100644 index 840bcb17a314..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/BasicCollectionMapper.java +++ /dev/null @@ -1,223 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.BasicCollectionInitializor; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.persister.collection.CollectionPersister; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.type.EntityType; -import org.hibernate.type.Type; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class BasicCollectionMapper extends AbstractCollectionMapper implements PropertyMapper { - protected final MiddleComponentData elementComponentData; - - public BasicCollectionMapper( - Configuration configuration, - CommonCollectionMapperData commonCollectionMapperData, - Class collectionClass, - Class proxyClass, - MiddleComponentData elementComponentData, - boolean ordinalInId, - boolean revisionTypeInId) { - super( configuration, commonCollectionMapperData, collectionClass, proxyClass, ordinalInId, revisionTypeInId ); - this.elementComponentData = elementComponentData; - } - - @Override - protected Initializor getInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - Object primaryKey, - Number revision, - boolean removed) { - return new BasicCollectionInitializor<>( - enversService, - versionsReader, - commonCollectionMapperData.getQueryGenerator(), - primaryKey, - revision, - removed, - collectionClass, - elementComponentData - ); - } - - @Override - protected Collection getNewCollectionContent(PersistentCollection newCollection) { - return (Collection) newCollection; - } - - @Override - protected Collection getOldCollectionContent(Serializable oldCollection) { - if ( oldCollection == null ) { - return null; - } - else if ( oldCollection instanceof Map ) { - return ( (Map) oldCollection ).keySet(); - } - else { - return (Collection) oldCollection; - } - } - - @Override - protected void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object changed) { - elementComponentData.getComponentMapper().mapToMapFromObject( session, idData, data, changed ); - } - - @Override - protected Set buildCollectionChangeSet(Object eventCollection, Collection collection) { - final Set changeSet = new HashSet<>(); - if ( eventCollection != null ) { - for ( Object entry : collection ) { - if ( entry != null ) { - changeSet.add( entry ); - } - } - } - return changeSet; - } - - @Override - protected List mapCollectionChanges( - SessionImplementor session, - PersistentCollection newColl, - Serializable oldColl, - Object id) { - - final List collectionChanges = new ArrayList<>(); - - final CollectionPersister collectionPersister = resolveCollectionPersister( session, newColl ); - - // Comparing new and old collection content. - final Collection newCollection = getNewCollectionContent( newColl ); - final Collection oldCollection = getOldCollectionContent( oldColl ); - - final Set addedElements = buildCollectionChangeSet( newColl, newCollection ); - if ( oldColl != null ) { - for ( Object oldEntry : oldCollection ) { - for ( Iterator itor = addedElements.iterator(); itor.hasNext(); ) { - Object newEntry = itor.next(); - if ( isCollectionElementSame( session, collectionPersister, oldEntry, newEntry ) ) { - itor.remove(); - break; - } - } - } - } - - final Set deleteElements = buildCollectionChangeSet( oldColl, oldCollection ); - if ( newColl != null ) { - for ( Object newEntry : newCollection ) { - for ( Iterator itor = deleteElements.iterator(); itor.hasNext(); ) { - Object deletedEntry = itor.next(); - if ( isCollectionElementSame( session, collectionPersister, deletedEntry, newEntry ) ) { - itor.remove(); - break; - } - } - } - } - - addCollectionChanges( session, collectionChanges, addedElements, RevisionType.ADD, id ); - addCollectionChanges( session, collectionChanges, deleteElements, RevisionType.DEL, id ); - - return collectionChanges; - } - - private boolean isCollectionElementSame( - SessionImplementor session, - CollectionPersister collectionPersister, - Object lhs, - Object rhs) { - final Type elementType = collectionPersister.getElementType(); - - // If the collection element is an Entity association but the collection does not include the - // REVTYPE column as a part of the primary key, special care must be taken in order to assess - // whether the element actually changed. - // - // Previously we delegated to the element type, which for entity-based collections would be - // EntityType. The EntityType#isSame method results in only a reference equality check. This - // would result in both an ADD/DEL entry trying to be saved for the same entity identifier - // under certain circumstances. While we generally agree with this ORM assessment, this - // leads to HHH-13080 which ultimately is because REVTYPE is not part of the middle entity - // table's primary key. - // - // For 5.x, rather than impose schema changes mid-major release, we're going to explore this - // compromise for now where we're going to treat EntityType-based collections in a slightly - // different way by delegating the equality check to the entity identifier instead. This - // ultimately means that the equality check will leverage both reference and value equality - // since identifiers can be basic or composite types. - // - // In the end for 5.x, this means if an entity is removed from the collection and added - // back with the same identifier, we will treat it as a no-change for now to avoid the - // problem presented in HHH-13080. - // - // todo (6.0) - support REVTYPE as part of the primary key. - // What we actually want to do here is to introduce a legacy compat flag that we check - // when we generate the mapper that influences whether the revisionTypeInId value is - // true or false. When its set to true, we actually will treat all element types, - // regardless if they're entity, embeddables, or basic types equally. - // - // As an example, if a collection is cleared and instances are added back and it just - // so happens that those instances ahve the same entity identifier but aren't reference - // equal to the original collection elements, Envers will then actually treat that as - // a series of DEL followed by ADD operations for those elements, which ultimately is - // the right behavior. But that only works if REVTYPE is part of the primary key so - // that the tuple { owner_id, entity_id, rev, rev_type } differ for the two types of - // revision type operations. - // - // Currently the tuple is { owner_id, entity_id, rev } and so having this special - // treatment is critical to avoid HHH-13080. - // - if ( elementType instanceof EntityType && !revisionTypeInId ) { - - // This is a short-circuit to check for reference equality only. - // There is no need to delegate to the identifier if the objects are reference equal. - if ( elementType.isSame( lhs, rhs ) ) { - return true; - } - - final EntityPersister entityPersister = session.getFactory() - .getMappingMetamodel() - .getEntityDescriptor( ( (EntityType) elementType ).getAssociatedEntityName() ); - - final Object lhsId = entityPersister.getIdentifier( lhs, session ); - final Object rhsId = entityPersister.getIdentifier( rhs, session ); - - // Since the two instances aren't reference equal, delegate to identifier now. - return entityPersister.getIdentifierType().isSame( lhsId, rhsId ); - } - - // for element types that aren't entities (aka embeddables/basic types), use legacy behavior. - return elementType.isSame( lhs, rhs ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/CommonCollectionMapperData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/CommonCollectionMapperData.java deleted file mode 100644 index f29e1bba1667..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/CommonCollectionMapperData.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; - -/** - * Data that is used by all collection mappers, regardless of the type. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class CommonCollectionMapperData { - private final String versionsMiddleEntityName; - private final PropertyData collectionReferencingPropertyData; - private final MiddleIdData referencingIdData; - private final RelationQueryGenerator queryGenerator; - private final String collectionRole; - - public CommonCollectionMapperData( - String versionsMiddleEntityName, - PropertyData collectionReferencingPropertyData, - MiddleIdData referencingIdData, - RelationQueryGenerator queryGenerator, - String collectionRole) { - this.versionsMiddleEntityName = versionsMiddleEntityName; - this.collectionReferencingPropertyData = collectionReferencingPropertyData; - this.referencingIdData = referencingIdData; - this.queryGenerator = queryGenerator; - this.collectionRole = collectionRole; - } - - public String getVersionsMiddleEntityName() { - return versionsMiddleEntityName; - } - - public PropertyData getCollectionReferencingPropertyData() { - return collectionReferencingPropertyData; - } - - public MiddleIdData getReferencingIdData() { - return referencingIdData; - } - - public RelationQueryGenerator getQueryGenerator() { - return queryGenerator; - } - - public String getRole() { - return collectionRole; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ListCollectionMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ListCollectionMapper.java deleted file mode 100644 index 620bee711a90..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ListCollectionMapper.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.ListCollectionInitializor; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy.ListProxy; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.Tools; -import org.hibernate.envers.tools.Pair; -import org.hibernate.persister.collection.CollectionPersister; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class ListCollectionMapper extends AbstractCollectionMapper implements PropertyMapper { - private final MiddleComponentData elementComponentData; - private final MiddleComponentData indexComponentData; - - public ListCollectionMapper( - Configuration configuration, - CommonCollectionMapperData commonCollectionMapperData, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData, - boolean revisionTypeInId) { - super( configuration, commonCollectionMapperData, List.class, ListProxy.class, false, revisionTypeInId ); - this.elementComponentData = elementComponentData; - this.indexComponentData = indexComponentData; - } - - @Override - protected Initializor getInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - Object primaryKey, - Number revision, - boolean removed) { - return new ListCollectionInitializor( - enversService, - versionsReader, - commonCollectionMapperData.getQueryGenerator(), - primaryKey, - revision, - removed, - elementComponentData, - indexComponentData - ); - } - - @Override - @SuppressWarnings("unchecked") - protected Collection getNewCollectionContent(PersistentCollection newCollection) { - if ( newCollection == null ) { - return null; - } - else { - return Tools.listToIndexElementPairList( (List) newCollection ); - } - } - - @Override - @SuppressWarnings("unchecked") - protected Collection getOldCollectionContent(Serializable oldCollection) { - if ( oldCollection == null ) { - return null; - } - else { - return Tools.listToIndexElementPairList( (List) oldCollection ); - } - } - - @Override - @SuppressWarnings("unchecked") - protected void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object changed) { - final Pair indexValuePair = (Pair) changed; - elementComponentData.getComponentMapper().mapToMapFromObject( - session, - idData, - data, - indexValuePair.getSecond() - ); - indexComponentData.getComponentMapper().mapToMapFromObject( session, idData, data, indexValuePair.getFirst() ); - } - - @Override - protected Set buildCollectionChangeSet(Object eventCollection, Collection collection) { - final Set changeSet = new HashSet<>(); - if ( eventCollection != null ) { - for ( Object entry : collection ) { - if ( entry != null ) { - final Pair pair = Pair.class.cast( entry ); - if ( pair.getSecond() == null ) { - continue; - } - changeSet.add( entry ); - } - } - } - return changeSet; - } - - @Override - protected List mapCollectionChanges( - SessionImplementor session, - PersistentCollection newColl, - Serializable oldColl, - Object id) { - final List collectionChanges = new ArrayList<>(); - - final CollectionPersister collectionPersister = resolveCollectionPersister( session, newColl ); - - // Comparing new and old collection content. - final Collection newCollection = getNewCollectionContent( newColl ); - final Collection oldCollection = getOldCollectionContent( oldColl ); - - final Set addedElements = buildCollectionChangeSet( newColl, newCollection ); - if ( oldColl != null ) { - for ( int i = 0; i < oldCollection.size(); ++i ) { - Pair oldEntry = ((List>) oldCollection).get( i ); - for ( Iterator itor = addedElements.iterator(); itor.hasNext(); ) { - Pair addedEntry = (Pair) itor.next(); - if ( oldEntry.getFirst().equals( addedEntry.getFirst() ) ) { - if ( isSame( collectionPersister, oldEntry.getSecond(), addedEntry.getSecond() ) ) { - itor.remove(); - break; - } - } - } - } - } - - final Set deleteElements = buildCollectionChangeSet( oldColl, oldCollection ); - if ( newColl != null ) { - for ( int i = 0; i < newCollection.size(); ++i ) { - Pair newEntry = ((List>) newCollection).get( i ); - for ( Iterator itor = deleteElements.iterator(); itor.hasNext(); ) { - Pair deletedEntry = (Pair) itor.next(); - if ( newEntry.getFirst().equals( deletedEntry.getFirst() ) ) { - if ( isSame( collectionPersister, deletedEntry.getSecond(), newEntry.getSecond() ) ) { - itor.remove(); - break; - } - } - } - } - } - - addCollectionChanges( session, collectionChanges, addedElements, RevisionType.ADD, id ); - addCollectionChanges( session, collectionChanges, deleteElements, RevisionType.DEL, id ); - - return collectionChanges; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MapCollectionMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MapCollectionMapper.java deleted file mode 100644 index 63064d26a68a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MapCollectionMapper.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.MapCollectionInitializor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.persister.collection.CollectionPersister; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class MapCollectionMapper extends AbstractCollectionMapper implements PropertyMapper { - protected final MiddleComponentData elementComponentData; - protected final MiddleComponentData indexComponentData; - - public MapCollectionMapper( - Configuration configuration, - CommonCollectionMapperData commonCollectionMapperData, - Class collectionClass, - Class proxyClass, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData, - boolean revisionTypeInId) { - super( configuration, commonCollectionMapperData, collectionClass, proxyClass, false, revisionTypeInId ); - this.elementComponentData = elementComponentData; - this.indexComponentData = indexComponentData; - } - - @Override - protected Initializor getInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - Object primaryKey, - Number revision, - boolean removed) { - return new MapCollectionInitializor<>( - enversService, - versionsReader, - commonCollectionMapperData.getQueryGenerator(), - primaryKey, - revision, - removed, - collectionClass, - elementComponentData, - indexComponentData - ); - } - - @Override - protected Collection getNewCollectionContent(PersistentCollection newCollection) { - if ( newCollection == null ) { - return null; - } - else { - return ( (Map) newCollection ).entrySet(); - } - } - - @Override - protected Collection getOldCollectionContent(Serializable oldCollection) { - if ( oldCollection == null ) { - return null; - } - else { - return ( (Map) oldCollection ).entrySet(); - } - } - - @Override - protected void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object changed) { - elementComponentData.getComponentMapper().mapToMapFromObject( - session, - idData, - data, - ( (Map.Entry) changed ).getValue() - ); - indexComponentData.getComponentMapper().mapToMapFromObject( - session, - idData, - data, - ( (Map.Entry) changed ).getKey() - ); - } - - @Override - protected Set buildCollectionChangeSet(Object eventCollection, Collection collection) { - final Set changeSet = new HashSet<>(); - if ( eventCollection != null ) { - for ( Object entry : collection ) { - if ( entry != null ) { - final Map.Entry element = Map.Entry.class.cast( entry ); - if ( element.getValue() == null ) { - continue; - } - changeSet.add( entry ); - } - } - } - return changeSet; - } - - @Override - protected boolean isSame(CollectionPersister collectionPersister, Object oldObject, Object newObject) { - final Map.Entry oldEntry = Map.Entry.class.cast( oldObject ); - final Map.Entry newEntry = Map.Entry.class.cast( newObject ); - if ( collectionPersister.getKeyType().isSame( oldEntry.getKey(), newEntry.getKey() ) ) { - if ( collectionPersister.getElementType().isSame( oldEntry.getValue(), newEntry.getValue() ) ) { - return true; - } - } - return false; - } - - @Override - public List mapCollectionChanges( - SessionImplementor session, - PersistentCollection newColl, - Serializable oldColl, - Object id) { - final List collectionChanges = new ArrayList<>(); - final CollectionPersister collectionPersister = resolveCollectionPersister( session, newColl ); - - // Comparing new and old collection content - final Collection newCollection = getNewCollectionContent( newColl ); - final Collection oldCollection = getOldCollectionContent( oldColl ); - - // take the new collection and remove any that exist in the old collection. - // take the resulting Set<> and generate ADD changes - final Set added = buildCollectionChangeSet( newColl, newCollection ); - if ( oldColl != null ) { - for ( Object oldObject : oldCollection ) { - for ( Iterator itor = added.iterator(); itor.hasNext(); ) { - Object newObject = itor.next(); - if ( isSame( collectionPersister, oldObject, newObject ) ) { - itor.remove(); - break; - } - } - } - } - - // take the old collection and remove any that exist in the new collection. - // take the resulting Set<> and generate DEL changes. - final Set deleted = buildCollectionChangeSet( oldColl, oldCollection ); - if ( newColl != null ) { - for ( Object newObject : newCollection ) { - for ( Iterator itor = deleted.iterator(); itor.hasNext(); ) { - Object oldObject = itor.next(); - if ( isSame( collectionPersister, newObject, oldObject ) ) { - itor.remove(); - break; - } - } - } - } - - addCollectionChanges( session, collectionChanges, added, RevisionType.ADD, id ); - addCollectionChanges( session, collectionChanges, deleted, RevisionType.DEL, id ); - - return collectionChanges; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleComponentData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleComponentData.java deleted file mode 100644 index 0c3ffca235d0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleComponentData.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleComponentMapper; - -/** - * A data holder for a middle relation component (which is either the collection element or index): - * - component mapper used to map the component to and from versions entities - * - an index, which specifies in which element of the array returned by the query for reading the collection the data - * of the component is - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class MiddleComponentData { - private final MiddleComponentMapper componentMapper; - private final int componentIndex; - - public MiddleComponentData(MiddleComponentMapper componentMapper) { - this( componentMapper, 0 ); - } - - public MiddleComponentData(MiddleComponentMapper componentMapper, int componentIndex) { - this.componentMapper = componentMapper; - this.componentIndex = componentIndex; - } - - public MiddleComponentMapper getComponentMapper() { - return componentMapper; - } - - public int getComponentIndex() { - return componentIndex; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleIdData.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleIdData.java deleted file mode 100644 index 9e585f8aadc9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleIdData.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.IdMappingData; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; - -/** - * A class holding information about ids, which form a virtual "relation" from a middle-table. Middle-tables are used - * when mapping collections. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class MiddleIdData { - private final IdMapper originalMapper; - private final IdMapper prefixedMapper; - private final String entityName; - private final String auditEntityName; - - public MiddleIdData( - Configuration configuration, - IdMappingData mappingData, - String prefix, - String entityName, - boolean audited) { - this.originalMapper = mappingData.getIdMapper(); - this.prefixedMapper = mappingData.getIdMapper().prefixMappedProperties( prefix ); - this.entityName = entityName; - this.auditEntityName = audited ? configuration.getAuditEntityName( entityName ) : null; - } - - /** - * @return Original id mapper of the related entity. - */ - public IdMapper getOriginalMapper() { - return originalMapper; - } - - /** - * @return prefixed id mapper (with the names for the id fields that are used in the middle table) of the related entity. - */ - public IdMapper getPrefixedMapper() { - return prefixedMapper; - } - - /** - * @return Name of the related entity (regular, not audited). - */ - public String getEntityName() { - return entityName; - } - - /** - * @return Audit name of the related entity. - */ - public String getAuditEntityName() { - return auditEntityName; - } - - /** - * @return Is the entity, to which this middle id data correspond, audited. - */ - public boolean isAudited() { - return auditEntityName != null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleMapKeyEnumeratedComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleMapKeyEnumeratedComponentMapper.java deleted file mode 100644 index 6bda91080ab8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/MiddleMapKeyEnumeratedComponentMapper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.entities.mapper.relation.component.MiddleComponentMapper; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * A {@link MiddleComponentMapper} specifically for {@link jakarta.persistence.MapKeyEnumerated}. - * - * @author Chris Cranford - */ -public class MiddleMapKeyEnumeratedComponentMapper implements MiddleComponentMapper { - private final String propertyName; - - public MiddleMapKeyEnumeratedComponentMapper(String propertyPrefix) { - this.propertyName = propertyPrefix + "_KEY"; - } - - @Override - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, - Map data, - Object dataObject, - Number revision) { - return data.get( propertyName ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - idData.put( propertyName, obj ); - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - throw new UnsupportedOperationException( "Cannot use this mapper with a middle table!" ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/OneToOneNotOwningMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/OneToOneNotOwningMapper.java deleted file mode 100644 index dac4dd93c17f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/OneToOneNotOwningMapper.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.service.ServiceRegistry; - -/** - * Property mapper for not owning side of {@link jakarta.persistence.OneToOne} relation. - * - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class OneToOneNotOwningMapper extends AbstractOneToOneMapper { - private final String owningReferencePropertyName; - - public OneToOneNotOwningMapper( - String notOwningEntityName, - String owningEntityName, - String owningReferencePropertyName, - PropertyData propertyData, - ServiceRegistry serviceRegistry) { - super( notOwningEntityName, owningEntityName, propertyData, serviceRegistry ); - this.owningReferencePropertyName = owningReferencePropertyName; - } - - @Override - protected Object queryForReferencedEntity( - AuditReaderImplementor versionsReader, - EntityInfo referencedEntity, - Serializable primaryKey, - Number revision) { - return versionsReader.createQuery().forEntitiesAtRevision( - referencedEntity.getEntityClass(), - referencedEntity.getEntityName(), revision - ) - .add( AuditEntity.relatedId( owningReferencePropertyName ).eq( primaryKey ) ) - .getSingleResult(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/OneToOnePrimaryKeyJoinColumnMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/OneToOnePrimaryKeyJoinColumnMapper.java deleted file mode 100644 index 12892a218e5e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/OneToOnePrimaryKeyJoinColumnMapper.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.io.Serializable; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.service.ServiceRegistry; - -/** - * Property mapper for {@link jakarta.persistence.OneToOne} with {@link jakarta.persistence.PrimaryKeyJoinColumn} relation. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class OneToOnePrimaryKeyJoinColumnMapper extends AbstractOneToOneMapper { - public OneToOnePrimaryKeyJoinColumnMapper( - String entityName, - String referencedEntityName, - PropertyData propertyData, - ServiceRegistry serviceRegistry) { - super( entityName, referencedEntityName, propertyData, serviceRegistry ); - } - - @Override - protected Object queryForReferencedEntity( - AuditReaderImplementor versionsReader, EntityInfo referencedEntity, - Serializable primaryKey, Number revision) { - if ( referencedEntity.isAudited() ) { - // Audited relation. - return versionsReader.createQuery().forEntitiesAtRevision( - referencedEntity.getEntityClass(), - referencedEntity.getEntityName(), revision - ) - .add( AuditEntity.id().eq( primaryKey ) ) - .getSingleResult(); - } - else { - // Not audited relation. - return createNotAuditedEntityReference( - versionsReader, referencedEntity.getEntityClass(), - referencedEntity.getEntityName(), primaryKey - ); - } - } - - /** - * Create Hibernate proxy or retrieve the complete object of referenced, not audited entity. According to - * {@link org.hibernate.envers.Audited#targetAuditMode()}} documentation, reference shall point to current - * (non-historical) version of an entity. - */ - private Object createNotAuditedEntityReference( - AuditReaderImplementor versionsReader, Class entityClass, - String entityName, Serializable primaryKey) { - final EntityPersister entityPersister = versionsReader.getSessionImplementor() - .getFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ); - if ( entityPersister.hasProxy() ) { - // If possible create a proxy. Returning complete object may affect performance. - return versionsReader.getSession().getReference( entityClass, primaryKey ); - } - else { - // If proxy is not allowed (e.g. @Proxy(lazy=false)) construct the original object. - return versionsReader.getSession().get( entityClass, primaryKey ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/SortedMapCollectionMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/SortedMapCollectionMapper.java deleted file mode 100644 index 27e9e0bb9a0d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/SortedMapCollectionMapper.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.util.Comparator; -import java.util.SortedMap; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.SortedMapCollectionInitializor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public final class SortedMapCollectionMapper extends MapCollectionMapper { - private final Comparator comparator; - - public SortedMapCollectionMapper( - Configuration configuration, - CommonCollectionMapperData commonCollectionMapperData, - Class collectionClass, - Class proxyClass, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData, - Comparator comparator, - boolean revisionTypeInId) { - super( - configuration, - commonCollectionMapperData, - collectionClass, - proxyClass, - elementComponentData, - indexComponentData, - revisionTypeInId - ); - this.comparator = comparator; - } - - @Override - protected Initializor getInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - Object primaryKey, - Number revision, - boolean removed) { - return new SortedMapCollectionInitializor( - enversService, - versionsReader, - commonCollectionMapperData.getQueryGenerator(), - primaryKey, - revision, - removed, - collectionClass, - elementComponentData, - indexComponentData, - comparator - ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/SortedSetCollectionMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/SortedSetCollectionMapper.java deleted file mode 100644 index 7be4fab24858..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/SortedSetCollectionMapper.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.util.Comparator; -import java.util.SortedSet; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.SortedSetCollectionInitializor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public final class SortedSetCollectionMapper extends BasicCollectionMapper { - private final Comparator comparator; - - public SortedSetCollectionMapper( - Configuration configuration, - CommonCollectionMapperData commonCollectionMapperData, - Class collectionClass, - Class proxyClass, - MiddleComponentData elementComponentData, - Comparator comparator, - boolean ordinalInId, - boolean revisionTypeInId) { - super( - configuration, - commonCollectionMapperData, - collectionClass, - proxyClass, - elementComponentData, - ordinalInId, - revisionTypeInId - ); - this.comparator = comparator; - } - - @Override - protected Initializor getInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - Object primaryKey, - Number revision, - boolean removed) { - return new SortedSetCollectionInitializor( - enversService, - versionsReader, - commonCollectionMapperData.getQueryGenerator(), - primaryKey, - revision, - removed, - collectionClass, - elementComponentData, - comparator - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ToOneEntityLoader.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ToOneEntityLoader.java deleted file mode 100644 index 649c951565c9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ToOneEntityLoader.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.ToOneDelegateSessionImplementor; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.persister.entity.EntityPersister; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public final class ToOneEntityLoader { - private ToOneEntityLoader() { - } - - /** - * Immediately loads historical entity or its current state when excluded from audit process. Returns {@code null} - * reference if entity has not been found in the database. - */ - public static Object loadImmediate( - AuditReaderImplementor versionsReader, - Class entityClass, - String entityName, - Object entityId, - Number revision, - boolean removed, - EnversService enversService) { - if ( enversService.getEntitiesConfigurations().getNotVersionEntityConfiguration( entityName ) == null ) { - // Audited relation, look up entity with Envers. - // When user traverses removed entities graph, do not restrict revision type of referencing objects - // to ADD or MOD (DEL possible). See HHH-5845. - return versionsReader.find( entityClass, entityName, entityId, revision, removed ); - } - else { - // Not audited relation, look up entity with Hibernate. - return versionsReader.getSessionImplementor().immediateLoad( entityName, entityId ); - } - } - - /** - * Creates proxy of referenced *-to-one entity. - */ - public static Object createProxy( - AuditReaderImplementor versionsReader, - Class entityClass, - String entityName, - Object entityId, - Number revision, - boolean removed, - EnversService enversService) { - final EntityPersister persister = versionsReader.getSessionImplementor() - .getFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ); - return persister.createProxy( - entityId, - new ToOneDelegateSessionImplementor( versionsReader, entityClass, entityId, revision, removed, enversService ) - ); - } - - /** - * Creates Hibernate proxy or retrieves the complete object of an entity if proxy is not - * allowed (e.g. @Proxy(lazy=false), final class). - */ - public static Object createProxyOrLoadImmediate( - AuditReaderImplementor versionsReader, - Class entityClass, - String entityName, - Object entityId, - Number revision, - boolean removed, - EnversService enversService) { - final EntityPersister persister = versionsReader.getSessionImplementor() - .getFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ); - if ( persister.hasProxy() ) { - return createProxy( versionsReader, entityClass, entityName, entityId, revision, removed, enversService ); - } - return loadImmediate( versionsReader, entityClass, entityName, entityId, revision, removed, enversService ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ToOneIdMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ToOneIdMapper.java deleted file mode 100644 index 5f5e7ddf032f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/ToOneIdMapper.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.EntityTools; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.persister.entity.EntityPersister; -import org.jboss.logging.Logger; - -/** - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - * @author Luke Chen - */ -public class ToOneIdMapper extends AbstractToOneMapper { - private static final Logger log = Logger.getLogger( ToOneIdMapper.class ); - private final IdMapper delegate; - private final String referencedEntityName; - private final boolean nonInsertableFake; - private final boolean lazyMapping; - - public ToOneIdMapper( - IdMapper delegate, - PropertyData propertyData, - String referencedEntityName, - boolean nonInsertableFake, - boolean lazyMapping) { - super( delegate.getServiceRegistry(), propertyData ); - this.delegate = delegate; - this.referencedEntityName = referencedEntityName; - this.nonInsertableFake = nonInsertableFake; - this.lazyMapping = lazyMapping; - } - - @Override - public boolean mapToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - final HashMap newData = new HashMap<>(); - - // If this property is originally non-insertable, but made insertable because it is in a many-to-one "fake" - // bi-directional relation, we always store the "old", unchanged data, to prevent storing changes made - // to this field. It is the responsibility of the collection to properly update it if it really changed. - Object entity = nonInsertableFake ? oldObj : newObj; - - delegate.mapToMapFromEntity( newData, entity ); - - for ( Map.Entry entry : newData.entrySet() ) { - data.put( entry.getKey(), entry.getValue() ); - } - - return checkModified( session, newObj, oldObj ); - } - - @Override - public void mapModifiedFlagsToMapFromEntity( - SessionImplementor session, - Map data, - Object newObj, - Object oldObj) { - if ( getPropertyData().isUsingModifiedFlag() ) { - data.put( getPropertyData().getModifiedFlagPropertyName(), checkModified( session, newObj, oldObj ) ); - } - } - - @Override - public void mapModifiedFlagsToMapForCollectionChange(String collectionPropertyName, Map data) { - if ( getPropertyData().isUsingModifiedFlag() ) { - data.put( - getPropertyData().getModifiedFlagPropertyName(), - collectionPropertyName.equals( getPropertyData().getName() ) - ); - } - } - - protected boolean checkModified(SessionImplementor session, Object newObj, Object oldObj) { - if ( nonInsertableFake ) { - return false; - } - - if ( newObj == null || oldObj == null || newObj.getClass().equals( oldObj.getClass() ) ) { - return !EntityTools.entitiesEqual( session, referencedEntityName, newObj, oldObj ); - } - - // There is a chance that oldObj may reference the identifier of the old entity rather - // than the entity instance itself. This happens under Session#update with a detached - // entity because the database snapshot that is used to derive the prior state doesn't - // return the entity instances of the to-one associations but only the identifier. - // - // So here we assume the method was supplied the id and we ask the persister to verify - // if the value is the identifier type. If not, we assume its the entity type and - // therefore resolve the identifier from the entity directly prior to simply then - // doing the identifier comparison. - - final EntityPersister persister = session.getFactory().getMappingMetamodel().getEntityDescriptor( referencedEntityName ); - - Object resolvedNewObjectId = newObj; - if ( !persister.getIdentifierType().getReturnedClass().isInstance( newObj ) ) { - resolvedNewObjectId = EntityTools.getIdentifier( session, referencedEntityName, newObj ); - } - - Object resolvedOldObjectId = oldObj; - if ( !persister.getIdentifierType().getReturnedClass().isInstance( oldObj ) ) { - resolvedOldObjectId = EntityTools.getIdentifier( session, referencedEntityName, oldObj ); - } - - return !Objects.deepEquals( resolvedNewObjectId, resolvedOldObjectId ); - } - - @Override - public void nullSafeMapToEntityFromMap( - EnversService enversService, - Object obj, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - Object value = nullSafeMapToEntityFromMap( enversService, data, primaryKey, versionsReader, revision ); - setPropertyValue( obj, value ); - } - - @Override - public Object nullSafeMapToEntityFromMap( - EnversService enversService, - Map data, - Object primaryKey, - AuditReaderImplementor versionsReader, - Number revision) { - final Object entityId = delegate.mapToIdFromMap( data ); - Object value = null; - if ( entityId != null ) { - if ( versionsReader.getFirstLevelCache().contains( referencedEntityName, revision, entityId ) ) { - value = versionsReader.getFirstLevelCache().get( referencedEntityName, revision, entityId ); - } - else { - final EntityInfo referencedEntity = getEntityInfo( enversService, referencedEntityName ); - if ( isIgnoreNotFound( enversService, referencedEntity, data, primaryKey ) ) { - // Eagerly loading referenced entity to silence potential (in case of proxy) - // EntityNotFoundException or ObjectNotFoundException. Assigning null reference. - value = ToOneEntityLoader.loadImmediate( - versionsReader, - referencedEntity.getEntityClass(), - referencedEntityName, - entityId, - revision, - RevisionType.DEL.equals( data.get( enversService.getConfig().getRevisionTypePropertyName() ) ), - enversService - ); - } - else { - value = ToOneEntityLoader.createProxyOrLoadImmediate( - versionsReader, - referencedEntity.getEntityClass(), - referencedEntityName, - entityId, - revision, - RevisionType.DEL.equals( data.get( enversService.getConfig().getRevisionTypePropertyName() ) ), - enversService - ); - } - } - } - return value; - } - - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - delegate.addNullableIdsEqualToQuery( parameters, prefix1, delegate, prefix2 ); - } - - // todo: is referenced entity needed any longer? - private boolean isIgnoreNotFound( - EnversService enversService, - EntityInfo referencedEntity, - Map data, - Object primaryKey) { - final String referencingEntityName = enversService.getEntitiesConfigurations() - .getEntityNameForVersionsEntityName( (String) data.get( "$type$" ) ); - - if ( referencingEntityName == null && primaryKey == null ) { - // HHH-11215 - Fix for NPE when Embeddable with ManyToOne inside ElementCollection - // an embeddable in an element-collection - // todo: perhaps the mapper should account for this instead? - return true; - } - - return enversService.getEntitiesConfigurations() - .getRelationDescription( referencingEntityName, getPropertyData().getName() ) - .isIgnoreNotFound(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/AbstractMiddleComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/AbstractMiddleComponentMapper.java deleted file mode 100644 index 31420f18ae35..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/AbstractMiddleComponentMapper.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import org.hibernate.envers.internal.entities.mapper.AbstractMapper; - -/** - * An abstract base class for all middle component mappers. - * - * @author Chris Cranford - */ -public abstract class AbstractMiddleComponentMapper extends AbstractMapper implements MiddleComponentMapper { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleComponentMapper.java deleted file mode 100644 index ff87a04f7c5a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleComponentMapper.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface MiddleComponentMapper { - /** - * Maps from full object data, contained in the given map (or object representation of the map, if - * available), to an object. - * - * @param entityInstantiator An entity instatiator bound with an open versions reader. - * @param data Full object data. - * @param dataObject An optional object representation of the data. - * @param revision Revision at which the data is read. - * - * @return An object with data corresponding to the one found in the given map. - */ - Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, Map data, - Object dataObject, Number revision); - - /** - * Maps from an object to the object's map representation (for an entity - only its id). - * - * @param session The current session. - * @param idData Map to which composite-id data should be added. - * @param data Map to which data should be added. - * @param obj Object to map from. - */ - void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj); - - /** - * Adds query statements, which contains restrictions, which express the property that part of the middle - * entity with alias prefix1, is equal to part of the middle entity with alias prefix2 (the entity is the same). - * The part is the component's representation in the middle entity. - * - * @param parameters Parameters, to which to add the statements. - * @param idPrefix1 First alias of the entity + prefix + id to add to the properties. - * @param prefix1 First alias of the entity + prefix to add to the properties. - * @param idPrefix2 Second alias of the entity + prefix + id to add to the properties. - * @param prefix2 Second alias of the entity + prefix to add to the properties. - */ - void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleDummyComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleDummyComponentMapper.java deleted file mode 100644 index 9a881f6d78ce..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleDummyComponentMapper.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public final class MiddleDummyComponentMapper extends AbstractMiddleComponentMapper { - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, Map data, - Object dataObject, Number revision) { - return null; - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleEmbeddableComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleEmbeddableComponentMapper.java deleted file mode 100644 index 52730838f2cd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleEmbeddableComponentMapper.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.CompositeMapperBuilder; -import org.hibernate.envers.internal.entities.mapper.MultiPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; -import org.hibernate.envers.internal.entities.mapper.relation.ToOneIdMapper; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.metamodel.spi.EmbeddableInstantiator; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -public class MiddleEmbeddableComponentMapper extends AbstractMiddleComponentMapper implements CompositeMapperBuilder { - - private final MultiPropertyMapper delegate; - private final Class componentClass; - - public MiddleEmbeddableComponentMapper(MultiPropertyMapper delegate, Class componentClass) { - this.delegate = delegate; - this.componentClass = componentClass; - } - - @Override - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, - Map data, - Object dataObject, - Number revision) { - try { - final Object componentInstance = getComponentInstance( dataObject ); - delegate.mapToEntityFromMap( - entityInstantiator.getEnversService(), - componentInstance, - data, - null, - entityInstantiator.getAuditReaderImplementor(), - revision - ); - return componentInstance; - } - catch (AuditException e) { - // just throw the AuditException without wrapping in another AuditException - throw e; - } - catch (Exception e) { - throw new AuditException( e ); - } - } - - private Object getComponentInstance(Object dataObject) { - if ( dataObject != null ) { - return dataObject; - } - return newObjectInstance( componentClass ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - delegate.mapToMapFromEntity( session, data, obj, obj ); - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - addMiddleEqualToQuery( delegate, parameters, idPrefix1, prefix1, idPrefix2, prefix2 ); - } - - protected void addMiddleEqualToQuery( - CompositeMapperBuilder compositeMapper, - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - for ( final Map.Entry entry : compositeMapper.getProperties().entrySet() ) { - final String propertyName = entry.getKey().getName(); - final PropertyMapper nestedMapper = entry.getValue(); - if ( nestedMapper instanceof CompositeMapperBuilder ) { - addMiddleEqualToQuery( - (CompositeMapperBuilder) nestedMapper, - parameters, - idPrefix1, - prefix1, - idPrefix2, - prefix2 - ); - } - else if ( nestedMapper instanceof ToOneIdMapper ) { - ( (ToOneIdMapper) nestedMapper ).addMiddleEqualToQuery( - parameters, - idPrefix1, - prefix1, - idPrefix2, - prefix2 - ); - } - else { - parameters.addWhereOrNullRestriction( - prefix1 + '.' + propertyName, - false, - "=", - prefix2 + '.' + propertyName, false - ); - } - } - } - - @Override - public CompositeMapperBuilder addComponent( - PropertyData propertyData, - Class componentClass, EmbeddableInstantiator instantiator) { - return delegate.addComponent( propertyData, componentClass, instantiator ); - } - - @Override - public void addComposite(PropertyData propertyData, PropertyMapper propertyMapper) { - delegate.addComposite( propertyData, propertyMapper ); - } - - @Override - public void add(PropertyData propertyData) { - delegate.add( propertyData ); - } - - public Map getProperties() { - return delegate.getProperties(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapElementNotKeyComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapElementNotKeyComponentMapper.java deleted file mode 100644 index 452e47b4a21c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapElementNotKeyComponentMapper.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * A middle table component mapper which assigns a Map-type's element as part - * of the data-portion of the mapping rather than the identifier. - *

- * This is useful for mappings where the database does not support CLOB or NCLOB - * data types as part of the primary key for the table. - *

- * An example: - *
- *     @ElementCollection
- *     @Lob
- *     private Map<String, String> values;
- * 
- * - * @author Chris Cranford - */ -public class MiddleMapElementNotKeyComponentMapper extends AbstractMiddleComponentMapper { - private final String propertyName; - - public MiddleMapElementNotKeyComponentMapper(String propertyName) { - this.propertyName = propertyName; - } - - @Override - @SuppressWarnings("unchecked") - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, - Map data, - Object dataObject, - Number revision) { - return data.get( propertyName ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - data.put( propertyName, obj ); - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - parameters.addWhere( prefix1 + "." + propertyName, false, "=", prefix2 + "." + propertyName, false ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapKeyIdComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapKeyIdComponentMapper.java deleted file mode 100644 index 0bc65d3f4dc5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapKeyIdComponentMapper.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * A component mapper for the @MapKey mapping: the value of the map's key is the id of the entity. This - * doesn't have an effect on the data stored in the versions tables, so mapToMapFromObject is - * empty. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class MiddleMapKeyIdComponentMapper extends AbstractMiddleComponentMapper { - private final Configuration configuration; - private final IdMapper relatedIdMapper; - - public MiddleMapKeyIdComponentMapper(Configuration configuration, IdMapper relatedIdMapper) { - this.configuration = configuration; - this.relatedIdMapper = relatedIdMapper; - } - - @Override - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, Map data, - Object dataObject, Number revision) { - return relatedIdMapper.mapToIdFromMap( (Map) data.get( configuration.getOriginalIdPropertyName() ) ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - // Doing nothing. - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - // Doing nothing. - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapKeyPropertyComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapKeyPropertyComponentMapper.java deleted file mode 100644 index 4fec4bc15042..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleMapKeyPropertyComponentMapper.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * A component mapper for the @MapKey mapping with the name parameter specified: the value of the map's key - * is a property of the entity. This doesn't have an effect on the data stored in the versions tables, - * so mapToMapFromObject is empty. - * - * @author Adam Warski (adam at warski dot org) - */ -public class MiddleMapKeyPropertyComponentMapper extends AbstractMiddleComponentMapper { - private final String propertyName; - private final String accessType; - - public MiddleMapKeyPropertyComponentMapper(String propertyName, String accessType) { - this.propertyName = propertyName; - this.accessType = accessType; - } - - @Override - public Object mapToObjectFromFullMap( - final EntityInstantiator entityInstantiator, - final Map data, - final Object dataObject, - Number revision) { - // dataObject is not null, as this mapper can only be used in an index. - return getValueFromObject( - propertyName, - accessType, - dataObject, - entityInstantiator.getEnversService().getServiceRegistry() - ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - // Doing nothing. - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - // Doing nothing. - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleRelatedComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleRelatedComponentMapper.java deleted file mode 100644 index ce611357612e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleRelatedComponentMapper.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public final class MiddleRelatedComponentMapper extends AbstractMiddleComponentMapper { - private final MiddleIdData relatedIdData; - - public MiddleRelatedComponentMapper(MiddleIdData relatedIdData) { - this.relatedIdData = relatedIdData; - } - - @Override - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, Map data, - Object dataObject, Number revision) { - return entityInstantiator.createInstanceFromVersionsEntity( relatedIdData.getEntityName(), data, revision ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - relatedIdData.getPrefixedMapper().mapToMapFromEntity( idData, obj ); - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - relatedIdData.getPrefixedMapper().addIdsEqualToQuery( parameters, idPrefix1, idPrefix2 ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleSimpleComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleSimpleComponentMapper.java deleted file mode 100644 index 5f21e052c4a9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleSimpleComponentMapper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public final class MiddleSimpleComponentMapper extends AbstractMiddleComponentMapper { - private final Configuration configuration; - private final String propertyName; - - public MiddleSimpleComponentMapper(Configuration configuration, String propertyName) { - this.configuration = configuration; - this.propertyName = propertyName; - } - - @Override - @SuppressWarnings("unchecked") - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, Map data, - Object dataObject, Number revision) { - return ( (Map) data.get( configuration.getOriginalIdPropertyName() ) ).get( propertyName ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - idData.put( propertyName, obj ); - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - parameters.addWhere( idPrefix1 + "." + propertyName, false, "=", idPrefix2 + "." + propertyName, false ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleStraightComponentMapper.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleStraightComponentMapper.java deleted file mode 100644 index 23278593ce50..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/component/MiddleStraightComponentMapper.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.component; - -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.tools.query.Parameters; - -/** - * A mapper for reading and writing a property straight to/from maps. This mapper cannot be used with middle tables, - * but only with "fake" bidirectional indexed relations. - * - * @author Adam Warski (adam at warski dot org) - */ -public final class MiddleStraightComponentMapper extends AbstractMiddleComponentMapper { - private final String propertyName; - - public MiddleStraightComponentMapper(String propertyName) { - this.propertyName = propertyName; - } - - @Override - @SuppressWarnings("unchecked") - public Object mapToObjectFromFullMap( - EntityInstantiator entityInstantiator, Map data, - Object dataObject, Number revision) { - return data.get( propertyName ); - } - - @Override - public void mapToMapFromObject( - SessionImplementor session, - Map idData, - Map data, - Object obj) { - idData.put( propertyName, obj ); - } - - @Override - public void addMiddleEqualToQuery( - Parameters parameters, - String idPrefix1, - String prefix1, - String idPrefix2, - String prefix2) { - throw new UnsupportedOperationException( "Cannot use this mapper with a middle table!" ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java deleted file mode 100644 index b32510e0759d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/AbstractDelegateSessionImplementor.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy; - -import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SessionDelegatorBaseImpl; -import org.hibernate.engine.spi.SessionImplementor; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractDelegateSessionImplementor extends SessionDelegatorBaseImpl implements SessionImplementor { - public AbstractDelegateSessionImplementor(SessionImplementor delegate) { - super( delegate ); - } - - public abstract Object doImmediateLoad(String entityName); - - @Override - public Object immediateLoad(String entityName, Object id) throws HibernateException { - return doImmediateLoad( entityName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java deleted file mode 100644 index 72547a854f57..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/ToOneDelegateSessionImplementor.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy; - -import org.hibernate.HibernateException; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.ToOneEntityLoader; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Tomasz Bech - * @author HernпїЅn Chanfreau - */ -public class ToOneDelegateSessionImplementor extends AbstractDelegateSessionImplementor { - private static final long serialVersionUID = 4770438372940785488L; - - private final AuditReaderImplementor versionsReader; - private final Class entityClass; - private final Object entityId; - private final Number revision; - private final boolean removed; - private final EnversService enversService; - - public ToOneDelegateSessionImplementor( - AuditReaderImplementor versionsReader, - Class entityClass, - Object entityId, - Number revision, - boolean removed, - EnversService enversService) { - super( versionsReader.getSessionImplementor() ); - this.versionsReader = versionsReader; - this.entityClass = entityClass; - this.entityId = entityId; - this.revision = revision; - this.removed = removed; - this.enversService = enversService; - } - - @Override - public Object doImmediateLoad(String entityName) throws HibernateException { - return ToOneEntityLoader.loadImmediate( - versionsReader, - entityClass, - entityName, - entityId, - revision, - removed, - enversService - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/AbstractCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/AbstractCollectionInitializor.java deleted file mode 100644 index a173d95306f7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/AbstractCollectionInitializor.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.List; - -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.internal.util.ReflectHelper; - -/** - * Initializes a persistent collection. - * - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractCollectionInitializor implements Initializor { - private final AuditReaderImplementor versionsReader; - private final RelationQueryGenerator queryGenerator; - private final Object primaryKey; - protected final Number revision; - protected final boolean removed; - protected final EntityInstantiator entityInstantiator; - - public AbstractCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, Number revision, boolean removed) { - this.versionsReader = versionsReader; - this.queryGenerator = queryGenerator; - this.primaryKey = primaryKey; - this.revision = revision; - this.removed = removed; - - entityInstantiator = new EntityInstantiator( enversService, versionsReader ); - } - - protected abstract T initializeCollection(int size); - - protected abstract void addToCollection(T collection, Object collectionRow); - - @Override - public T initialize() { - final SharedSessionContractImplementor session = versionsReader.getSessionImplementor(); - final List collectionContent = queryGenerator.getQuery( session, primaryKey, revision, removed ).list(); - - final T collection = initializeCollection( collectionContent.size() ); - - for ( Object collectionRow : collectionContent ) { - addToCollection( collection, collectionRow ); - } - - return collection; - } - - /** - * Creates a new object based on the specified class with the given constructor arguments. - * - * @param clazz the class, must not be {@literal null} - * @param args the variadic constructor arguments, may be omitted. - * @param the return class type - * @return a new instance of the class - */ - protected R newObjectInstance(Class clazz, Object... args) { - try { - final Constructor constructor = ReflectHelper.getDefaultConstructor( clazz ); - if ( constructor == null ) { - throw new AuditException( "Failed to locate default constructor for class: " + clazz.getName() ); - } - return constructor.newInstance( args ); - } - catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { - throw new AuditException( e ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/ArrayCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/ArrayCollectionInitializor.java deleted file mode 100644 index 32968d83edd1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/ArrayCollectionInitializor.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Initializes a map. - * - * @author Adam Warski (adam at warski dot org) - */ -public class ArrayCollectionInitializor extends AbstractCollectionInitializor { - private final MiddleComponentData elementComponentData; - private final MiddleComponentData indexComponentData; - - public ArrayCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, Number revision, boolean removed, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData) { - super( enversService, versionsReader, queryGenerator, primaryKey, revision, removed ); - - this.elementComponentData = elementComponentData; - this.indexComponentData = indexComponentData; - } - - @Override - protected Object[] initializeCollection(int size) { - return new Object[size]; - } - - @Override - @SuppressWarnings("unchecked") - protected void addToCollection(Object[] collection, Object collectionRow) { - final Object elementData = ( (List) collectionRow ).get( elementComponentData.getComponentIndex() ); - final Object element = elementComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) elementData, null, revision - ); - - final Object indexData = ( (List) collectionRow ).get( indexComponentData.getComponentIndex() ); - final Object indexObj = indexComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) indexData, element, revision - ); - final int index = ( (Number) indexObj ).intValue(); - - collection[index] = element; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/BasicCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/BasicCollectionInitializor.java deleted file mode 100644 index 99de738a61fc..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/BasicCollectionInitializor.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Initializes a non-indexed java collection (set or list, eventually sorted). - * - * @author Adam Warski (adam at warski dot org) - */ -public class BasicCollectionInitializor extends AbstractCollectionInitializor { - protected final Class collectionClass; - private final MiddleComponentData elementComponentData; - - public BasicCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, Number revision, boolean removed, - Class collectionClass, - MiddleComponentData elementComponentData) { - super( enversService, versionsReader, queryGenerator, primaryKey, revision, removed ); - - this.collectionClass = collectionClass; - this.elementComponentData = elementComponentData; - } - - @Override - @SuppressWarnings("unchecked") - protected T initializeCollection(int size) { - return newObjectInstance( collectionClass ); - } - - @Override - @SuppressWarnings("unchecked") - protected void addToCollection(T collection, Object collectionRow) { - // collectionRow will be the actual object if retrieved from audit relation or middle table - // otherwise it will be a List - Object elementData = collectionRow; - if ( collectionRow instanceof List ) { - elementData = ( (List) collectionRow ).get( elementComponentData.getComponentIndex() ); - } - - // If the target entity is not audited, the elements may be the entities already, so we have to check - // if they are maps or not. - Object element; - if ( elementData instanceof Map ) { - element = elementComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) elementData, null, revision - ); - } - else { - element = elementData; - } - collection.add( element ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/Initializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/Initializor.java deleted file mode 100644 index 60a1ace92b2a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/Initializor.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface Initializor { - T initialize(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/ListCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/ListCollectionInitializor.java deleted file mode 100644 index 9f0282667883..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/ListCollectionInitializor.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Initializes a map. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class ListCollectionInitializor extends AbstractCollectionInitializor { - private final MiddleComponentData elementComponentData; - private final MiddleComponentData indexComponentData; - - public ListCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, - Number revision, - boolean removed, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData) { - super( enversService, versionsReader, queryGenerator, primaryKey, revision, removed ); - - this.elementComponentData = elementComponentData; - this.indexComponentData = indexComponentData; - } - - @Override - @SuppressWarnings("unchecked") - protected List initializeCollection(int size) { - // There are two types of List collections that this class may generate - // - // 1. Those which are not-indexed, thus the entries in the list are equal to the size argument passed. - // 2. Those which are indexed, thus the entries in the list are based on the highest result-set index value. - // In this use case, the supplied size value is irrelevant other than to minimize allocations. - // - // So what we're going to do is to build an ArrayList based on the supplied size as the best of the two - // worlds. When adding elements to the collection, we cannot make any assumption that the slot for which - // we are inserting is valid, so we must continually expand the list as needed for (2); however we can - // avoid unnecessary memory allocations by using the size parameter as an optimization for both (1) and (2). - final List list = new ArrayList( size ); - for ( int i = 0; i < size; i++ ) { - list.add( i, null ); - } - return list; - } - - @Override - @SuppressWarnings("unchecked") - protected void addToCollection(List collection, Object collectionRow) { - // collectionRow will be the actual object if retrieved from audit relation or middle table - // otherwise it will be a List - Object elementData = collectionRow; - Object indexData = collectionRow; - if ( List.class.isInstance( collectionRow ) ) { - final List row = List.class.cast( collectionRow ); - elementData = row.get( elementComponentData.getComponentIndex() ); - indexData = row.get( indexComponentData.getComponentIndex() ); - } - - final Object element; - if ( Map.class.isInstance( elementData ) ) { - element = elementComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) elementData, - null, - revision - ); - } - else { - element = elementData; - } - - final Object indexObj = indexComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) indexData, - element, - revision - ); - - final int index = ( (Number) indexObj ).intValue(); - - // This is copied from PersistentList#readFrom - // For the indexed list use case to make sure the slot that we're going to set actually exists. - for ( int i = collection.size(); i <= index; ++i ) { - collection.add( i, null ); - } - - collection.set( index, element ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/MapCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/MapCollectionInitializor.java deleted file mode 100644 index 6787c3fd7b16..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/MapCollectionInitializor.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Initializes a map. - * - * @author Adam Warski (adam at warski dot org) - */ -public class MapCollectionInitializor extends AbstractCollectionInitializor { - protected final Class collectionClass; - private final MiddleComponentData elementComponentData; - private final MiddleComponentData indexComponentData; - - public MapCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, Number revision, boolean removed, - Class collectionClass, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData) { - super( enversService, versionsReader, queryGenerator, primaryKey, revision, removed ); - - this.collectionClass = collectionClass; - this.elementComponentData = elementComponentData; - this.indexComponentData = indexComponentData; - } - - @Override - @SuppressWarnings("unchecked") - protected T initializeCollection(int size) { - return newObjectInstance( collectionClass ); - } - - @Override - @SuppressWarnings("unchecked") - protected void addToCollection(T collection, Object collectionRow) { - // collectionRow will be the actual object if retrieved from audit relation or middle table - // otherwise it will be a List - Object elementData = collectionRow; - Object indexData = collectionRow; - if ( collectionRow instanceof List ) { - elementData = ( (List) collectionRow ).get( elementComponentData.getComponentIndex() ); - indexData = ( (List) collectionRow ).get( indexComponentData.getComponentIndex() ); - } - final Object element = elementComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) elementData, null, revision - ); - - final Object index = indexComponentData.getComponentMapper().mapToObjectFromFullMap( - entityInstantiator, - (Map) indexData, element, revision - ); - - collection.put( index, element ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/SortedMapCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/SortedMapCollectionInitializor.java deleted file mode 100644 index 33c61adbebe0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/SortedMapCollectionInitializor.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.lang.reflect.InvocationTargetException; -import java.util.Comparator; -import java.util.SortedMap; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Initializes SortedMap collection with proper Comparator - * - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class SortedMapCollectionInitializor extends MapCollectionInitializor { - private final Comparator comparator; - - public SortedMapCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, Number revision, boolean removed, - Class collectionClass, - MiddleComponentData elementComponentData, - MiddleComponentData indexComponentData, Comparator comparator) { - super( - enversService, - versionsReader, - queryGenerator, - primaryKey, - revision, - removed, - collectionClass, - elementComponentData, - indexComponentData - ); - this.comparator = comparator; - } - - @Override - protected SortedMap initializeCollection(int size) { - if ( comparator == null ) { - return super.initializeCollection( size ); - } - try { - return collectionClass.getConstructor( Comparator.class ).newInstance( comparator ); - } - catch (InstantiationException e) { - throw new AuditException( e ); - } - catch (IllegalAccessException e) { - throw new AuditException( e ); - } - catch (NoSuchMethodException e) { - throw new AuditException( e ); - } - catch (InvocationTargetException e) { - throw new AuditException( e ); - } - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/SortedSetCollectionInitializor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/SortedSetCollectionInitializor.java deleted file mode 100644 index e5e93dc1cce9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/initializor/SortedSetCollectionInitializor.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor; - -import java.lang.reflect.InvocationTargetException; -import java.util.Comparator; -import java.util.SortedSet; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.query.RelationQueryGenerator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; - -/** - * Initializes SortedSet collection with proper Comparator - * - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class SortedSetCollectionInitializor extends BasicCollectionInitializor { - private final Comparator comparator; - - public SortedSetCollectionInitializor( - EnversService enversService, - AuditReaderImplementor versionsReader, - RelationQueryGenerator queryGenerator, - Object primaryKey, - Number revision, - boolean removed, - Class collectionClass, - MiddleComponentData elementComponentData, - Comparator comparator) { - super( - enversService, - versionsReader, - queryGenerator, - primaryKey, - revision, - removed, - collectionClass, - elementComponentData - ); - this.comparator = comparator; - } - - @Override - protected SortedSet initializeCollection(int size) { - if ( comparator == null ) { - return super.initializeCollection( size ); - } - try { - return collectionClass.getConstructor( Comparator.class ).newInstance(comparator); - } - catch (InstantiationException e) { - throw new AuditException( e ); - } - catch (IllegalAccessException e) { - throw new AuditException( e ); - } - catch (NoSuchMethodException e) { - throw new AuditException( e ); - } - catch (InvocationTargetException e) { - throw new AuditException( e ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/CollectionProxy.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/CollectionProxy.java deleted file mode 100644 index 91037d756e5c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/CollectionProxy.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy; - -import java.io.Serializable; -import java.util.Collection; -import java.util.Iterator; -import org.hibernate.collection.spi.LazyInitializable; - -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class CollectionProxy> implements Collection, LazyInitializable, Serializable { - - private static final long serialVersionUID = 8698249863871832402L; - - private transient Initializor initializor; - protected T delegate; - - protected CollectionProxy() { - } - - public CollectionProxy(Initializor initializor) { - this.initializor = initializor; - } - - protected void checkInit() { - if ( delegate == null ) { - delegate = initializor.initialize(); - } - } - - @Override - public final boolean wasInitialized() { - return delegate != null; - } - - @Override - public final void forceInitialization() { - checkInit(); - } - - @Override - public int size() { - checkInit(); - return delegate.size(); - } - - @Override - public boolean isEmpty() { - checkInit(); - return delegate.isEmpty(); - } - - @Override - public boolean contains(Object o) { - checkInit(); - return delegate.contains( o ); - } - - @Override - public Iterator iterator() { - checkInit(); - return delegate.iterator(); - } - - @Override - public Object[] toArray() { - checkInit(); - return delegate.toArray(); - } - - @Override - public V[] toArray(V[] a) { - checkInit(); - return delegate.toArray( a ); - } - - @Override - public boolean add(U o) { - checkInit(); - return delegate.add( o ); - } - - @Override - public boolean remove(Object o) { - checkInit(); - return delegate.remove( o ); - } - - @Override - public boolean containsAll(Collection c) { - checkInit(); - return delegate.containsAll( c ); - } - - @Override - public boolean addAll(Collection c) { - checkInit(); - return delegate.addAll( c ); - } - - @Override - public boolean removeAll(Collection c) { - checkInit(); - return delegate.removeAll( c ); - } - - @Override - public boolean retainAll(Collection c) { - checkInit(); - return delegate.retainAll( c ); - } - - @Override - public void clear() { - checkInit(); - delegate.clear(); - } - - @Override - public String toString() { - checkInit(); - return delegate.toString(); - } - - @SuppressWarnings({ "EqualsWhichDoesntCheckParameterClass" }) - @Override - public boolean equals(Object obj) { - checkInit(); - return delegate.equals( obj ); - } - - @Override - public int hashCode() { - checkInit(); - return delegate.hashCode(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/ListProxy.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/ListProxy.java deleted file mode 100644 index 12badcb3e755..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/ListProxy.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy; - -import java.util.Collection; -import java.util.List; -import java.util.ListIterator; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ListProxy extends CollectionProxy> implements List { - private static final long serialVersionUID = -5479232938279790987L; - - public ListProxy() { - } - - public ListProxy(org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor> initializor) { - super( initializor ); - } - - @Override - public boolean addAll(int index, Collection c) { - checkInit(); - return delegate.addAll( index, c ); - } - - @Override - public U get(int index) { - checkInit(); - return delegate.get( index ); - } - - @Override - public U set(int index, U element) { - checkInit(); - return delegate.set( index, element ); - } - - @Override - public void add(int index, U element) { - checkInit(); - delegate.add( index, element ); - } - - @Override - public U remove(int index) { - checkInit(); - return delegate.remove( index ); - } - - @Override - public int indexOf(Object o) { - checkInit(); - return delegate.indexOf( o ); - } - - @Override - public int lastIndexOf(Object o) { - checkInit(); - return delegate.lastIndexOf( o ); - } - - @Override - public ListIterator listIterator() { - checkInit(); - return delegate.listIterator(); - } - - @Override - public ListIterator listIterator(int index) { - checkInit(); - return delegate.listIterator( index ); - } - - @Override - public List subList(int fromIndex, int toIndex) { - checkInit(); - return delegate.subList( fromIndex, toIndex ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/MapProxy.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/MapProxy.java deleted file mode 100644 index 3ae3a99bcfee..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/MapProxy.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy; - -import java.io.Serializable; -import java.util.Collection; -import java.util.Map; -import java.util.Set; -import org.hibernate.collection.spi.LazyInitializable; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MapProxy implements Map, LazyInitializable, Serializable { - - private static final long serialVersionUID = 8418037541773074646L; - - private transient Initializor> initializor; - protected Map delegate; - - public MapProxy() { - } - - public MapProxy(Initializor> initializor) { - this.initializor = initializor; - } - - private void checkInit() { - if ( delegate == null ) { - delegate = initializor.initialize(); - } - } - - @Override - public final boolean wasInitialized() { - return delegate != null; - } - - @Override - public final void forceInitialization() { - checkInit(); - } - - @Override - public int size() { - checkInit(); - return delegate.size(); - } - - @Override - public boolean isEmpty() { - checkInit(); - return delegate.isEmpty(); - } - - @Override - public boolean containsKey(Object o) { - checkInit(); - return delegate.containsKey( o ); - } - - @Override - public boolean containsValue(Object o) { - checkInit(); - return delegate.containsValue( o ); - } - - @Override - public V get(Object o) { - checkInit(); - return delegate.get( o ); - } - - @Override - public V put(K k, V v) { - checkInit(); - return delegate.put( k, v ); - } - - @Override - public V remove(Object o) { - checkInit(); - return delegate.remove( o ); - } - - @Override - public void putAll(Map map) { - checkInit(); - delegate.putAll( map ); - } - - @Override - public void clear() { - checkInit(); - delegate.clear(); - } - - @Override - public Set keySet() { - checkInit(); - return delegate.keySet(); - } - - @Override - public Collection values() { - checkInit(); - return delegate.values(); - } - - @Override - public Set> entrySet() { - checkInit(); - return delegate.entrySet(); - } - - @Override - public String toString() { - checkInit(); - return delegate.toString(); - } - - @Override - @SuppressWarnings({ "EqualsWhichDoesntCheckParameterClass" }) - public boolean equals(Object obj) { - checkInit(); - return delegate.equals( obj ); - } - - @Override - public int hashCode() { - checkInit(); - return delegate.hashCode(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SetProxy.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SetProxy.java deleted file mode 100644 index 6580f168353e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SetProxy.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy; - -import java.util.Set; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SetProxy extends CollectionProxy> implements Set { - private static final long serialVersionUID = 131464133074137701L; - - public SetProxy() { - } - - public SetProxy(org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor> initializor) { - super( initializor ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SortedMapProxy.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SortedMapProxy.java deleted file mode 100644 index 022fda14adc1..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SortedMapProxy.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy; - -import java.io.Serializable; -import java.util.Collection; -import java.util.Comparator; -import java.util.Map; -import java.util.Set; -import java.util.SortedMap; -import org.hibernate.collection.spi.LazyInitializable; -import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SortedMapProxy implements SortedMap, LazyInitializable, Serializable { - - private static final long serialVersionUID = 2645817952901452375L; - - private transient Initializor> initializor; - protected SortedMap delegate; - - public SortedMapProxy() { - } - - public SortedMapProxy(Initializor> initializor) { - this.initializor = initializor; - } - - private void checkInit() { - if ( delegate == null ) { - delegate = initializor.initialize(); - } - } - - @Override - public final boolean wasInitialized() { - return delegate != null; - } - - @Override - public final void forceInitialization() { - checkInit(); - } - - @Override - public int size() { - checkInit(); - return delegate.size(); - } - - @Override - public boolean isEmpty() { - checkInit(); - return delegate.isEmpty(); - } - - @Override - public boolean containsKey(Object o) { - checkInit(); - return delegate.containsKey( o ); - } - - @Override - public boolean containsValue(Object o) { - checkInit(); - return delegate.containsValue( o ); - } - - @Override - public V get(Object o) { - checkInit(); - return delegate.get( o ); - } - - @Override - public V put(K k, V v) { - checkInit(); - return delegate.put( k, v ); - } - - @Override - public V remove(Object o) { - checkInit(); - return delegate.remove( o ); - } - - @Override - public void putAll(Map map) { - checkInit(); - delegate.putAll( map ); - } - - @Override - public void clear() { - checkInit(); - delegate.clear(); - } - - @Override - public Set keySet() { - checkInit(); - return delegate.keySet(); - } - - @Override - public Collection values() { - checkInit(); - return delegate.values(); - } - - @Override - public Set> entrySet() { - checkInit(); - return delegate.entrySet(); - } - - @Override - public Comparator comparator() { - checkInit(); - return delegate.comparator(); - } - - @Override - public SortedMap subMap(K k, K k1) { - checkInit(); - return delegate.subMap( k, k1 ); - } - - @Override - public SortedMap headMap(K k) { - checkInit(); - return delegate.headMap( k ); - } - - @Override - public SortedMap tailMap(K k) { - checkInit(); - return delegate.tailMap( k ); - } - - @Override - public K firstKey() { - checkInit(); - return delegate.firstKey(); - } - - @Override - public K lastKey() { - checkInit(); - return delegate.lastKey(); - } - - @Override - @SuppressWarnings({ "EqualsWhichDoesntCheckParameterClass" }) - public boolean equals(Object o) { - checkInit(); - return delegate.equals( o ); - } - - @Override - public int hashCode() { - checkInit(); - return delegate.hashCode(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SortedSetProxy.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SortedSetProxy.java deleted file mode 100644 index 165c0b7897f5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/lazy/proxy/SortedSetProxy.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy; - -import java.util.Comparator; -import java.util.SortedSet; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SortedSetProxy extends CollectionProxy> implements SortedSet { - private static final long serialVersionUID = 2092884107178125905L; - - public SortedSetProxy() { - } - - public SortedSetProxy(org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor> initializor) { - super( initializor ); - } - - @Override - public Comparator comparator() { - checkInit(); - return delegate.comparator(); - } - - @Override - public SortedSet subSet(U u, U u1) { - checkInit(); - return delegate.subSet( u, u1 ); - } - - @Override - public SortedSet headSet(U u) { - checkInit(); - return delegate.headSet( u ); - } - - @Override - public SortedSet tailSet(U u) { - checkInit(); - return delegate.tailSet( u ); - } - - @Override - public U first() { - checkInit(); - return delegate.first(); - } - - @Override - public U last() { - checkInit(); - return delegate.last(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/AbstractRelationQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/AbstractRelationQueryGenerator.java deleted file mode 100644 index 6a3d4964d2ec..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/AbstractRelationQueryGenerator.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import java.util.Collections; -import java.util.Map; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.RevisionTypeType; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.id.QueryParameterData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.query.Query; -import org.hibernate.type.BasicType; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Base class for implementers of {@code RelationQueryGenerator} contract. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class AbstractRelationQueryGenerator implements RelationQueryGenerator { - protected final Configuration configuration; - protected final AuditStrategy auditStrategy; - protected final MiddleIdData referencingIdData; - protected final boolean revisionTypeInId; - protected final String entityName; - protected final String orderByCollectionRole; - - private String queryString; - private String queryRemovedString; - - protected AbstractRelationQueryGenerator( - Configuration configuration, - String entityName, - MiddleIdData referencingIdData, - boolean revisionTypeInId, - String orderByCollectionRole) { - this.configuration = configuration; - this.entityName = entityName; - this.auditStrategy = configuration.getAuditStrategy(); - this.referencingIdData = referencingIdData; - this.revisionTypeInId = revisionTypeInId; - this.orderByCollectionRole = orderByCollectionRole; - } - - @Override - public Query getQuery(SharedSessionContractImplementor session, Object primaryKey, Number revision, boolean removed) { - final String queryString = getQueryString( session.getFactory(), removed ); - - final BasicType revisionType = session.getFactory() - .getTypeConfiguration() - .getBasicTypeRegistry() - .getRegisteredType( RevisionTypeType.class ); - - final Query query = session.createQuery( queryString ); - query.setParameter( DEL_REVISION_TYPE_PARAMETER, RevisionType.DEL, revisionType ); - query.setParameter( REVISION_PARAMETER, revision ); - - final IdMapper prefixIdMapper = referencingIdData.getPrefixedMapper(); - for ( QueryParameterData paramData : prefixIdMapper.mapToQueryParametersFromId( primaryKey ) ) { - paramData.setParameterValue( query ); - } - - return query; - } - - /** - * Build the common aspects of a {@link QueryBuilder} used by both query and query-remove strings. - * - * @param sessionFactory The session factory. - * @return The constructed query builder instance. - */ - protected abstract QueryBuilder buildQueryBuilderCommon(SessionFactoryImplementor sessionFactory); - - /** - * Apply predicates used to fetch actual data. - * - * @param qb The query builder instance to apply predicates against. - * @param parameters The root query parameters - * @param inclusive Whether its inclusive or not. - */ - protected abstract void applyValidPredicates(QueryBuilder qb, Parameters parameters, boolean inclusive); - - /** - * Apply predicates to fetch data and deletions that took place during the same revision. - * - * @param qb The query builder instance to apply predicates against. - */ - protected abstract void applyValidAndRemovePredicates(QueryBuilder qb); - - protected String getRevisionTypePath() { - if ( revisionTypeInId ) { - return configuration.getOriginalIdPropertyName() + "." + configuration.getRevisionTypePropertyName(); - } - return configuration.getRevisionTypePropertyName(); - } - - /** - * Get the query to be used. - * - * If {@code removed} is specified as {@code true}, the removal query will be returned. - * If {@code removed} is specified as {@code false}, the non-removal query will be returned. - * - * This method internally will cache the built queries so that subsequent calls will not - * require the rebuilding of the queries. - * - * @param sessionFactory The session factory. - * @param removed Whether to return the removal query or non-removal query. - * @return The query string to be used. - */ - private String getQueryString(SessionFactoryImplementor sessionFactory, boolean removed) { - if ( removed ) { - if ( queryRemovedString == null ) { - queryRemovedString = buildQueryRemoveString( sessionFactory ); - } - return queryRemovedString; - } - - if ( queryString == null ) { - queryString = buildQueryString( sessionFactory ); - } - return queryString; - } - - private String buildQueryString(SessionFactoryImplementor sessionFactory) { - final QueryBuilder builder = buildQueryBuilderCommon( sessionFactory ); - applyValidPredicates( builder, builder.getRootParameters(), true ); - return queryToString( builder ); - } - - private String buildQueryRemoveString(SessionFactoryImplementor sessionFactory) { - final QueryBuilder builder = buildQueryBuilderCommon( sessionFactory ); - applyValidAndRemovePredicates( builder ); - return queryToString( builder ); - } - - private String queryToString(QueryBuilder query) { - return queryToString( query, Collections.emptyMap() ); - } - - private String queryToString(QueryBuilder query, Map queryParamValues) { - final StringBuilder sb = new StringBuilder(); - query.build( sb, queryParamValues ); - return sb.toString(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/OneAuditEntityQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/OneAuditEntityQueryGenerator.java deleted file mode 100644 index 0fd4b41b7ecd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/OneAuditEntityQueryGenerator.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.id.AbstractCompositeIdMapper; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.internal.util.StringHelper; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS_DEF_AUD_STR; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Selects data from an audit entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public final class OneAuditEntityQueryGenerator extends AbstractRelationQueryGenerator { - private final String mappedBy; - private final boolean multipleIdMapperKey; - private final MiddleIdData referencedIdData; - - public OneAuditEntityQueryGenerator( - Configuration configuration, - MiddleIdData referencingIdData, - String referencedEntityName, - MiddleIdData referencedIdData, - boolean revisionTypeInId, - String mappedBy, - boolean mappedByKey, - String orderByCollectionRole) { - super( - configuration, - configuration.getAuditEntityName( referencedEntityName ), - referencingIdData, - revisionTypeInId, - orderByCollectionRole - ); - - this.mappedBy = mappedBy; - this.referencedIdData = referencedIdData; - - // HHH-11770 We use AbstractCompositeIdMapper here to handle EmbeddedIdMapper and MultipleIdMappper support - // so that OneAuditEntityQueryGenerator supports mappings to both @IdClass and @EmbeddedId components. - multipleIdMapperKey = (referencedIdData.getOriginalMapper() instanceof AbstractCompositeIdMapper) && mappedByKey; - - /* - * The valid query that we need to create: - * SELECT e FROM versionsReferencedEntity e - * WHERE - * (only entities referenced by the association; id_ref_ing = id of the referencing entity) - * e.id_ref_ing = :id_ref_ing AND - * (selecting e entities at revision :revision) - * --> for DefaultAuditStrategy: - * e.revision = (SELECT max(e2.revision) FROM versionsReferencedEntity e2 - * WHERE e2.revision <= :revision AND e2.id = e.id) - * - * --> for ValidityAuditStrategy: - * e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null) - * - * AND - * (only non-deleted entities) - * e.revision_type != DEL - */ - } - - @Override - protected QueryBuilder buildQueryBuilderCommon(SessionFactoryImplementor sessionFactory) { - // SELECT e FROM versionsEntity e - final QueryBuilder qb = new QueryBuilder( entityName, REFERENCED_ENTITY_ALIAS, sessionFactory ); - qb.addProjection( null, REFERENCED_ENTITY_ALIAS, null, false ); - // WHERE - if ( multipleIdMapperKey ) { - // HHH-7625 - // support @OneToMany(mappedBy) to @ManyToOne @IdClass attribute. - // e.originalId.id_ref_ed.id = :id_ref_ed - final IdMapper mapper = getMultipleIdPrefixedMapper(); - mapper.addNamedIdEqualsToQuery( qb.getRootParameters(), null, referencingIdData.getPrefixedMapper(), true ); - } - else { - // e.id_ref_ed = :id_ref_ed - referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( qb.getRootParameters(), null, true ); - } - - // ORDER BY - if ( !StringHelper.isEmpty( orderByCollectionRole ) ) { - qb.addOrderFragment( REFERENCED_ENTITY_ALIAS, orderByCollectionRole ); - } - - return qb; - } - - @Override - protected void applyValidPredicates(QueryBuilder qb, Parameters rootParameters, boolean inclusive) { - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - // (selecting e entities at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addEntityAtRevisionRestriction( - configuration, - qb, - rootParameters, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencedIdData, - revisionPropertyPath, - configuration.getOriginalIdPropertyName(), - REFERENCED_ENTITY_ALIAS, - REFERENCED_ENTITY_ALIAS_DEF_AUD_STR, - true - ); - // e.revision_type != DEL - rootParameters.addWhereWithNamedParam( getRevisionTypePath(), true, "!=", DEL_REVISION_TYPE_PARAMETER ); - } - - @Override - protected void applyValidAndRemovePredicates(QueryBuilder remQb) { - final Parameters disjoint = remQb.getRootParameters().addSubParameters( "or" ); - // Restrictions to match all valid rows. - final Parameters valid = disjoint.addSubParameters( "and" ); - // Restrictions to match all rows deleted at exactly given revision. - final Parameters removed = disjoint.addSubParameters( "and" ); - // Excluding current revision, because we need to match data valid at the previous one. - applyValidPredicates( remQb, valid, false ); - // e.revision = :revision - removed.addWhereWithNamedParam( configuration.getRevisionNumberPath(), false, "=", REVISION_PARAMETER ); - // e.revision_type = DEL - removed.addWhereWithNamedParam( getRevisionTypePath(), false, "=", DEL_REVISION_TYPE_PARAMETER ); - } - - private IdMapper getMultipleIdPrefixedMapper() { - final String prefix = configuration.getOriginalIdPropertyName() + "." + mappedBy + "."; - return referencingIdData.getOriginalMapper().prefixMappedProperties( prefix ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/OneEntityQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/OneEntityQueryGenerator.java deleted file mode 100644 index 4e3446e5230c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/OneEntityQueryGenerator.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.MIDDLE_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Selects data from a relation middle-table only. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public final class OneEntityQueryGenerator extends AbstractRelationQueryGenerator { - private final MiddleComponentData[] componentDatas; - - public OneEntityQueryGenerator( - Configuration configuration, - String versionsMiddleEntityName, - MiddleIdData referencingIdData, - boolean revisionTypeInId, - MiddleComponentData... componentData) { - super( - configuration, - versionsMiddleEntityName, - referencingIdData, - revisionTypeInId, - null - ); - - this.componentDatas = componentData; - - /* - * The valid query that we need to create: - * SELECT ee FROM middleEntity ee WHERE - * (only entities referenced by the association; id_ref_ing = id of the referencing entity) - * ee.originalId.id_ref_ing = :id_ref_ing AND - * - * (the association at revision :revision) - * --> for DefaultAuditStrategy: - * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2 - * WHERE ee2.revision <= :revision AND ee2.originalId.* = ee.originalId.*) - * - * --> for ValidityAuditStrategy: - * ee.revision <= :revision and (ee.endRevision > :revision or ee.endRevision is null) - * - * AND - * - * (only non-deleted entities and associations) - * ee.revision_type != DEL - */ - } - - @Override - protected QueryBuilder buildQueryBuilderCommon(SessionFactoryImplementor sessionFactory) { - // SELECT ee FROM middleEntity ee - final QueryBuilder qb = new QueryBuilder( entityName, MIDDLE_ENTITY_ALIAS, sessionFactory ); - qb.addProjection( null, MIDDLE_ENTITY_ALIAS, null, false ); - // WHERE - // ee.originalId.id_ref_ing = :id_ref_ing - referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( - qb.getRootParameters(), - configuration.getOriginalIdPropertyName(), - true - ); - - // NOTE: - // No `orderBy` fragment is specified because this generator is used for - // embeddables and enumerations where either a Set-based container will - // force the SETORDINAL property to give us a unique primary key tuple - // or an @IndexColumn/@OrderColumn must be specified that takes priority - // over an @OrderBy fragment. - - return qb; - } - - @Override - protected void applyValidPredicates(QueryBuilder qb, Parameters rootParameters, boolean inclusive) { - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - // (with ee association at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addAssociationAtRevisionRestriction( - qb, - rootParameters, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencingIdData, - entityName, - eeOriginalIdPropertyPath, - revisionPropertyPath, - originalIdPropertyName, - MIDDLE_ENTITY_ALIAS, - inclusive, - componentDatas - ); - // ee.revision_type != DEL - rootParameters.addWhereWithNamedParam( getRevisionTypePath(), "!=", DEL_REVISION_TYPE_PARAMETER ); - } - - @Override - protected void applyValidAndRemovePredicates(QueryBuilder remQb) { - final Parameters disjoint = remQb.getRootParameters().addSubParameters( "or" ); - // Restrictions to match all valid rows. - final Parameters valid = disjoint.addSubParameters( "and" ); - // Restrictions to match all rows deleted at exactly given revision. - final Parameters removed = disjoint.addSubParameters( "and" ); - // Excluding current revision, because we need to match data valid at the previous one. - applyValidPredicates( remQb, valid, false ); - // ee.revision = :revision - removed.addWhereWithNamedParam( configuration.getRevisionNumberPath(), "=", REVISION_PARAMETER ); - // ee.revision_type = DEL - removed.addWhereWithNamedParam( getRevisionTypePath(), "=", DEL_REVISION_TYPE_PARAMETER ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/QueryConstants.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/QueryConstants.java deleted file mode 100644 index c3a7fb710c73..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/QueryConstants.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -/** - * Constants used in JPQL queries. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public final class QueryConstants { - private QueryConstants() { - } - - public static final String REFERENCED_ENTITY_ALIAS = "e__"; - public static final String REFERENCED_ENTITY_ALIAS_DEF_AUD_STR = "e2__"; - - public static final String INDEX_ENTITY_ALIAS = "f__"; - public static final String INDEX_ENTITY_ALIAS_DEF_AUD_STR = "f2__"; - - public static final String MIDDLE_ENTITY_ALIAS = "ee__"; - public static final String MIDDLE_ENTITY_ALIAS_DEF_AUD_STR = "ee2__"; - - public static final String REVISION_PARAMETER = "revision"; - public static final String DEL_REVISION_TYPE_PARAMETER = "delrevisiontype"; -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/RelationQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/RelationQueryGenerator.java deleted file mode 100644 index 80f9cbb144c0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/RelationQueryGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.query.Query; - -/** - * Implementations of this interface provide a method to generate queries on a - * relation table (a table used for mapping relations). The query can select, - * apart from selecting the content of the relation table, also data of other - * "related" entities. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface RelationQueryGenerator { - /** - * Return the query to fetch the relation. - * - * @param session The session. - * @param primaryKey The primary key of the owning object. - * @param revision The revision to be fetched. - * @param removed Whether to return a query that includes the removed audit rows. - */ - Query getQuery(SharedSessionContractImplementor session, Object primaryKey, Number revision, boolean removed); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/ThreeEntityQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/ThreeEntityQueryGenerator.java deleted file mode 100644 index a8f36a8d5e78..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/ThreeEntityQueryGenerator.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.internal.util.StringHelper; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.INDEX_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.INDEX_ENTITY_ALIAS_DEF_AUD_STR; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.MIDDLE_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS_DEF_AUD_STR; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Selects data from a relation middle-table and a two related versions entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public final class ThreeEntityQueryGenerator extends AbstractRelationQueryGenerator { - private final MiddleIdData referencedIdData; - private final MiddleIdData indexIdData; - private final MiddleComponentData[] componentDatas; - - public ThreeEntityQueryGenerator( - Configuration configuration, - String versionsMiddleEntityName, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - MiddleIdData indexIdData, - boolean revisionTypeInId, - String orderByCollectionRole, - MiddleComponentData... componentData) { - super( - configuration, - versionsMiddleEntityName, - referencingIdData, - revisionTypeInId, - orderByCollectionRole - ); - - this.referencedIdData = referencedIdData; - this.indexIdData = indexIdData; - this.componentDatas = componentData; - - /* - * The valid query that we need to create: - * SELECT new list(ee, e, f) FROM versionsReferencedEntity e, versionsIndexEntity f, middleEntity ee - * WHERE - * (entities referenced by the middle table; id_ref_ed = id of the referenced entity) - * ee.id_ref_ed = e.id_ref_ed AND - * (entities referenced by the middle table; id_ref_ind = id of the index entity) - * ee.id_ref_ind = f.id_ref_ind AND - * (only entities referenced by the association; id_ref_ing = id of the referencing entity) - * ee.id_ref_ing = :id_ref_ing AND - * (selecting e entities at revision :revision) - * --> for DefaultAuditStrategy: - * e.revision = (SELECT max(e2.revision) FROM versionsReferencedEntity e2 - * WHERE e2.revision <= :revision AND e2.id = e.id) - * - * --> for ValidityAuditStrategy: - * e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null) - * - * AND - * - * (selecting f entities at revision :revision) - * --> for DefaultAuditStrategy: - * f.revision = (SELECT max(f2.revision) FROM versionsIndexEntity f2 - * WHERE f2.revision <= :revision AND f2.id_ref_ed = f.id_ref_ed) - * - * --> for ValidityAuditStrategy: - * f.revision <= :revision and (f.endRevision > :revision or f.endRevision is null) - * - * AND - * - * (the association at revision :revision) - * --> for DefaultAuditStrategy: - * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2 - * WHERE ee2.revision <= :revision AND ee2.originalId.* = ee.originalId.*) - * - * --> for ValidityAuditStrategy: - * ee.revision <= :revision and (ee.endRevision > :revision or ee.endRevision is null) - * and ( strtestent1_.REVEND>? or strtestent1_.REVEND is null ) - * and ( strtestent1_.REVEND>? or strtestent1_.REVEND is null ) - * and ( ternarymap0_.REVEND>? or ternarymap0_.REVEND is null ) - * - * (only non-deleted entities and associations) - * ee.revision_type != DEL AND - * e.revision_type != DEL AND - * f.revision_type != DEL - */ - } - - @Override - protected QueryBuilder buildQueryBuilderCommon(SessionFactoryImplementor sessionFactory) { - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - // SELECT new list(ee) FROM middleEntity ee - final QueryBuilder qb = new QueryBuilder( entityName, MIDDLE_ENTITY_ALIAS, sessionFactory ); - qb.addFrom( referencedIdData.getAuditEntityName(), REFERENCED_ENTITY_ALIAS, false ); - qb.addFrom( indexIdData.getAuditEntityName(), INDEX_ENTITY_ALIAS, false ); - qb.addProjection( - "new list", MIDDLE_ENTITY_ALIAS + ", " + REFERENCED_ENTITY_ALIAS + ", " + INDEX_ENTITY_ALIAS, - null, false - ); - // WHERE - final Parameters rootParameters = qb.getRootParameters(); - // ee.id_ref_ed = e.id_ref_ed - referencedIdData.getPrefixedMapper().addIdsEqualToQuery( - rootParameters, eeOriginalIdPropertyPath, referencedIdData.getOriginalMapper(), - REFERENCED_ENTITY_ALIAS + "." + originalIdPropertyName - ); - // ee.id_ref_ind = f.id_ref_ind - indexIdData.getPrefixedMapper().addIdsEqualToQuery( - rootParameters, eeOriginalIdPropertyPath, indexIdData.getOriginalMapper(), - INDEX_ENTITY_ALIAS + "." + originalIdPropertyName - ); - // ee.originalId.id_ref_ing = :id_ref_ing - referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( rootParameters, originalIdPropertyName, true ); - - // ORDER BY - // Hibernate applies @OrderBy on map elements, not the key. - // So here we apply it to the referenced entity, not the actual index entity that represents the key. - if ( !StringHelper.isEmpty( orderByCollectionRole ) ) { - qb.addOrderFragment( REFERENCED_ENTITY_ALIAS, orderByCollectionRole ); - } - return qb; - } - - @Override - protected void applyValidPredicates(QueryBuilder qb, Parameters rootParameters, boolean inclusive) { - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - final String revisionTypePropName = getRevisionTypePath(); - // (selecting e entities at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addEntityAtRevisionRestriction( - configuration, - qb, - rootParameters, - REFERENCED_ENTITY_ALIAS + "." + revisionPropertyPath, - REFERENCED_ENTITY_ALIAS + "." + configuration.getRevisionEndFieldName(), - false, - referencedIdData, - revisionPropertyPath, - originalIdPropertyName, - REFERENCED_ENTITY_ALIAS, - REFERENCED_ENTITY_ALIAS_DEF_AUD_STR, - true - ); - // (selecting f entities at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addEntityAtRevisionRestriction( - configuration, - qb, - rootParameters, - INDEX_ENTITY_ALIAS + "." + revisionPropertyPath, - INDEX_ENTITY_ALIAS + "." + configuration.getRevisionEndFieldName(), - false, - indexIdData, - revisionPropertyPath, - originalIdPropertyName, - INDEX_ENTITY_ALIAS, - INDEX_ENTITY_ALIAS_DEF_AUD_STR, - true - ); - // (with ee association at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addAssociationAtRevisionRestriction( - qb, - rootParameters, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencingIdData, - entityName, - eeOriginalIdPropertyPath, - revisionPropertyPath, - originalIdPropertyName, - MIDDLE_ENTITY_ALIAS, - inclusive, - componentDatas - ); - // ee.revision_type != DEL - rootParameters.addWhereWithNamedParam( revisionTypePropName, "!=", DEL_REVISION_TYPE_PARAMETER ); - // e.revision_type != DEL - rootParameters.addWhereWithNamedParam( - REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName, - false, - "!=", - DEL_REVISION_TYPE_PARAMETER - ); - // f.revision_type != DEL - rootParameters.addWhereWithNamedParam( - INDEX_ENTITY_ALIAS + "." + revisionTypePropName, - false, - "!=", - DEL_REVISION_TYPE_PARAMETER - ); - } - - @Override - protected void applyValidAndRemovePredicates(QueryBuilder remQb) { - final Parameters disjoint = remQb.getRootParameters().addSubParameters( "or" ); - // Restrictions to match all valid rows. - final Parameters valid = disjoint.addSubParameters( "and" ); - // Restrictions to match all rows deleted at exactly given revision. - final Parameters removed = disjoint.addSubParameters( "and" ); - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - final String revisionTypePropName = getRevisionTypePath(); - // Excluding current revision, because we need to match data valid at the previous one. - applyValidPredicates( remQb, valid, false ); - // ee.revision = :revision - removed.addWhereWithNamedParam( revisionPropertyPath, "=", REVISION_PARAMETER ); - // e.revision = :revision - removed.addWhereWithNamedParam( - REFERENCED_ENTITY_ALIAS + "." + revisionPropertyPath, - false, - "=", - REVISION_PARAMETER - ); - // f.revision = :revision - removed.addWhereWithNamedParam( - INDEX_ENTITY_ALIAS + "." + revisionPropertyPath, - false, - "=", - REVISION_PARAMETER - ); - // ee.revision_type = DEL - removed.addWhereWithNamedParam( revisionTypePropName, "=", DEL_REVISION_TYPE_PARAMETER ); - // e.revision_type = DEL - removed.addWhereWithNamedParam( - REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName, - false, - "=", - DEL_REVISION_TYPE_PARAMETER - ); - // f.revision_type = DEL - removed.addWhereWithNamedParam( - INDEX_ENTITY_ALIAS + "." + revisionTypePropName, - false, - "=", - DEL_REVISION_TYPE_PARAMETER - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/TwoEntityOneAuditedQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/TwoEntityOneAuditedQueryGenerator.java deleted file mode 100644 index d54527a0a17c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/TwoEntityOneAuditedQueryGenerator.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.internal.util.StringHelper; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.MIDDLE_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Selects data from a relation middle-table and a related non-audited entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public final class TwoEntityOneAuditedQueryGenerator extends AbstractRelationQueryGenerator { - private final MiddleIdData referencedIdData; - private final MiddleComponentData[] componentDatas; - - public TwoEntityOneAuditedQueryGenerator( - Configuration configuration, - String versionsMiddleEntityName, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - boolean revisionTypeInId, - String orderorderByCollectionRoley, - MiddleComponentData... componentData) { - super( - configuration, - versionsMiddleEntityName, - referencingIdData, - revisionTypeInId, - orderorderByCollectionRoley - ); - - this.referencedIdData = referencedIdData; - this.componentDatas = componentData; - - /* - * The valid query that we need to create: - * SELECT new list(ee, e) FROM referencedEntity e, middleEntity ee - * WHERE - * (entities referenced by the middle table; id_ref_ed = id of the referenced entity) - * ee.id_ref_ed = e.id_ref_ed AND - * (only entities referenced by the association; id_ref_ing = id of the referencing entity) - * ee.id_ref_ing = :id_ref_ing AND - * - * (the association at revision :revision) - * --> for DefaultAuditStrategy: - * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2 - * WHERE ee2.revision <= :revision AND ee2.originalId.* = ee.originalId.*) - * - * --> for ValidityAuditStrategy: - * ee.revision <= :revision and (ee.endRevision > :revision or ee.endRevision is null) - * - * AND - * - * (only non-deleted entities and associations) - * ee.revision_type != DEL - */ - } - - @Override - protected QueryBuilder buildQueryBuilderCommon(SessionFactoryImplementor sessionFactory) { - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - // SELECT new list(ee) FROM middleEntity ee - final QueryBuilder qb = new QueryBuilder( entityName, MIDDLE_ENTITY_ALIAS, sessionFactory ); - qb.addFrom( referencedIdData.getEntityName(), REFERENCED_ENTITY_ALIAS, false ); - qb.addProjection( "new list", MIDDLE_ENTITY_ALIAS + ", " + REFERENCED_ENTITY_ALIAS, null, false ); - // WHERE - final Parameters rootParameters = qb.getRootParameters(); - // ee.id_ref_ed = e.id_ref_ed - referencedIdData.getPrefixedMapper().addIdsEqualToQuery( - rootParameters, eeOriginalIdPropertyPath, referencedIdData.getOriginalMapper(), REFERENCED_ENTITY_ALIAS - ); - // ee.originalId.id_ref_ing = :id_ref_ing - referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( rootParameters, originalIdPropertyName, true ); - // ORDER BY - if ( !StringHelper.isEmpty( orderByCollectionRole ) ) { - qb.addOrderFragment( REFERENCED_ENTITY_ALIAS, orderByCollectionRole ); - } - return qb; - } - - /** - * Creates query restrictions used to retrieve only actual data. - */ - @Override - protected void applyValidPredicates(QueryBuilder qb, Parameters rootParameters, boolean inclusive) { - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - // (with ee association at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addAssociationAtRevisionRestriction( - qb, - rootParameters, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencingIdData, - entityName, - eeOriginalIdPropertyPath, - revisionPropertyPath, - originalIdPropertyName, - MIDDLE_ENTITY_ALIAS, - true, - componentDatas - ); - // ee.revision_type != DEL - rootParameters.addWhereWithNamedParam( getRevisionTypePath(), "!=", DEL_REVISION_TYPE_PARAMETER ); - } - - @Override - protected void applyValidAndRemovePredicates(QueryBuilder remQb) { - final Parameters disjoint = remQb.getRootParameters().addSubParameters( "or" ); - // Restrictions to match all valid rows. - final Parameters valid = disjoint.addSubParameters( "and" ); - // Restrictions to match all rows deleted at exactly given revision. - final Parameters removed = disjoint.addSubParameters( "and" ); - applyValidPredicates( remQb, valid, false ); - // ee.revision = :revision - removed.addWhereWithNamedParam( configuration.getRevisionNumberPath(), "=", REVISION_PARAMETER ); - // ee.revision_type = DEL - removed.addWhereWithNamedParam( getRevisionTypePath(), "=", DEL_REVISION_TYPE_PARAMETER ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/TwoEntityQueryGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/TwoEntityQueryGenerator.java deleted file mode 100644 index 7196abae85ba..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/entities/mapper/relation/query/TwoEntityQueryGenerator.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.entities.mapper.relation.query; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.internal.util.StringHelper; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.DEL_REVISION_TYPE_PARAMETER; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.MIDDLE_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS_DEF_AUD_STR; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Selects data from a relation middle-table and a related versions entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public final class TwoEntityQueryGenerator extends AbstractRelationQueryGenerator { - private final MiddleIdData referencedIdData; - private final MiddleComponentData[] componentDatas; - - public TwoEntityQueryGenerator( - Configuration configuration, - String versionsMiddleEntityName, - MiddleIdData referencingIdData, - MiddleIdData referencedIdData, - boolean revisionTypeInId, - String orderByCollectionRole, - MiddleComponentData... componentData) { - super( - configuration, - versionsMiddleEntityName, - referencingIdData, - revisionTypeInId, - orderByCollectionRole - ); - - this.referencedIdData = referencedIdData; - this.componentDatas = componentData; - - /* - * The valid query that we need to create: - * SELECT new list(ee, e) FROM versionsReferencedEntity e, middleEntity ee - * WHERE - * (entities referenced by the middle table; id_ref_ed = id of the referenced entity) - * ee.id_ref_ed = e.id_ref_ed AND - * (only entities referenced by the association; id_ref_ing = id of the referencing entity) - * ee.id_ref_ing = :id_ref_ing AND - * - * (selecting e entities at revision :revision) - * --> for DefaultAuditStrategy: - * e.revision = (SELECT max(e2.revision) FROM versionsReferencedEntity e2 - * WHERE e2.revision <= :revision AND e2.id = e.id) - * - * --> for ValidityAuditStrategy: - * e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null) - * - * AND - * - * (the association at revision :revision) - * --> for DefaultAuditStrategy: - * ee.revision = (SELECT max(ee2.revision) FROM middleEntity ee2 - * WHERE ee2.revision <= :revision AND ee2.originalId.* = ee.originalId.*) - * - * --> for ValidityAuditStrategy: - * ee.revision <= :revision and (ee.endRevision > :revision or ee.endRevision is null) - * - * (only non-deleted entities and associations) - * ee.revision_type != DEL AND - * e.revision_type != DEL - */ - } - - @Override - protected QueryBuilder buildQueryBuilderCommon(SessionFactoryImplementor sessionFactory) { - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - // SELECT new list(ee) FROM middleEntity ee - QueryBuilder qb = new QueryBuilder( entityName, MIDDLE_ENTITY_ALIAS, sessionFactory ); - qb.addFrom( referencedIdData.getAuditEntityName(), REFERENCED_ENTITY_ALIAS, false ); - qb.addProjection( "new list", MIDDLE_ENTITY_ALIAS + ", " + REFERENCED_ENTITY_ALIAS, null, false ); - // WHERE - final Parameters rootParameters = qb.getRootParameters(); - // ee.id_ref_ed = e.id_ref_ed - referencedIdData.getPrefixedMapper().addIdsEqualToQuery( - rootParameters, eeOriginalIdPropertyPath, referencedIdData.getOriginalMapper(), - REFERENCED_ENTITY_ALIAS + "." + originalIdPropertyName - ); - // ee.originalId.id_ref_ing = :id_ref_ing - referencingIdData.getPrefixedMapper().addNamedIdEqualsToQuery( rootParameters, originalIdPropertyName, true ); - - // ORDER BY - if ( !StringHelper.isEmpty( orderByCollectionRole ) ) { - qb.addOrderFragment( REFERENCED_ENTITY_ALIAS, orderByCollectionRole ); - } - - return qb; - } - - @Override - protected void applyValidPredicates(QueryBuilder qb, Parameters rootParameters, boolean inclusive) { - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String eeOriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS + "." + originalIdPropertyName; - final String revisionTypePropName = getRevisionTypePath(); - // (selecting e entities at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addEntityAtRevisionRestriction( - configuration, - qb, - rootParameters, - REFERENCED_ENTITY_ALIAS + "." + revisionPropertyPath, - REFERENCED_ENTITY_ALIAS + "." + configuration.getRevisionEndFieldName(), - false, - referencedIdData, - revisionPropertyPath, - originalIdPropertyName, - REFERENCED_ENTITY_ALIAS, - REFERENCED_ENTITY_ALIAS_DEF_AUD_STR, - true - ); - // (with ee association at revision :revision) - // --> based on auditStrategy (see above) - auditStrategy.addAssociationAtRevisionRestriction( - qb, - rootParameters, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencingIdData, - entityName, - eeOriginalIdPropertyPath, - revisionPropertyPath, - originalIdPropertyName, - MIDDLE_ENTITY_ALIAS, - inclusive, - componentDatas - ); - // ee.revision_type != DEL - rootParameters.addWhereWithNamedParam( revisionTypePropName, "!=", DEL_REVISION_TYPE_PARAMETER ); - // e.revision_type != DEL - rootParameters.addWhereWithNamedParam( - REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName, - false, - "!=", - DEL_REVISION_TYPE_PARAMETER - ); - } - - @Override - protected void applyValidAndRemovePredicates(QueryBuilder remQb) { - final Parameters disjoint = remQb.getRootParameters().addSubParameters( "or" ); - // Restrictions to match all valid rows. - final Parameters valid = disjoint.addSubParameters( "and" ); - // Restrictions to match all rows deleted at exactly given revision. - final Parameters removed = disjoint.addSubParameters( "and" ); - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - final String revisionTypePropName = getRevisionTypePath(); - // Excluding current revision, because we need to match data valid at the previous one. - applyValidPredicates( - remQb, - valid, - false - ); - // ee.revision = :revision - removed.addWhereWithNamedParam( revisionPropertyPath, "=", REVISION_PARAMETER ); - // e.revision = :revision - removed.addWhereWithNamedParam( - REFERENCED_ENTITY_ALIAS + "." + revisionPropertyPath, - false, - "=", - REVISION_PARAMETER - ); - // ee.revision_type = DEL - removed.addWhereWithNamedParam( revisionTypePropName, "=", DEL_REVISION_TYPE_PARAMETER ); - // e.revision_type = DEL - removed.addWhereWithNamedParam( - REFERENCED_ENTITY_ALIAS + "." + revisionTypePropName, - false, - "=", - DEL_REVISION_TYPE_PARAMETER - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/AuditReaderImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/AuditReaderImpl.java deleted file mode 100644 index 7feae79be4f3..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/AuditReaderImpl.java +++ /dev/null @@ -1,386 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.reader; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import jakarta.persistence.NoResultException; - -import org.hibernate.HibernateException; -import org.hibernate.NonUniqueResultException; -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.CrossTypeRevisionChangesReader; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.AuditQueryCreator; -import org.hibernate.event.spi.EventSource; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.query.Query; - -import static org.hibernate.envers.internal.tools.ArgumentsTools.checkNotNull; -import static org.hibernate.envers.internal.tools.ArgumentsTools.checkPositive; -import static org.hibernate.envers.internal.tools.EntityTools.getTargetClassIfProxied; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class AuditReaderImpl implements AuditReaderImplementor { - private final EnversService enversService; - private final SessionImplementor sessionImplementor; - private final Session session; - private final FirstLevelCache firstLevelCache; - private final CrossTypeRevisionChangesReader crossTypeRevisionChangesReader; - - public AuditReaderImpl( - EnversService enversService, - Session session, - SessionImplementor sessionImplementor) { - this.enversService = enversService; - this.sessionImplementor = sessionImplementor; - this.session = session; - - firstLevelCache = new FirstLevelCache(); - crossTypeRevisionChangesReader = new CrossTypeRevisionChangesReaderImpl( this, enversService ); - } - - private void checkSession() { - if ( !session.isOpen() ) { - throw new IllegalStateException( "The associated entity manager is closed!" ); - } - } - - @Override - public SessionImplementor getSessionImplementor() { - return sessionImplementor; - } - - @Override - public Session getSession() { - return session; - } - - @Override - public FirstLevelCache getFirstLevelCache() { - return firstLevelCache; - } - - @Override - public T find(Class cls, Object primaryKey, Number revision) throws - IllegalArgumentException, NotAuditedException, IllegalStateException { - cls = getTargetClassIfProxied( cls ); - return this.find( cls, cls.getName(), primaryKey, revision ); - } - - @Override - public T find(Class cls, String entityName, Object primaryKey, Number revision) - throws IllegalArgumentException, NotAuditedException, IllegalStateException { - return this.find( cls, entityName, primaryKey, revision, false ); - } - - @Override - @SuppressWarnings("unchecked") - public T find( - Class cls, - String entityName, - Object primaryKey, - Number revision, - boolean includeDeletions) throws IllegalArgumentException, NotAuditedException, IllegalStateException { - cls = getTargetClassIfProxied( cls ); - checkNotNull( cls, "Entity class" ); - checkNotNull( entityName, "Entity name" ); - checkNotNull( primaryKey, "Primary key" ); - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - checkSession(); - - if ( firstLevelCache.contains( entityName, revision, primaryKey ) ) { - return (T) firstLevelCache.get( entityName, revision, primaryKey ); - } - - Object result; - try { - // The result is put into the cache by the entity instantiator called from the query - result = createQuery().forEntitiesAtRevision( cls, entityName, revision, includeDeletions ) - .add( AuditEntity.id().eq( primaryKey ) ).getSingleResult(); - } - catch (NoResultException e) { - result = null; - } - catch (NonUniqueResultException e) { - throw new AuditException( e ); - } - - return (T) result; - } - - @Override - public List getRevisions(Class cls, Object primaryKey) - throws IllegalArgumentException, NotAuditedException, IllegalStateException { - cls = getTargetClassIfProxied( cls ); - return this.getRevisions( cls, cls.getName(), primaryKey ); - } - - @Override - public T find(Class cls, Object primaryKey, Date date) - throws IllegalArgumentException, NotAuditedException, RevisionDoesNotExistException, IllegalStateException { - return find( cls, primaryKey, getRevisionNumberForDate( date ) ); - } - - @Override - public T find(Class cls, Object primaryKey, LocalDateTime datetime) - throws IllegalArgumentException, NotAuditedException, RevisionDoesNotExistException, IllegalStateException { - return find( cls, primaryKey, getRevisionNumberForDate( datetime ) ); - } - - @Override - @SuppressWarnings("unchecked") - public List getRevisions(Class cls, String entityName, Object primaryKey) - throws IllegalArgumentException, NotAuditedException, IllegalStateException { - // todo: if a class is not versioned from the beginning, there's a missing ADD rev - what then? - cls = getTargetClassIfProxied( cls ); - checkNotNull( cls, "Entity class" ); - checkNotNull( entityName, "Entity name" ); - checkNotNull( primaryKey, "Primary key" ); - checkSession(); - - return createQuery().forRevisionsOfEntity( cls, entityName, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .add( AuditEntity.id().eq( primaryKey ) ) - .getResultList(); - } - - @Override - public Date getRevisionDate(Number revision) - throws IllegalArgumentException, RevisionDoesNotExistException, IllegalStateException { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - checkSession(); - - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionDateQuery( session, revision ); - - try { - final Object timestampObject = query.uniqueResult(); - if ( timestampObject == null ) { - throw new RevisionDoesNotExistException( revision ); - } - - // The timestamp object is either a date, instant, or a long - if ( timestampObject instanceof Date ) { - return (Date) timestampObject; - } - else if ( timestampObject instanceof Instant ) { - return Date.from( (Instant) timestampObject ); - } - else { - return new Date( (Long) timestampObject ); - } - } - catch (NonUniqueResultException e) { - throw new AuditException( e ); - } - } - - @Override - public Number getRevisionNumberForDate(Date date) { - checkNotNull( date, "Date of revision" ); - checkSession(); - - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionNumberForDateQuery( session, date ); - - try { - final Number res = (Number) query.uniqueResult(); - if ( res == null ) { - throw new RevisionDoesNotExistException( date ); - } - - return res; - } - catch (NonUniqueResultException e) { - throw new AuditException( e ); - } - } - - @Override - public Number getRevisionNumberForDate(LocalDateTime date) { - checkNotNull( date, "Date of revision" ); - checkSession(); - - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionNumberForDateQuery( session, date ); - - try { - final Number res = (Number) query.uniqueResult(); - if ( res == null ) { - throw new RevisionDoesNotExistException( date ); - } - - return res; - } - catch (NonUniqueResultException e) { - throw new AuditException( e ); - } - } - - @Override - public Number getRevisionNumberForDate(Instant date) { - checkNotNull( date, "Date of revision" ); - checkSession(); - - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionNumberForDateQuery( session, date ); - - try { - final Number res = (Number) query.uniqueResult(); - if ( res == null ) { - throw new RevisionDoesNotExistException( date ); - } - - return res; - } - catch (NonUniqueResultException e) { - throw new AuditException( e ); - } - } - - @Override - @SuppressWarnings("unchecked") - public T findRevision(Class revisionEntityClass, Number revision) - throws IllegalArgumentException, RevisionDoesNotExistException, IllegalStateException { - revisionEntityClass = getTargetClassIfProxied( revisionEntityClass ); - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - checkSession(); - - final Set revisions = new HashSet<>( 1 ); - revisions.add( revision ); - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionsQuery( session, revisions ); - - try { - final T revisionData = (T) query.uniqueResult(); - - if ( revisionData == null ) { - throw new RevisionDoesNotExistException( revision ); - } - - return revisionData; - } - catch (NonUniqueResultException e) { - throw new AuditException( e ); - } - } - - @Override - @SuppressWarnings("unchecked") - public Map findRevisions(Class revisionEntityClass, Set revisions) - throws IllegalArgumentException, - IllegalStateException { - revisionEntityClass = getTargetClassIfProxied( revisionEntityClass ); - final Map result = new HashMap<>( revisions.size() ); - - for ( Number revision : revisions ) { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - } - checkSession(); - - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionsQuery( session, revisions ); - - try { - final List revisionList = query.getResultList(); - for ( Object revision : revisionList ) { - final Number revNo = enversService.getRevisionInfoNumberReader().getRevisionNumber( revision ); - result.put( revNo, (T) revision ); - } - - return result; - } - catch (HibernateException e) { - throw new AuditException( e ); - } - } - - @Override - public CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() throws AuditException { - if ( !enversService.getConfig().isTrackEntitiesChanged() ) { - throw new AuditException( - "This API is designed for Envers default mechanism of tracking entities modified in a given revision." - + " Extend DefaultTrackingModifiedEntitiesRevisionEntity, utilize @ModifiedEntityNames annotation or set " - + "'org.hibernate.envers.track_entities_changed_in_revision' parameter to true." - ); - } - return crossTypeRevisionChangesReader; - } - - @Override - @SuppressWarnings("unchecked") - public T getCurrentRevision(Class revisionEntityClass, boolean persist) { - revisionEntityClass = getTargetClassIfProxied( revisionEntityClass ); - if ( !(session instanceof EventSource) ) { - throw new IllegalArgumentException( "The provided session is not an EventSource!" ); - } - - // Obtaining the current audit sync - final AuditProcess auditProcess = enversService.getAuditProcessManager().get( (EventSource) session ); - - // And getting the current revision data - return (T) auditProcess.getCurrentRevisionData( session, persist ); - } - - @Override - public AuditQueryCreator createQuery() { - return new AuditQueryCreator( enversService, this ); - } - - @Override - public boolean isEntityClassAudited(Class entityClass) { - entityClass = getTargetClassIfProxied( entityClass ); - return this.isEntityNameAudited( entityClass.getName() ); - } - - - @Override - public boolean isEntityNameAudited(String entityName) { - checkNotNull( entityName, "Entity name" ); - checkSession(); - return enversService.getEntitiesConfigurations().isVersioned( entityName ); - } - - @Override - public String getEntityName(Object primaryKey, Number revision, Object entity) throws HibernateException { - checkNotNull( primaryKey, "Primary key" ); - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - checkNotNull( entity, "Entity" ); - checkSession(); - - // Unwrap if necessary - if ( entity instanceof HibernateProxy ) { - entity = ( (HibernateProxy) entity ).getHibernateLazyInitializer().getImplementation(); - } - if ( firstLevelCache.containsEntityName( primaryKey, revision, entity ) ) { - // it's on envers FLC! - return firstLevelCache.getFromEntityNameCache( primaryKey, revision, entity ); - } - else { - throw new HibernateException( - "Envers can't resolve entityName for historic entity. The id, revision and entity is not on envers first level cache." - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/AuditReaderImplementor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/AuditReaderImplementor.java deleted file mode 100644 index 5eafeffff108..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/AuditReaderImplementor.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.reader; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.AuditReader; - -/** - * An interface exposed by a VersionsReader to library-facing classes. - * - * @author Adam Warski (adam at warski dot org) - */ -public interface AuditReaderImplementor extends AuditReader { - SessionImplementor getSessionImplementor(); - - Session getSession(); - - FirstLevelCache getFirstLevelCache(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/CrossTypeRevisionChangesReaderImpl.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/CrossTypeRevisionChangesReaderImpl.java deleted file mode 100644 index 409a4e6023e6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/CrossTypeRevisionChangesReaderImpl.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.reader; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.CrossTypeRevisionChangesReader; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.tools.EntityTools; -import org.hibernate.envers.query.criteria.internal.RevisionTypeAuditExpression; -import org.hibernate.envers.tools.Pair; -import org.hibernate.query.Query; - -import static org.hibernate.envers.internal.tools.ArgumentsTools.checkNotNull; -import static org.hibernate.envers.internal.tools.ArgumentsTools.checkPositive; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class CrossTypeRevisionChangesReaderImpl implements CrossTypeRevisionChangesReader { - private final AuditReaderImplementor auditReaderImplementor; - private final EnversService enversService; - - public CrossTypeRevisionChangesReaderImpl( - AuditReaderImplementor auditReaderImplementor, - EnversService enversService) { - this.auditReaderImplementor = auditReaderImplementor; - this.enversService = enversService; - } - - @Override - @SuppressWarnings("unchecked") - public List findEntities(Number revision) throws IllegalStateException, IllegalArgumentException { - final Set> entityTypes = findEntityTypes( revision ); - final List result = new ArrayList<>(); - for ( Pair type : entityTypes ) { - result.addAll( - auditReaderImplementor.createQuery().forEntitiesModifiedAtRevision( - type.getSecond(), - type.getFirst(), - revision - ) - .getResultList() - ); - } - return result; - } - - @Override - @SuppressWarnings("unchecked") - public List findEntities(Number revision, RevisionType revisionType) - throws IllegalStateException, IllegalArgumentException { - final Set> entityTypes = findEntityTypes( revision ); - final List result = new ArrayList<>(); - for ( Pair type : entityTypes ) { - result.addAll( - auditReaderImplementor.createQuery().forEntitiesModifiedAtRevision( - type.getSecond(), - type.getFirst(), - revision - ) - .add( new RevisionTypeAuditExpression( null, revisionType, "=" ) ).getResultList() - ); - } - return result; - } - - @Override - @SuppressWarnings("unchecked") - public Map> findEntitiesGroupByRevisionType(Number revision) - throws IllegalStateException, IllegalArgumentException { - final Set> entityTypes = findEntityTypes( revision ); - final Map> result = new HashMap<>(); - for ( RevisionType revisionType : RevisionType.values() ) { - result.put( revisionType, new ArrayList<>() ); - for ( Pair type : entityTypes ) { - final List list = auditReaderImplementor.createQuery() - .forEntitiesModifiedAtRevision( type.getSecond(), type.getFirst(), revision ) - .add( new RevisionTypeAuditExpression( null, revisionType, "=" ) ) - .getResultList(); - result.get( revisionType ).addAll( list ); - } - } - return result; - } - - @Override - @SuppressWarnings("unchecked") - public Set> findEntityTypes(Number revision) - throws IllegalStateException, IllegalArgumentException { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - checkSession(); - - final Session session = auditReaderImplementor.getSession(); - final SessionImplementor sessionImplementor = auditReaderImplementor.getSessionImplementor(); - - final Set revisions = new HashSet<>( 1 ); - revisions.add( revision ); - final Query query = enversService.getRevisionInfoQueryCreator().getRevisionsQuery( session, revisions ); - final Object revisionInfo = query.uniqueResult(); - - if ( revisionInfo != null ) { - // If revision exists. - final Set entityNames = enversService.getModifiedEntityNamesReader().getModifiedEntityNames( revisionInfo ); - if ( entityNames != null ) { - // Generate result that contains entity names and corresponding Java classes. - final Set> result = new HashSet<>(); - for ( String entityName : entityNames ) { - result.add( - Pair.make( - entityName, EntityTools.getEntityClass( - sessionImplementor, - entityName - ) - ) - ); - } - return result; - } - } - - return Collections.EMPTY_SET; - } - - private void checkSession() { - if ( !auditReaderImplementor.getSession().isOpen() ) { - throw new IllegalStateException( "The associated entity manager is closed!" ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/FirstLevelCache.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/FirstLevelCache.java deleted file mode 100644 index 167c8b0932f8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/reader/FirstLevelCache.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.reader; - -import java.lang.invoke.MethodHandles; -import java.util.Map; - -import org.hibernate.envers.internal.EnversMessageLogger; -import org.hibernate.envers.internal.tools.Triple; - -import org.jboss.logging.Logger; - -import static org.hibernate.envers.internal.tools.Tools.newHashMap; -import static org.hibernate.envers.internal.tools.Triple.make; - -/** - * First level cache for versioned entities, versions reader-scoped. Each entity is uniquely identified by a - * revision number and entity id. - * - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - */ -public class FirstLevelCache { - private static final EnversMessageLogger LOG = Logger.getMessageLogger( - MethodHandles.lookup(), - EnversMessageLogger.class, - FirstLevelCache.class.getName() - ); - - /** - * cache for resolve an object for a given id, revision and entityName. - */ - private final Map, Object> cache; - - /** - * used to resolve the entityName for a given id, revision and entity. - */ - private final Map, String> entityNameCache; - - public FirstLevelCache() { - cache = newHashMap(); - entityNameCache = newHashMap(); - } - - public Object get(String entityName, Number revision, Object id) { - LOG.debugf( - "Resolving object from First Level Cache: EntityName:%s - primaryKey:%s - revision:%s", - entityName, - id, - revision - ); - return cache.get( make( entityName, revision, id ) ); - } - - public void put(String entityName, Number revision, Object id, Object entity) { - LOG.debugf( - "Caching entity on First Level Cache: - primaryKey:%s - revision:%s - entityName:%s", - id, - revision, - entityName - ); - cache.put( make( entityName, revision, id ), entity ); - } - - public boolean contains(String entityName, Number revision, Object id) { - return cache.containsKey( make( entityName, revision, id ) ); - } - - /** - * Adds the entityName into the cache. The key is a triple make with primaryKey, revision and entity - * - * @param id primaryKey - * @param revision revision number - * @param entity object retrieved by envers - * @param entityName value of the cache - */ - public void putOnEntityNameCache(Object id, Number revision, Object entity, String entityName) { - LOG.debugf( - "Caching entityName on First Level Cache: - primaryKey:%s - revision:%s - entity:%s -> entityName:%s", - id, - revision, - entity.getClass().getName(), - entityName - ); - entityNameCache.put( make( id, revision, entity ), entityName ); - } - - /** - * Gets the entityName from the cache. The key is a triple make with primaryKey, revision and entity - * - * @param id primaryKey - * @param revision revision number - * @param entity object retrieved by envers - * - * @return The appropriate entity name - */ - public String getFromEntityNameCache(Object id, Number revision, Object entity) { - LOG.debugf( - "Trying to resolve entityName from First Level Cache: - primaryKey:%s - revision:%s - entity:%s", - id, - revision, - entity - ); - return entityNameCache.get( make( id, revision, entity ) ); - } - - /** - * @param id primaryKey - * @param revision revision number - * @param entity object retrieved by envers - * - * @return true if entityNameCache contains the triple - */ - public boolean containsEntityName(Object id, Number revision, Object entity) { - return entityNameCache.containsKey( make( id, revision, entity ) ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/DefaultRevisionInfoGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/DefaultRevisionInfoGenerator.java deleted file mode 100644 index d1f5e4c3a068..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/DefaultRevisionInfoGenerator.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import java.lang.reflect.Constructor; - -import org.hibernate.Session; -import org.hibernate.envers.EntityTrackingRevisionListener; -import org.hibernate.envers.RevisionListener; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.synchronization.SessionCacheCleaner; -import org.hibernate.internal.util.ReflectHelper; -import org.hibernate.resource.beans.internal.FallbackBeanInstanceProducer; -import org.hibernate.resource.beans.internal.Helper; -import org.hibernate.resource.beans.spi.ManagedBean; -import org.hibernate.resource.beans.spi.ManagedBeanRegistry; -import org.hibernate.resource.beans.spi.ProvidedInstanceManagedBeanImpl; -import org.hibernate.service.ServiceRegistry; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class DefaultRevisionInfoGenerator implements RevisionInfoGenerator { - private final String revisionInfoEntityName; - private final ManagedBean listenerManagedBean; - private final Constructor revisionInfoClassConstructor; - private final SessionCacheCleaner sessionCacheCleaner; - private final RevisionTimestampValueResolver timestampValueResolver; - - private RevisionInfoNumberReader revisionInfoNumberReader; - - public DefaultRevisionInfoGenerator( - String revisionInfoEntityName, - Class revisionInfoClass, - Class listenerClass, - RevisionTimestampValueResolver timestampValueResolver, - ServiceRegistry serviceRegistry) { - this.revisionInfoEntityName = revisionInfoEntityName; - this.timestampValueResolver = timestampValueResolver; - - this.revisionInfoClassConstructor = ReflectHelper.getDefaultConstructor( revisionInfoClass ); - - this.listenerManagedBean = resolveRevisionListenerBean( listenerClass, serviceRegistry ); - - this.sessionCacheCleaner = new SessionCacheCleaner(); - } - - @Override - public void setRevisionInfoNumberReader(RevisionInfoNumberReader revisionInfoNumberReader) { - this.revisionInfoNumberReader = revisionInfoNumberReader; - } - - @Override - public void saveRevisionData(Session session, Object revisionData) { - session.persist( revisionInfoEntityName, revisionData ); - if ( revisionInfoNumberReader != null && revisionInfoNumberReader.getRevisionNumber( revisionData ).longValue() < 0 ) { - throw new AuditException( "Negative revision numbers are not allowed" ); - } - sessionCacheCleaner.scheduleAuditDataRemoval( session, revisionData ); - } - - @Override - public Object generate() { - Object revisionInfo; - try { - revisionInfo = revisionInfoClassConstructor.newInstance(); - } - catch (Exception e) { - throw new RuntimeException( e ); - } - - timestampValueResolver.resolveNow( revisionInfo ); - - if ( listenerManagedBean != null ) { - listenerManagedBean.getBeanInstance().newRevision( revisionInfo ); - } - - return revisionInfo; - } - - @Override - public void entityChanged( - Class entityClass, - String entityName, - Object entityId, - RevisionType revisionType, - Object revisionInfo) { - if ( listenerManagedBean != null ) { - final RevisionListener listener = listenerManagedBean.getBeanInstance(); - if ( EntityTrackingRevisionListener.class.isInstance( listener ) ) { - ( (EntityTrackingRevisionListener) listener ).entityChanged( - entityClass, - entityName, - entityId, - revisionType, - revisionInfo - ); - } - } - } - - private ManagedBean resolveRevisionListenerBean( - Class listenerClass, - ServiceRegistry serviceRegistry) { - if ( !listenerClass.equals( RevisionListener.class ) ) { - if ( !Helper.allowExtensionsInCdi( serviceRegistry ) ) { - return new ProvidedInstanceManagedBeanImpl<>( - FallbackBeanInstanceProducer.INSTANCE.produceBeanInstance( listenerClass ) - ); - } - return serviceRegistry.getService( ManagedBeanRegistry.class ).getBean( listenerClass ); - } - return null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/DefaultTrackingModifiedEntitiesRevisionInfoGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/DefaultTrackingModifiedEntitiesRevisionInfoGenerator.java deleted file mode 100644 index 202d3c345a6d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/DefaultTrackingModifiedEntitiesRevisionInfoGenerator.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import java.util.HashSet; -import java.util.Set; - -import org.hibernate.envers.RevisionListener; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.service.ServiceRegistry; - -/** - * Automatically adds entity names, that have been changed during current revision, to revision entity. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - * - * @see org.hibernate.envers.ModifiedEntityNames - * @see org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity - */ -public class DefaultTrackingModifiedEntitiesRevisionInfoGenerator extends DefaultRevisionInfoGenerator { - private final Setter modifiedEntityNamesSetter; - private final Getter modifiedEntityNamesGetter; - - public DefaultTrackingModifiedEntitiesRevisionInfoGenerator( - String revisionInfoEntityName, - Class revisionInfoClass, - Class listenerClass, - RevisionTimestampValueResolver timestampValueResolver, - PropertyData modifiedEntityNamesData, - ServiceRegistry serviceRegistry) { - super( revisionInfoEntityName, revisionInfoClass, listenerClass, timestampValueResolver, serviceRegistry ); - modifiedEntityNamesSetter = ReflectionTools.getSetter( revisionInfoClass, modifiedEntityNamesData, serviceRegistry ); - modifiedEntityNamesGetter = ReflectionTools.getGetter( revisionInfoClass, modifiedEntityNamesData, serviceRegistry ); - } - - @Override - @SuppressWarnings("unchecked") - public void entityChanged( - Class entityClass, - String entityName, - Object entityId, - RevisionType revisionType, - Object revisionEntity) { - super.entityChanged( entityClass, entityName, entityId, revisionType, revisionEntity ); - Set modifiedEntityNames = (Set) modifiedEntityNamesGetter.get( revisionEntity ); - if ( modifiedEntityNames == null ) { - modifiedEntityNames = new HashSet<>(); - modifiedEntityNamesSetter.set( revisionEntity, modifiedEntityNames ); - } - modifiedEntityNames.add( entityName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/ModifiedEntityNamesReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/ModifiedEntityNamesReader.java deleted file mode 100644 index f2decad022c4..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/ModifiedEntityNamesReader.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import java.util.Set; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.service.ServiceRegistry; - -/** - * Returns modified entity names from a persisted revision info entity. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class ModifiedEntityNamesReader { - private final Getter modifiedEntityNamesGetter; - - public ModifiedEntityNamesReader( - Class revisionInfoClass, - PropertyData modifiedEntityNamesData, - ServiceRegistry serviceRegistry) { - modifiedEntityNamesGetter = ReflectionTools.getGetter( revisionInfoClass, modifiedEntityNamesData, serviceRegistry ); - } - - @SuppressWarnings("unchecked") - public Set getModifiedEntityNames(Object revisionEntity) { - return (Set) modifiedEntityNamesGetter.get( revisionEntity ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoGenerator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoGenerator.java deleted file mode 100644 index b2b80b352836..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoGenerator.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import org.hibernate.Session; -import org.hibernate.envers.RevisionType; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface RevisionInfoGenerator { - /** - * Set the revision entity number reader instance. - */ - void setRevisionInfoNumberReader(RevisionInfoNumberReader revisionInfoNumberReader); - - void saveRevisionData(Session session, Object revisionData); - - Object generate(); - - /** - * @see org.hibernate.envers.EntityTrackingRevisionListener#entityChanged(Class, String, Object, RevisionType, Object) - */ - void entityChanged( - Class entityClass, String entityName, Object entityId, RevisionType revisionType, - Object revisionEntity); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoNumberReader.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoNumberReader.java deleted file mode 100644 index e65461e0fe5c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoNumberReader.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.service.ServiceRegistry; - -/** - * Gets a revision number from a persisted revision info entity. - * - * @author Adam Warski (adam at warski dot org) - */ -public class RevisionInfoNumberReader { - private final Getter revisionIdGetter; - - public RevisionInfoNumberReader(Class revisionInfoClass, PropertyData revisionInfoIdData, ServiceRegistry serviceRegistry, RevisionInfoGenerator generator) { - revisionIdGetter = ReflectionTools.getGetter( revisionInfoClass, revisionInfoIdData, serviceRegistry ); - generator.setRevisionInfoNumberReader( this ); - } - - public Number getRevisionNumber(Object revision) { - return (Number) revisionIdGetter.get( revision ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoQueryCreator.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoQueryCreator.java deleted file mode 100644 index 2a8c66d44e6a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionInfoQueryCreator.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.util.Date; -import java.util.Locale; -import java.util.Set; - -import org.hibernate.Session; -import org.hibernate.query.Query; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class RevisionInfoQueryCreator { - private static final String REVISION_DATE_QUERY = "SELECT %s FROM %s WHERE %s = :revision"; - private static final String REVISION_DATE_QUERY_PARAMETER = "revision"; - private static final String REVISION_NUMBER_FOR_DATE_QUERY = "SELECT MAX(%s) FROM %s WHERE %s <= :date"; - private static final String REVISION_NUMBER_FOR_DATE_QUERY_PARAMETER = "date"; - private static final String REVISIONS_QUERY = "FROM %s WHERE %s IN (:revisions)"; - private static final String REVISIONS_QUERY_PARAMETER = "revisions"; - - private final String revisionInfoEntityName; - private final String revisionInfoIdName; - private final RevisionTimestampValueResolver timestampValueResolver; - - public RevisionInfoQueryCreator( - String revisionInfoEntityName, - String revisionInfoIdName, - RevisionTimestampValueResolver timestampValueResolver) { - this.revisionInfoEntityName = revisionInfoEntityName; - this.revisionInfoIdName = revisionInfoIdName; - this.timestampValueResolver = timestampValueResolver; - } - - public Query getRevisionDateQuery(Session session, Number revision) { - return session.createQuery( - String.format( - Locale.ENGLISH, - REVISION_DATE_QUERY, - timestampValueResolver.getName(), - revisionInfoEntityName, - revisionInfoIdName - ) - ).setParameter( REVISION_DATE_QUERY_PARAMETER, revision ); - } - - public Query getRevisionNumberForDateQuery(Session session, Date date) { - return session.createQuery( - String.format( - Locale.ENGLISH, - REVISION_NUMBER_FOR_DATE_QUERY, - revisionInfoIdName, - revisionInfoEntityName, - timestampValueResolver.getName() - ) - ).setParameter( REVISION_NUMBER_FOR_DATE_QUERY_PARAMETER, timestampValueResolver.resolveByValue( date ) ); - } - - public Query getRevisionNumberForDateQuery(Session session, LocalDateTime localDateTime) { - return session.createQuery( - String.format( - Locale.ENGLISH, - REVISION_NUMBER_FOR_DATE_QUERY, - revisionInfoIdName, - revisionInfoEntityName, - timestampValueResolver.getName() - ) - ).setParameter( REVISION_NUMBER_FOR_DATE_QUERY_PARAMETER, timestampValueResolver.resolveByValue( localDateTime ) ); - } - - public Query getRevisionNumberForDateQuery(Session session, Instant instant) { - return session.createQuery( - String.format( - Locale.ENGLISH, - REVISION_NUMBER_FOR_DATE_QUERY, - revisionInfoIdName, - revisionInfoEntityName, - timestampValueResolver.getName() - ) - ).setParameter( REVISION_NUMBER_FOR_DATE_QUERY_PARAMETER, timestampValueResolver.resolveByValue( instant ) ); - } - - public Query getRevisionsQuery(Session session, Set revisions) { - return session.createQuery( - String.format( Locale.ENGLISH, REVISIONS_QUERY, revisionInfoEntityName, revisionInfoIdName ) - ).setParameter( REVISIONS_QUERY_PARAMETER, revisions ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionTimestampValueResolver.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionTimestampValueResolver.java deleted file mode 100644 index 271930e16839..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/revisioninfo/RevisionTimestampValueResolver.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.revisioninfo; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.temporal.ChronoUnit; -import java.util.Date; - -import org.hibernate.envers.internal.entities.RevisionTimestampData; -import org.hibernate.envers.internal.tools.ReflectionTools; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.service.ServiceRegistry; - -/** - * @author Chris Cranford - * @since 6.0 - */ -public class RevisionTimestampValueResolver { - - private final RevisionTimestampData timestampData; - private final Setter revisionTimestampSetter; - - public RevisionTimestampValueResolver(Class revisionInfoClass, RevisionTimestampData timestampData, ServiceRegistry serviceRegistry) { - this.timestampData = timestampData; - this.revisionTimestampSetter = ReflectionTools.getSetter( revisionInfoClass, timestampData, serviceRegistry ); - } - - public String getName() { - return timestampData.getName(); - } - - public void resolveNow(Object object) { - if ( timestampData.isTimestampDate() ) { - revisionTimestampSetter.set( object, new Date() ); - } - else if ( timestampData.isTimestampLocalDateTime() ) { - revisionTimestampSetter.set( object, LocalDateTime.now() ); - } - else if ( timestampData.isInstant() ) { - // HHH-17139 truncated to milliseconds to allow Date-based AuditReader functions to - // continue to work with the same precision level. - revisionTimestampSetter.set( object, Instant.now().truncatedTo( ChronoUnit.MILLIS ) ); - } - else { - revisionTimestampSetter.set( object, System.currentTimeMillis() ); - } - } - - public Object resolveByValue(Date date) { - if ( date != null ) { - if ( timestampData.isTimestampDate() ) { - return date; - } - else if ( timestampData.isTimestampLocalDateTime() ) { - return LocalDateTime.ofInstant( date.toInstant(), ZoneId.systemDefault() ); - } - else if ( timestampData.isInstant() ) { - return date.toInstant(); - } - else { - return date.getTime(); - } - } - return null; - } - - public Object resolveByValue(LocalDateTime localDateTime) { - if ( localDateTime != null ) { - if ( timestampData.isTimestampDate() ) { - return Date.from( localDateTime.atZone( ZoneId.systemDefault() ).toInstant() ); - } - else if ( timestampData.isTimestampLocalDateTime() ) { - return localDateTime; - } - else if ( timestampData.isInstant() ) { - return localDateTime.atZone( ZoneId.systemDefault() ).toInstant(); - } - else { - return localDateTime.atZone( ZoneId.systemDefault() ).toInstant().toEpochMilli(); - } - } - return null; - } - - public Object resolveByValue(Instant instant) { - if ( instant != null ) { - if ( timestampData.isTimestampDate() ) { - return Date.from( instant ); - } - else if ( timestampData.isTimestampLocalDateTime() ) { - return LocalDateTime.ofInstant( instant, ZoneId.systemDefault() ); - } - else if ( timestampData.isInstant() ) { - return instant; - } - else { - return instant.toEpochMilli(); - } - } - return null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/AuditProcess.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/AuditProcess.java deleted file mode 100644 index 872f26fb78ba..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/AuditProcess.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Map; -import java.util.Queue; - -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.action.spi.BeforeTransactionCompletionProcess; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoGenerator; -import org.hibernate.envers.internal.synchronization.work.AuditWorkUnit; -import org.hibernate.envers.tools.Pair; -import org.hibernate.resource.jdbc.spi.PhysicalConnectionHandlingMode; -import org.jboss.logging.Logger; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class AuditProcess implements BeforeTransactionCompletionProcess { - private static final Logger log = Logger.getLogger( AuditProcess.class ); - - private final RevisionInfoGenerator revisionInfoGenerator; - private final SessionImplementor session; - - private final LinkedList workUnits; - private final Queue undoQueue; - private final Map, AuditWorkUnit> usedIds; - private final Map, Object[]> entityStateCache; - private final EntityChangeNotifier entityChangeNotifier; - private Object revisionData; - - public AuditProcess(RevisionInfoGenerator revisionInfoGenerator, SessionImplementor session) { - this.revisionInfoGenerator = revisionInfoGenerator; - this.session = session; - - workUnits = new LinkedList<>(); - undoQueue = new LinkedList<>(); - usedIds = new HashMap<>(); - entityStateCache = new HashMap<>(); - entityChangeNotifier = new EntityChangeNotifier( revisionInfoGenerator, session ); - } - - public void cacheEntityState(Object id, String entityName, Object[] snapshot) { - final Pair key = new Pair<>( entityName, id ); - if ( entityStateCache.containsKey( key ) ) { - throw new AuditException( "The entity [" + entityName + "] with id [" + id + "] is already cached." ); - } - entityStateCache.put( key, snapshot ); - } - - public Object[] getCachedEntityState(Object id, String entityName) { - final Pair key = new Pair<>( entityName, id ); - final Object[] entityState = entityStateCache.get( key ); - if ( entityState != null ) { - entityStateCache.remove( key ); - } - return entityState; - } - - private void removeWorkUnit(AuditWorkUnit vwu) { - workUnits.remove( vwu ); - if ( vwu.isPerformed() ) { - // If this work unit has already been performed, it must be deleted (undone) first. - undoQueue.offer( vwu ); - } - } - - public void addWorkUnit(AuditWorkUnit vwu) { - if ( vwu.containsWork() ) { - final Object entityId = vwu.getEntityId(); - - if ( entityId == null ) { - // Just adding the work unit - it's not associated with any persistent entity. - workUnits.offer( vwu ); - } - else { - final String entityName = vwu.getEntityName(); - final Pair usedIdsKey = Pair.make( entityName, entityId ); - - if ( usedIds.containsKey( usedIdsKey ) ) { - final AuditWorkUnit other = usedIds.get( usedIdsKey ); - final AuditWorkUnit result = vwu.dispatch( other ); - - if ( result != other ) { - removeWorkUnit( other ); - - if ( result != null ) { - usedIds.put( usedIdsKey, result ); - workUnits.offer( result ); - } - // else: a null result means that no work unit should be kept - } - // else: the result is the same as the work unit already added. No need to do anything. - } - else { - usedIds.put( usedIdsKey, vwu ); - workUnits.offer( vwu ); - } - } - } - } - - private void executeInSession(Session session) { - // Making sure the revision data is persisted. - final Object currentRevisionData = getCurrentRevisionData( session, true ); - - AuditWorkUnit vwu; - - // First undoing any performed work units - while ( (vwu = undoQueue.poll()) != null ) { - vwu.undo( session ); - } - - while ( (vwu = workUnits.poll()) != null ) { - vwu.perform( session, revisionData ); - entityChangeNotifier.entityChanged( session, currentRevisionData, vwu ); - } - } - - public Object getCurrentRevisionData(Session session, boolean persist) { - // Generating the revision data if not yet generated - if ( revisionData == null ) { - revisionData = revisionInfoGenerator.generate(); - } - - // Saving the revision data, if not yet saved and persist is true - if ( !session.contains( revisionData ) && persist ) { - revisionInfoGenerator.saveRevisionData( session, revisionData ); - } - - return revisionData; - } - - @Override - public void doBeforeTransactionCompletion(SessionImplementor session) { - if ( workUnits.size() == 0 && undoQueue.size() == 0 ) { - return; - } - - if ( !session.getTransactionCoordinator().isActive() ) { - log.debug( "Skipping envers transaction hook due to non-active (most likely marked-rollback-only) transaction" ); - return; - } - - // see: http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4178431 - if ( FlushMode.MANUAL.equals( session.getHibernateFlushMode() ) || session.isClosed() ) { - Session temporarySession = null; - try { - temporarySession = session.sessionWithOptions() - .connection() - .autoClose( false ) - .connectionHandlingMode( PhysicalConnectionHandlingMode.DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION ) - .noInterceptor() - .openSession(); - executeInSession( temporarySession ); - temporarySession.flush(); - } - finally { - if ( temporarySession != null ) { - temporarySession.close(); - } - } - } - else { - executeInSession( session ); - - // Explicitly flushing the session, as the auto-flush may have already happened. - session.flush(); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/AuditProcessManager.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/AuditProcessManager.java deleted file mode 100644 index 72bb80bd03e3..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/AuditProcessManager.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.hibernate.Transaction; -import org.hibernate.action.spi.AfterTransactionCompletionProcess; -import org.hibernate.action.spi.BeforeTransactionCompletionProcess; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoGenerator; -import org.hibernate.event.spi.EventSource; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class AuditProcessManager { - private final Map auditProcesses; - private final RevisionInfoGenerator revisionInfoGenerator; - - public AuditProcessManager(RevisionInfoGenerator revisionInfoGenerator) { - auditProcesses = new ConcurrentHashMap<>(); - - this.revisionInfoGenerator = revisionInfoGenerator; - } - - public AuditProcess get(EventSource session) { - final Transaction transaction = session.accessTransaction(); - - AuditProcess auditProcess = auditProcesses.get( transaction ); - if ( auditProcess == null ) { - // No worries about registering a transaction twice - a transaction is single thread - auditProcess = new AuditProcess( revisionInfoGenerator, session ); - auditProcesses.put( transaction, auditProcess ); - - session.getActionQueue().registerProcess( - new BeforeTransactionCompletionProcess() { - public void doBeforeTransactionCompletion(SessionImplementor session) { - final AuditProcess process = auditProcesses.get( transaction ); - if ( process != null ) { - process.doBeforeTransactionCompletion( session ); - } - } - } - ); - - session.getActionQueue().registerProcess( - new AfterTransactionCompletionProcess() { - public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) { - auditProcesses.remove( transaction ); - } - } - ); - } - - return auditProcess; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/EntityChangeNotifier.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/EntityChangeNotifier.java deleted file mode 100644 index 4b8e799dc0a7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/EntityChangeNotifier.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoGenerator; -import org.hibernate.envers.internal.synchronization.work.AuditWorkUnit; -import org.hibernate.envers.internal.synchronization.work.PersistentCollectionChangeWorkUnit; -import org.hibernate.envers.internal.tools.EntityTools; - -/** - * Notifies {@link RevisionInfoGenerator} about changes made in the current revision. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class EntityChangeNotifier { - private final RevisionInfoGenerator revisionInfoGenerator; - private final SessionImplementor sessionImplementor; - - public EntityChangeNotifier(RevisionInfoGenerator revisionInfoGenerator, SessionImplementor sessionImplementor) { - this.revisionInfoGenerator = revisionInfoGenerator; - this.sessionImplementor = sessionImplementor; - } - - /** - * Notifies {@link RevisionInfoGenerator} about changes made in the current revision. Provides information - * about modified entity class, entity name and its id, as well as {@link org.hibernate.envers.RevisionType} - * and revision log entity. - * - * @param session Active session. - * @param currentRevisionData Revision log entity. - * @param vwu Performed work unit. - */ - public void entityChanged(Session session, Object currentRevisionData, AuditWorkUnit vwu) { - Object entityId = vwu.getEntityId(); - if ( entityId instanceof PersistentCollectionChangeWorkUnit.PersistentCollectionChangeWorkUnitId ) { - // Notify about a change in collection owner entity. - entityId = ( (PersistentCollectionChangeWorkUnit.PersistentCollectionChangeWorkUnitId) entityId ).getOwnerId(); - } - final Class entityClass = EntityTools.getEntityClass( sessionImplementor, vwu.getEntityName() ); - revisionInfoGenerator.entityChanged( - entityClass, - vwu.getEntityName(), - entityId, - vwu.getRevisionType(), - currentRevisionData - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/SessionCacheCleaner.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/SessionCacheCleaner.java deleted file mode 100644 index 6019f8da9301..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/SessionCacheCleaner.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization; - -import org.hibernate.HibernateException; -import org.hibernate.Session; -import org.hibernate.action.spi.AfterTransactionCompletionProcess; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.event.spi.EventSource; - -/** - * Class responsible for evicting audit data entries that have been stored in the session level cache. - * This operation increases Envers performance in case of massive entity updates without clearing persistence context. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class SessionCacheCleaner { - /** - * Schedules audit data removal from session level cache after transaction completion. The operation is performed - * regardless of commit success. - * - * @param session Active Hibernate session. - * @param data Audit data that shall be evicted (e.g. revision data or entity snapshot) - */ - public void scheduleAuditDataRemoval(final Session session, final Object data) { - ( (EventSource) session ).getActionQueue().registerProcess( - new AfterTransactionCompletionProcess() { - public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor sessionImplementor) { - if ( !sessionImplementor.isClosed() ) { - try { - ( (Session) sessionImplementor ).evict( data ); - } - catch ( HibernateException ignore ) { - } - } - } - } - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AbstractAuditWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AbstractAuditWorkUnit.java deleted file mode 100644 index 4a21ec1f5ab6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AbstractAuditWorkUnit.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.strategy.AuditStrategy; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Stephanie Pau at Markit Group Plc - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class AbstractAuditWorkUnit implements AuditWorkUnit { - protected final SessionImplementor sessionImplementor; - protected final EnversService enversService; - protected final Object id; - protected final String entityName; - protected final AuditStrategy auditStrategy; - protected final RevisionType revisionType; - - private Object performedData; - - protected AbstractAuditWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Object id, - RevisionType revisionType) { - this.sessionImplementor = sessionImplementor; - this.enversService = enversService; - this.id = id; - this.entityName = entityName; - this.revisionType = revisionType; - this.auditStrategy = enversService.getAuditStrategy(); - } - - protected void fillDataWithId(Map data, Object revision) { - final Configuration configuration = enversService.getConfig(); - - final Map originalId = new HashMap<>(); - originalId.put( configuration.getRevisionFieldName(), revision ); - - final IdMapper idMapper = enversService.getEntitiesConfigurations().get( getEntityName() ).getIdMapper(); - idMapper.mapToMapFromId( sessionImplementor, originalId, id ); - - data.put( configuration.getRevisionTypePropertyName(), revisionType ); - data.put( configuration.getOriginalIdPropertyName(), originalId ); - // The $type$ property holds the name of the (versions) entity - data.put( "$type$", configuration.getAuditEntityName( entityName ) ); - } - - @Override - public void perform(Session session, Object revisionData) { - final Map data = generateData( revisionData ); - - auditStrategy.perform( session, getEntityName(), enversService, id, data, revisionData ); - - setPerformed( data ); - } - - @Override - public Object getEntityId() { - return id; - } - - @Override - public boolean isPerformed() { - return performedData != null; - } - - @Override - public String getEntityName() { - return entityName; - } - - protected void setPerformed(Object performedData) { - this.performedData = performedData; - } - - public void undo(Session session) { - if ( isPerformed() ) { - session.remove( performedData ); - session.flush(); - } - } - - @Override - public RevisionType getRevisionType() { - return revisionType; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AddWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AddWorkUnit.java deleted file mode 100644 index 84349c8f8131..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AddWorkUnit.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.ExtendedPropertyMapper; -import org.hibernate.envers.internal.tools.ArraysTools; -import org.hibernate.persister.entity.EntityPersister; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class AddWorkUnit extends AbstractAuditWorkUnit implements AuditWorkUnit { - private final Object[] state; - private final Map data; - - public AddWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Object id, EntityPersister entityPersister, Object[] state) { - super( sessionImplementor, entityName, enversService, id, RevisionType.ADD ); - - this.data = new HashMap<>(); - this.state = state; - this.enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper().map( - sessionImplementor, - data, - entityPersister.getPropertyNames(), - state, - null - ); - } - - public AddWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Object id, - Map data) { - super( sessionImplementor, entityName, enversService, id, RevisionType.ADD ); - - this.data = data; - final String[] propertyNames = sessionImplementor.getFactory() - .getMappingMetamodel() - .getEntityDescriptor( getEntityName() ) - .getPropertyNames(); - this.state = ArraysTools.mapToArray( data, propertyNames ); - } - - @Override - public boolean containsWork() { - return true; - } - - @Override - public Map generateData(Object revisionData) { - fillDataWithId( data, revisionData ); - return data; - } - - public Object[] getState() { - return state; - } - - @Override - public AuditWorkUnit merge(AddWorkUnit second) { - return second; - } - - @Override - public AuditWorkUnit merge(ModWorkUnit second) { - return new AddWorkUnit( - sessionImplementor, - entityName, - enversService, - id, - mergeModifiedFlags( data, second.getData() ) - ); - } - - @Override - public AuditWorkUnit merge(DelWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit merge(CollectionChangeWorkUnit second) { - second.mergeCollectionModifiedData( data ); - return this; - } - - @Override - public AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second) { - return FakeBidirectionalRelationWorkUnit.merge( second, this, second.getNestedWorkUnit() ); - } - - @Override - public AuditWorkUnit dispatch(WorkUnitMergeVisitor first) { - return first.merge( this ); - } - - private Map mergeModifiedFlags(Map lhs, Map rhs) { - final ExtendedPropertyMapper mapper = enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper(); - // Designed to take any lhs modified flag values of true and merge those into the data set for the rhs - // This makes sure that when merging ModAuditWork with AddWorkUnit within the same transaction for the - // same entity that the modified flags are tracked correctly. - for ( PropertyData propertyData : mapper.getProperties().keySet() ) { - if ( propertyData.isUsingModifiedFlag() && !propertyData.isSynthetic() ) { - Boolean lhsValue = (Boolean) lhs.get( propertyData.getModifiedFlagPropertyName() ); - if ( lhsValue != null && lhsValue ) { - Boolean rhsValue = (Boolean) rhs.get( propertyData.getModifiedFlagPropertyName() ); - if ( rhsValue == null || !rhsValue ) { - rhs.put( propertyData.getModifiedFlagPropertyName(), true ); - } - } - } - } - return rhs; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AuditWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AuditWorkUnit.java deleted file mode 100644 index 5b34603572a6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/AuditWorkUnit.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.RevisionType; - -/** - * TODO: refactor constructors into factory methods - * - * @author Adam Warski (adam at warski dot org) - */ -public interface AuditWorkUnit extends WorkUnitMergeVisitor, WorkUnitMergeDispatcher { - Object getEntityId(); - - String getEntityName(); - - boolean containsWork(); - - boolean isPerformed(); - - /** - * Perform this work unit in the given session. - * - * @param session Session, in which the work unit should be performed. - * @param revisionData The current revision data, which will be used to populate the work unit with the correct - * revision relation. - */ - void perform(Session session, Object revisionData); - - void undo(Session session); - - /** - * @param revisionData The current revision data, which will be used to populate the work unit with the correct - * revision relation. - * - * @return Generates data that should be saved when performing this work unit. - */ - Map generateData(Object revisionData); - - /** - * @return Performed modification type. - */ - RevisionType getRevisionType(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/CollectionChangeWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/CollectionChangeWorkUnit.java deleted file mode 100644 index 81b915234c1d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/CollectionChangeWorkUnit.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.mapper.PropertyMapper; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class CollectionChangeWorkUnit extends AbstractAuditWorkUnit implements AuditWorkUnit { - private Object entity; - private final String collectionPropertyName; - private final Map data = new HashMap<>(); - - public CollectionChangeWorkUnit( - SessionImplementor session, - String entityName, - String collectionPropertyName, - EnversService enversService, - Object id, - Object entity) { - super( session, entityName, enversService, id, RevisionType.MOD ); - - this.entity = entity; - this.collectionPropertyName = collectionPropertyName; - } - - @Override - public boolean containsWork() { - return true; - } - - @Override - public Map generateData(Object revisionData) { - fillDataWithId( data, revisionData ); - final Map preGenerateData = new HashMap<>( data ); - - final EntityConfiguration entityConfig = enversService.getEntitiesConfigurations().get( getEntityName() ); - final PropertyMapper propertyMapper = entityConfig.getPropertyMapper(); - // HHH-7681 - Use entity as 'oldObj' so fake bidirectional non-insertable fields are tracked properly. - propertyMapper.mapToMapFromEntity( sessionImplementor, data, entity, entity ); - propertyMapper.mapModifiedFlagsToMapFromEntity( sessionImplementor, data, entity, entity ); - propertyMapper.mapModifiedFlagsToMapForCollectionChange( collectionPropertyName, data ); - - data.putAll( preGenerateData ); - return data; - } - - public void mergeCollectionModifiedData(Map data) { - enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper().mapModifiedFlagsToMapForCollectionChange( - collectionPropertyName, - data - ); - } - - @Override - public AuditWorkUnit merge(AddWorkUnit second) { - return second; - } - - @Override - public AuditWorkUnit merge(ModWorkUnit second) { - mergeCollectionModifiedData( second.getData() ); - return second; - } - - @Override - public AuditWorkUnit merge(DelWorkUnit second) { - return second; - } - - @Override - public AuditWorkUnit merge(CollectionChangeWorkUnit second) { - second.mergeCollectionModifiedData( data ); - return this; - } - - @Override - public AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second) { - return second; - } - - @Override - public AuditWorkUnit dispatch(WorkUnitMergeVisitor first) { - return first.merge( this ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/DelWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/DelWorkUnit.java deleted file mode 100644 index 4f0696460c4d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/DelWorkUnit.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.tools.ArraysTools; -import org.hibernate.persister.entity.EntityPersister; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class DelWorkUnit extends AbstractAuditWorkUnit implements AuditWorkUnit { - private final Object[] state; - private final EntityPersister entityPersister; - private final String[] propertyNames; - - public DelWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Object id, - EntityPersister entityPersister, - Object[] state) { - super( sessionImplementor, entityName, enversService, id, RevisionType.DEL ); - - this.state = state; - this.entityPersister = entityPersister; - this.propertyNames = entityPersister.getPropertyNames(); - } - - @Override - public boolean containsWork() { - return true; - } - - @Override - public Map generateData(Object revisionData) { - final Map data = new HashMap<>(); - fillDataWithId( data, revisionData ); - - if ( enversService.getConfig().isStoreDataAtDelete() ) { - enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper().map( - sessionImplementor, - data, - propertyNames, - state, - state - ); - } - else { - enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper().map( - sessionImplementor, - data, - propertyNames, - null, - state - ); - } - - return data; - } - - @Override - public AuditWorkUnit merge(AddWorkUnit second) { - if ( ArraysTools.arraysEqual( second.getState(), state ) ) { - // Return null if object's state has not changed. - return null; - } - return new ModWorkUnit( sessionImplementor, entityName, enversService, id, entityPersister, second.getState(), state ); - } - - @Override - public AuditWorkUnit merge(ModWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit merge(DelWorkUnit second) { - return this; - } - - @Override - public AuditWorkUnit merge(CollectionChangeWorkUnit second) { - return this; - } - - @Override - public AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second) { - return this; - } - - @Override - public AuditWorkUnit dispatch(WorkUnitMergeVisitor first) { - return first.merge( this ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/FakeBidirectionalRelationWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/FakeBidirectionalRelationWorkUnit.java deleted file mode 100644 index 2d251ea2bff8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/FakeBidirectionalRelationWorkUnit.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.RelationDescription; - -/** - * A work unit that handles "fake" bidirectional one-to-many relations (mapped with {@code @OneToMany+@JoinColumn} and - * {@code @ManyToOne+@Column(insertable=false, updatable=false)}. - * - * @author Adam Warski (adam at warski dot org) - */ -public class FakeBidirectionalRelationWorkUnit extends AbstractAuditWorkUnit implements AuditWorkUnit { - private final Map fakeRelationChanges; - - /* - * The work unit responsible for generating the "raw" entity data to be saved. - */ - private final AuditWorkUnit nestedWorkUnit; - - public FakeBidirectionalRelationWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Serializable id, - String referencingPropertyName, - Object owningEntity, - RelationDescription rd, - RevisionType revisionType, - Object index, - AuditWorkUnit nestedWorkUnit) { - super( sessionImplementor, entityName, enversService, id, revisionType ); - this.nestedWorkUnit = nestedWorkUnit; - - // Adding the change for the relation. - fakeRelationChanges = new HashMap<>(); - fakeRelationChanges.put( - referencingPropertyName, new FakeRelationChange( - owningEntity, - rd, - revisionType, - index - ) - ); - } - - public FakeBidirectionalRelationWorkUnit( - FakeBidirectionalRelationWorkUnit original, - Map fakeRelationChanges, - AuditWorkUnit nestedWorkUnit) { - super( original.sessionImplementor, original.entityName, original.enversService, original.id, original.revisionType ); - - this.fakeRelationChanges = fakeRelationChanges; - this.nestedWorkUnit = nestedWorkUnit; - } - - public FakeBidirectionalRelationWorkUnit(FakeBidirectionalRelationWorkUnit original, AuditWorkUnit nestedWorkUnit) { - super( original.sessionImplementor, original.entityName, original.enversService, original.id, original.revisionType ); - - this.nestedWorkUnit = nestedWorkUnit; - - fakeRelationChanges = new HashMap<>( original.getFakeRelationChanges() ); - } - - public AuditWorkUnit getNestedWorkUnit() { - return nestedWorkUnit; - } - - public Map getFakeRelationChanges() { - return fakeRelationChanges; - } - - @Override - public boolean containsWork() { - return true; - } - - @Override - public Map generateData(Object revisionData) { - // Generating data with the nested work unit. This data contains all data except the fake relation. - // Making a defensive copy not to modify the data held by the nested work unit. - final Map nestedData = new HashMap<>( nestedWorkUnit.generateData( revisionData ) ); - - // Now adding data for all fake relations. - for ( FakeRelationChange fakeRelationChange : fakeRelationChanges.values() ) { - fakeRelationChange.generateData( sessionImplementor, nestedData ); - } - - return nestedData; - } - - @Override - public AuditWorkUnit merge(AddWorkUnit second) { - return merge( this, nestedWorkUnit, second ); - } - - @Override - public AuditWorkUnit merge(ModWorkUnit second) { - return merge( this, nestedWorkUnit, second ); - } - - @Override - public AuditWorkUnit merge(DelWorkUnit second) { - return second; - } - - @Override - public AuditWorkUnit merge(CollectionChangeWorkUnit second) { - return this; - } - - @Override - public AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second) { - // First merging the nested work units. - final AuditWorkUnit mergedNested = second.getNestedWorkUnit().dispatch( nestedWorkUnit ); - - // Now merging the fake relation changes from both work units. - final Map secondFakeRelationChanges = second.getFakeRelationChanges(); - final Map mergedFakeRelationChanges = new HashMap<>(); - final Set allPropertyNames = new HashSet<>( fakeRelationChanges.keySet() ); - allPropertyNames.addAll( secondFakeRelationChanges.keySet() ); - - for ( String propertyName : allPropertyNames ) { - mergedFakeRelationChanges.put( - propertyName, - FakeRelationChange.merge( - fakeRelationChanges.get( propertyName ), - secondFakeRelationChanges.get( propertyName ) - ) - ); - } - - return new FakeBidirectionalRelationWorkUnit( this, mergedFakeRelationChanges, mergedNested ); - } - - @Override - public AuditWorkUnit dispatch(WorkUnitMergeVisitor first) { - return first.merge( this ); - } - - public static AuditWorkUnit merge( - FakeBidirectionalRelationWorkUnit frwu, - AuditWorkUnit nestedFirst, - AuditWorkUnit nestedSecond) { - final AuditWorkUnit nestedMerged = nestedSecond.dispatch( nestedFirst ); - - // Creating a new fake relation work unit with the nested merged data - return new FakeBidirectionalRelationWorkUnit( frwu, nestedMerged ); - } - - /** - * Describes a change to a single fake bidirectional relation. - */ - private static class FakeRelationChange { - private final Object owningEntity; - private final RelationDescription rd; - private final RevisionType revisionType; - private final Object index; - - public FakeRelationChange( - Object owningEntity, RelationDescription rd, RevisionType revisionType, - Object index) { - this.owningEntity = owningEntity; - this.rd = rd; - this.revisionType = revisionType; - this.index = index; - } - - public RevisionType getRevisionType() { - return revisionType; - } - - public void generateData(SessionImplementor sessionImplementor, Map data) { - // If the revision type is "DEL", it means that the object is removed from the collection. Then the - // new owner will in fact be null. - rd.getFakeBidirectionalRelationMapper().mapToMapFromEntity( - sessionImplementor, data, - revisionType == RevisionType.DEL ? null : owningEntity, null - ); - rd.getFakeBidirectionalRelationMapper().mapModifiedFlagsToMapFromEntity( - sessionImplementor, data, - revisionType == RevisionType.DEL ? null : owningEntity, null - ); - - // Also mapping the index, if the collection is indexed. - if ( rd.getFakeBidirectionalRelationIndexMapper() != null ) { - rd.getFakeBidirectionalRelationIndexMapper().mapToMapFromEntity( - sessionImplementor, data, - revisionType == RevisionType.DEL ? null : index, null - ); - rd.getFakeBidirectionalRelationIndexMapper().mapModifiedFlagsToMapFromEntity( - sessionImplementor, data, - revisionType == RevisionType.DEL ? null : index, null - ); - } - } - - public static FakeRelationChange merge(FakeRelationChange first, FakeRelationChange second) { - if ( first == null ) { - return second; - } - if ( second == null ) { - return first; - } - - /* - * The merging rules are the following (revision types of the first and second changes): - * - DEL, DEL - return any (the work units are the same) - * - DEL, ADD - return ADD (points to new owner) - * - ADD, DEL - return ADD (points to new owner) - * - ADD, ADD - return second (points to newer owner) - */ - if ( first.getRevisionType() == RevisionType.DEL || second.getRevisionType() == RevisionType.ADD ) { - return second; - } - else { - return first; - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/ModWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/ModWorkUnit.java deleted file mode 100644 index 865745da6dc3..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/ModWorkUnit.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.persister.entity.EntityPersister; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ModWorkUnit extends AbstractAuditWorkUnit implements AuditWorkUnit { - private final Map data; - private final boolean changes; - - private final EntityPersister entityPersister; - private final Object[] oldState; - private final Object[] newState; - - public ModWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Object id, - EntityPersister entityPersister, - Object[] newState, - Object[] oldState) { - super( sessionImplementor, entityName, enversService, id, RevisionType.MOD ); - - this.entityPersister = entityPersister; - this.oldState = oldState; - this.newState = newState; - this.data = new HashMap<>(); - this.changes = enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper().map( - sessionImplementor, - data, - entityPersister.getPropertyNames(), - newState, - oldState - ); - } - - public Map getData() { - return data; - } - - @Override - public boolean containsWork() { - return changes; - } - - @Override - public Map generateData(Object revisionData) { - fillDataWithId( data, revisionData ); - - return data; - } - - @Override - public AuditWorkUnit merge(AddWorkUnit second) { - return this; - } - - @Override - public AuditWorkUnit merge(ModWorkUnit second) { - // In case of multiple subsequent flushes within single transaction, modification flags need to be - // recalculated against initial and final state of the given entity. - return new ModWorkUnit( - second.sessionImplementor, - second.getEntityName(), - second.enversService, - second.id, - second.entityPersister, - second.newState, - this.oldState - ); - } - - @Override - public AuditWorkUnit merge(DelWorkUnit second) { - return second; - } - - @Override - public AuditWorkUnit merge(CollectionChangeWorkUnit second) { - second.mergeCollectionModifiedData( data ); - return this; - } - - @Override - public AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second) { - return FakeBidirectionalRelationWorkUnit.merge( second, this, second.getNestedWorkUnit() ); - } - - @Override - public AuditWorkUnit dispatch(WorkUnitMergeVisitor first) { - return first.merge( this ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/PersistentCollectionChangeWorkUnit.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/PersistentCollectionChangeWorkUnit.java deleted file mode 100644 index 5413cf11aebf..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/PersistentCollectionChangeWorkUnit.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.collection.spi.PersistentCollection; -import org.hibernate.engine.spi.CollectionEntry; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class PersistentCollectionChangeWorkUnit extends AbstractAuditWorkUnit implements AuditWorkUnit { - private final List collectionChanges; - private final String referencingPropertyName; - - public PersistentCollectionChangeWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - PersistentCollection collection, - CollectionEntry collectionEntry, - Serializable snapshot, - Object id, - String referencingPropertyName) { - super( - sessionImplementor, - entityName, - enversService, - new PersistentCollectionChangeWorkUnitId( id, collectionEntry.getRole() ), - RevisionType.MOD - ); - - this.referencingPropertyName = referencingPropertyName; - - collectionChanges = enversService.getEntitiesConfigurations().get( getEntityName() ).getPropertyMapper() - .mapCollectionChanges( sessionImplementor, referencingPropertyName, collection, snapshot, id ); - } - - public PersistentCollectionChangeWorkUnit( - SessionImplementor sessionImplementor, - String entityName, - EnversService enversService, - Object id, - List collectionChanges, - String referencingPropertyName) { - super( sessionImplementor, entityName, enversService, id, RevisionType.MOD ); - - this.collectionChanges = collectionChanges; - this.referencingPropertyName = referencingPropertyName; - } - - @Override - public boolean containsWork() { - return collectionChanges != null && collectionChanges.size() != 0; - } - - @Override - public Map generateData(Object revisionData) { - throw new UnsupportedOperationException( "Cannot generate data for a collection change work unit!" ); - } - - @Override - @SuppressWarnings("unchecked") - public void perform(Session session, Object revisionData) { - final Configuration configuration = enversService.getConfig(); - - for ( PersistentCollectionChangeData persistentCollectionChangeData : collectionChanges ) { - // Setting the revision number - ( (Map) persistentCollectionChangeData.getData().get( configuration.getOriginalIdPropertyName() ) ) - .put( configuration.getRevisionFieldName(), revisionData ); - - auditStrategy.performCollectionChange( - session, - getEntityName(), - referencingPropertyName, - enversService, - persistentCollectionChangeData, - revisionData - ); - } - } - - public String getReferencingPropertyName() { - return referencingPropertyName; - } - - public List getCollectionChanges() { - return collectionChanges; - } - - @Override - public AuditWorkUnit merge(AddWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit merge(ModWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit merge(DelWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit merge(CollectionChangeWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second) { - return null; - } - - @Override - public AuditWorkUnit dispatch(WorkUnitMergeVisitor first) { - if ( first instanceof PersistentCollectionChangeWorkUnit ) { - final PersistentCollectionChangeWorkUnit original = (PersistentCollectionChangeWorkUnit) first; - - // Merging the collection changes in both work units. - - // First building a map from the ids of the collection-entry-entities from the "second" collection changes, - // to the PCCD objects. That way, we will be later able to check if an "original" collection change - // should be added, or if it is overshadowed by a new one. - final Map newChangesIdMap = new HashMap<>(); - for ( PersistentCollectionChangeData persistentCollectionChangeData : getCollectionChanges() ) { - newChangesIdMap.put( - getOriginalId( persistentCollectionChangeData ), - persistentCollectionChangeData - ); - } - - // This will be the list with the resulting (merged) changes. - final List mergedChanges = new ArrayList<>(); - - // Including only those original changes, which are not overshadowed by new ones. - for ( PersistentCollectionChangeData originalCollectionChangeData : original.getCollectionChanges() ) { - final Object originalOriginalId = getOriginalId( originalCollectionChangeData ); - if ( !newChangesIdMap.containsKey( originalOriginalId ) ) { - mergedChanges.add( originalCollectionChangeData ); - } - else { - // If the changes collide, checking if the first one isn't a DEL, and the second a subsequent ADD - // If so, removing the change alltogether. - final String revTypePropName = enversService.getConfig().getRevisionTypePropertyName(); - if ( RevisionType.ADD.equals( newChangesIdMap.get( originalOriginalId ).getData().get( revTypePropName ) ) - && RevisionType.DEL.equals( originalCollectionChangeData.getData().get( revTypePropName ) ) ) { - newChangesIdMap.remove( originalOriginalId ); - } - } - } - - // Finally adding all of the new changes to the end of the list (the map values may differ from - // getCollectionChanges() because of the last operation above). - mergedChanges.addAll( newChangesIdMap.values() ); - - return new PersistentCollectionChangeWorkUnit( - sessionImplementor, - entityName, - enversService, - id, - mergedChanges, - referencingPropertyName - ); - } - else { - throw new RuntimeException( - "Trying to merge a " + first + " with a PersitentCollectionChangeWorkUnit. " + - "This is not really possible." - ); - } - } - - private Object getOriginalId(PersistentCollectionChangeData persistentCollectionChangeData) { - return persistentCollectionChangeData.getData().get( enversService.getConfig().getOriginalIdPropertyName() ); - } - - /** - * A unique identifier for a collection work unit. Consists of an id of the owning entity and the name of - * the entity plus the name of the field (the role). This is needed because such collections aren't entities - * in the "normal" mapping, but they are entities for Envers. - */ - public static class PersistentCollectionChangeWorkUnitId implements Serializable { - private static final long serialVersionUID = -8007831518629167537L; - - private final Object ownerId; - private final String role; - - public PersistentCollectionChangeWorkUnitId(Object ownerId, String role) { - this.ownerId = ownerId; - this.role = role; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - final PersistentCollectionChangeWorkUnitId that = (PersistentCollectionChangeWorkUnitId) o; - - if ( ownerId != null ? !ownerId.equals( that.ownerId ) : that.ownerId != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( role != null ? !role.equals( that.role ) : that.role != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = ownerId != null ? ownerId.hashCode() : 0; - result = 31 * result + (role != null ? role.hashCode() : 0); - return result; - } - - public Object getOwnerId() { - return ownerId; - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/WorkUnitMergeDispatcher.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/WorkUnitMergeDispatcher.java deleted file mode 100644 index ea1a89088369..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/WorkUnitMergeDispatcher.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - - -/** - * Visitor patter dispatcher. - * - * @author Adam Warski (adam at warski dot org) - */ -public interface WorkUnitMergeDispatcher { - /** - * Should be invoked on the second work unit. - * - * @param first First work unit (that is, the one added earlier). - * - * @return The work unit that is the result of the merge. - */ - AuditWorkUnit dispatch(WorkUnitMergeVisitor first); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/WorkUnitMergeVisitor.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/WorkUnitMergeVisitor.java deleted file mode 100644 index 422f665e145d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/synchronization/work/WorkUnitMergeVisitor.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.synchronization.work; - - -/** - * Visitor pattern visitor. All methods should be invoked on the first work unit. - * - * @author Adam Warski (adam at warski dot org) - */ -public interface WorkUnitMergeVisitor { - AuditWorkUnit merge(AddWorkUnit second); - - AuditWorkUnit merge(ModWorkUnit second); - - AuditWorkUnit merge(DelWorkUnit second); - - AuditWorkUnit merge(CollectionChangeWorkUnit second); - - AuditWorkUnit merge(FakeBidirectionalRelationWorkUnit second); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ArgumentsTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ArgumentsTools.java deleted file mode 100644 index e35642d37d2e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ArgumentsTools.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class ArgumentsTools { - public static void checkNotNull(Object o, String paramName) { - if ( o == null ) { - throw new IllegalArgumentException( paramName + " cannot be null." ); - } - } - - public static void checkPositive(Number i, String paramName) { - if ( i.longValue() <= 0L ) { - throw new IllegalArgumentException( paramName + " has to be greater than 0." ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ArraysTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ArraysTools.java deleted file mode 100644 index 587864c70114..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ArraysTools.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import java.util.Map; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class ArraysTools { - public static boolean arrayIncludesInstanceOf(T[] array, Class cls) { - for ( T obj : array ) { - if ( cls.isAssignableFrom( obj.getClass() ) ) { - return true; - } - } - - return false; - } - - public static boolean arraysEqual(Object[] array1, Object[] array2) { - if ( array1 == null ) { - return array2 == null; - } - if ( array2 == null || array1.length != array2.length ) { - return false; - } - for ( int i = 0; i < array1.length; ++i ) { - if ( array1[i] != null ? !array1[i].equals( array2[i] ) : array2[i] != null ) { - return false; - } - } - return true; - } - - /** - * Converts map's value set to an array. {@code keys} parameter specifies requested elements and their order. - * - * @param data Source map. - * @param keys Array of keys that represent requested map values. - * - * @return Array of values stored in the map under specified keys. If map does not contain requested key, - * {@code null} is inserted. - */ - public static Object[] mapToArray(Map data, String[] keys) { - final Object[] ret = new Object[keys.length]; - for ( int i = 0; i < keys.length; ++i ) { - ret[i] = data.get( keys[i] ); - } - return ret; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/EntityTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/EntityTools.java deleted file mode 100644 index b2cee42e4a93..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/EntityTools.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import java.util.Objects; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; - - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public abstract class EntityTools { - public static boolean entitiesEqual(SessionImplementor session, String entityName, Object obj1, Object obj2) { - final Object id1 = getIdentifier( session, entityName, obj1 ); - final Object id2 = getIdentifier( session, entityName, obj2 ); - - return Objects.deepEquals( id1, id2 ); - } - - public static Object getIdentifier(SessionImplementor session, String entityName, Object obj) { - if ( obj == null ) { - return null; - } - - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( obj ); - if ( lazyInitializer != null ) { - return lazyInitializer.getInternalIdentifier(); - } - - return session.getEntityPersister( entityName, obj ).getIdentifier( obj, session ); - } - - public static Object getTargetFromProxy(final SessionFactoryImplementor sessionFactoryImplementor, final LazyInitializer lazyInitializer) { - if ( !lazyInitializer.isUninitialized() || activeProxySession( lazyInitializer ) ) { - return lazyInitializer.getImplementation(); - } - - final SharedSessionContractImplementor sessionImplementor = lazyInitializer.getSession(); - final Session tempSession = sessionImplementor == null - ? sessionFactoryImplementor.openTemporarySession() - : sessionImplementor.getFactory().openTemporarySession(); - try { - return tempSession.get( - lazyInitializer.getEntityName(), - lazyInitializer.getInternalIdentifier() - ); - } - finally { - tempSession.close(); - } - } - - private static boolean activeProxySession(final LazyInitializer lazyInitializer) { - final Session session = (Session) lazyInitializer.getSession(); - return session != null && session.isOpen() && session.isConnected(); - } - - /** - * @param clazz Class wrapped with a proxy or not. - * @param Class type. - * - * @return Returns target class in case it has been wrapped with a proxy. If {@code null} reference is passed, - * method returns {@code null}. - */ - @SuppressWarnings("unchecked") - public static Class getTargetClassIfProxied(Class clazz) { - if ( clazz == null ) { - return null; - } - else if ( HibernateProxy.class.isAssignableFrom( clazz ) ) { - // Get the source class of the proxy instance. - return (Class) clazz.getSuperclass(); - } - return clazz; - } - - /** - * @return Java class mapped to specified entity name. - */ - public static Class getEntityClass(SessionImplementor sessionImplementor, String entityName) { - final EntityPersister entityPersister = sessionImplementor.getFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ); - return entityPersister.getMappedClass(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MappingTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MappingTools.java deleted file mode 100644 index cd343d679ec5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MappingTools.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import org.hibernate.mapping.Collection; -import org.hibernate.mapping.ManyToOne; -import org.hibernate.mapping.OneToMany; -import org.hibernate.mapping.ToOne; -import org.hibernate.mapping.Value; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class MappingTools { - /** - * @param componentName Name of the component, that is, name of the property in the entity that references the component. - * - * @return A prefix for properties in the given component. - */ - public static String createComponentPrefix(String componentName) { - return componentName + "_"; - } - - /** - * @param referencePropertyName The name of the property that holds the relation to the entity. - * - * @return A prefix which should be used to prefix an id mapper for the related entity. - */ - public static String createToOneRelationPrefix(String referencePropertyName) { - return referencePropertyName + "_"; - } - - public static String getReferencedEntityName(Value value) { - if ( value instanceof ToOne ) { - return ( (ToOne) value ).getReferencedEntityName(); - } - else if ( value instanceof OneToMany ) { - return ( (OneToMany) value ).getReferencedEntityName(); - } - else if ( value instanceof Collection ) { - return getReferencedEntityName( ( (Collection) value ).getElement() ); - } - - return null; - } - - /** - * @param value Persistent property. - * @return {@code false} if lack of associated entity shall raise an exception, {@code true} otherwise. - */ - public static boolean ignoreNotFound(Value value) { - if ( value instanceof ManyToOne ) { - return ( (ManyToOne) value ).isIgnoreNotFound(); - } - else if ( value instanceof OneToMany ) { - return ( (OneToMany) value ).isIgnoreNotFound(); - } - return false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MutableBoolean.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MutableBoolean.java deleted file mode 100644 index 8a585cdc6592..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MutableBoolean.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MutableBoolean { - private boolean value; - - public MutableBoolean() { - } - - public MutableBoolean(boolean value) { - this.value = value; - } - - public boolean isSet() { - return value; - } - - public void set() { - value = true; - } - - public void unset() { - value = false; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MutableInteger.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MutableInteger.java deleted file mode 100644 index 394a017ae3c5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/MutableInteger.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MutableInteger { - private int value; - - public MutableInteger() { - } - - public MutableInteger(int value) { - this.value = value; - } - - public MutableInteger deepCopy() { - return new MutableInteger( value ); - } - - public int getAndIncrease() { - return value++; - } - - public int get() { - return value; - } - - public void set(int value) { - this.value = value; - } - - public void increase() { - ++value; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ReflectionTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ReflectionTools.java deleted file mode 100644 index 08bc0a88f9bd..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/ReflectionTools.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import java.lang.reflect.Field; -import java.util.Locale; -import java.util.Map; - -import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; -import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.tools.Pair; -import org.hibernate.internal.util.collections.ConcurrentReferenceHashMap; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.property.access.spi.PropertyAccessStrategy; -import org.hibernate.property.access.spi.PropertyAccessStrategyResolver; -import org.hibernate.property.access.spi.Setter; -import org.hibernate.service.ServiceRegistry; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class ReflectionTools { - private static final Map, Getter> GETTER_CACHE = new ConcurrentReferenceHashMap<>( - 10, - ConcurrentReferenceHashMap.ReferenceType.SOFT, - ConcurrentReferenceHashMap.ReferenceType.SOFT - ); - private static final Map, Setter> SETTER_CACHE = new ConcurrentReferenceHashMap<>( - 10, - ConcurrentReferenceHashMap.ReferenceType.SOFT, - ConcurrentReferenceHashMap.ReferenceType.SOFT - ); - - private static PropertyAccessStrategy getAccessStrategy(Class cls, ServiceRegistry serviceRegistry, String accessorType) { - return serviceRegistry.getService( PropertyAccessStrategyResolver.class ) - .resolvePropertyAccessStrategy( cls, accessorType, null ); - } - - public static Getter getGetter(Class cls, PropertyData propertyData, ServiceRegistry serviceRegistry) { - if ( propertyData.getPropertyAccessStrategy() == null ) { - return getGetter( cls, propertyData.getBeanName(), propertyData.getAccessType(), serviceRegistry ); - } - else { - final String propertyName = propertyData.getName(); - final Pair key = Pair.make( cls, propertyName ); - Getter value = GETTER_CACHE.get( key ); - if ( value == null ) { - value = propertyData.getPropertyAccessStrategy().buildPropertyAccess( - cls, - propertyData.getBeanName(), false - ).getGetter(); - // It's ok if two getters are generated concurrently - GETTER_CACHE.put( key, value ); - } - return value; - } - } - - public static Getter getGetter(Class cls, String propertyName, String accessorType, ServiceRegistry serviceRegistry) { - final Pair key = Pair.make( cls, propertyName ); - Getter value = GETTER_CACHE.get( key ); - if ( value == null ) { - value = getAccessStrategy( cls, serviceRegistry, accessorType ).buildPropertyAccess( cls, propertyName, true ).getGetter(); - // It's ok if two getters are generated concurrently - GETTER_CACHE.put( key, value ); - } - - return value; - } - - public static Setter getSetter(Class cls, PropertyData propertyData, ServiceRegistry serviceRegistry) { - return getSetter( cls, propertyData.getBeanName(), propertyData.getAccessType(), serviceRegistry ); - } - - public static Setter getSetter(Class cls, String propertyName, String accessorType, ServiceRegistry serviceRegistry) { - final Pair key = Pair.make( cls, propertyName ); - Setter value = SETTER_CACHE.get( key ); - if ( value == null ) { - value = getAccessStrategy( cls, serviceRegistry, accessorType ).buildPropertyAccess( cls, propertyName, true ).getSetter(); - // It's ok if two setters are generated concurrently - SETTER_CACHE.put( key, value ); - } - - return value; - } - - public static Field getField(Class cls, PropertyData propertyData) { - Field field = null; - Class clazz = cls; - while ( clazz != null && field == null ) { - try { - field = clazz.getDeclaredField( propertyData.getName() ); - } - catch ( Exception e ) { - // ignore - } - clazz = clazz.getSuperclass(); - } - return field; - } - - public static Class getType(Class cls, PropertyData propertyData, ServiceRegistry serviceRegistry) { - final Setter setter = getSetter( cls, propertyData, serviceRegistry ); - if ( setter.getMethod() != null && setter.getMethod().getParameterCount() > 0 ) { - return setter.getMethod().getParameterTypes()[0]; - } - - final Field field = getField( cls, propertyData ); - if ( field != null ) { - return field.getType(); - } - - throw new AuditException( - String.format( - Locale.ROOT, - "Failed to determine type for field [%s] on class [%s].", - propertyData.getName(), - cls.getName() - ) - ); - } - - /** - * Locate class with a given name. - * - * @param name Fully qualified class name. - * @param classLoaderService Class loading service. Passing {@code null} is "allowed", but will result in - * TCCL usage. - * - * @return The cass reference. - * - * @throws ClassLoadingException Indicates the class could not be found. - */ - @SuppressWarnings("unchecked") - public static Class loadClass(String name, ClassLoaderService classLoaderService) - throws ClassLoadingException { - try { - if ( classLoaderService != null ) { - return classLoaderService.classForName( name ); - } - else { - return (Class) Thread.currentThread().getContextClassLoader().loadClass( name ); - } - } - catch (Exception e) { - throw new ClassLoadingException( "Unable to load class [" + name + "]", e ); - } - } - - public static void reset() { - SETTER_CACHE.clear(); - GETTER_CACHE.clear(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/StringTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/StringTools.java deleted file mode 100644 index f9cd6e11d9c2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/StringTools.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import java.util.Iterator; -import java.util.Locale; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Zuchowski (author at zuchos dot com) - */ -public abstract class StringTools { - public static boolean isEmpty(String s) { - return s == null || s.isEmpty(); - } - - public static boolean isEmpty(Object o) { - return o == null || "".equals( o ); - } - - /** - * @param s String, from which to get the last component. - * - * @return The last component of the dot-separated string s. For example, for a string - * "a.b.c", the result is "c". - */ - public static String getLastComponent(String s) { - if ( s == null ) { - return null; - } - final int lastDot = s.lastIndexOf( '.' ); - if ( lastDot == -1 ) { - return s; - } - else { - return s.substring( lastDot + 1 ); - } - } - - /** - * To the given string builder, appends all strings in the given iterator, separating them with the given - * separator. For example, for an interator "a" "b" "c" and separator ":" the output is "a:b:c". - * - * @param sb String builder, to which to append. - * @param contents Strings to be appended. - * @param separator Separator between subsequent content. - */ - public static void append(StringBuilder sb, Iterator contents, String separator) { - boolean isFirst = true; - while ( contents.hasNext() ) { - if ( !isFirst ) { - sb.append( separator ); - } - sb.append( contents.next() ); - isFirst = false; - } - } - - /** - * Capitalizes first letter of the string - * - * @param fieldName field name - * - * @return capitalized string - */ - public static String capitalizeFirst(String fieldName) { - return fieldName.substring( 0, 1 ).toUpperCase( Locale.ROOT ) + fieldName.substring( 1 ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/Tools.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/Tools.java deleted file mode 100644 index aa4897fd4602..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/Tools.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.envers.tools.Pair; - -/** - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public abstract class Tools { - public static Map newHashMap() { - return new HashMap<>(); - } - - public static Set newHashSet() { - return new HashSet<>(); - } - - public static Map newLinkedHashMap() { - return new LinkedHashMap<>(); - } - - public static List iteratorToList(Iterator iter) { - final List ret = new ArrayList<>(); - while ( iter.hasNext() ) { - ret.add( iter.next() ); - } - - return ret; - } - - public static List collectionToList(Collection collection) { - if ( collection instanceof List ) { - return (List) collection; - } - else { - return new ArrayList<>( collection ); - } - } - - /** - * Transforms a list of arbitrary elements to a list of index-element pairs. - * - * @param list List to transform. - * - * @return A list of pairs: ((0, element_at_index_0), (1, element_at_index_1), ...) - */ - public static List> listToIndexElementPairList(List list) { - final List> ret = new ArrayList<>(); - final Iterator listIter = list.iterator(); - for ( int i = 0; i < list.size(); i++ ) { - ret.add( Pair.make( i, listIter.next() ) ); - } - - return ret; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/Triple.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/Triple.java deleted file mode 100644 index eab4453e4692..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/Triple.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools; - -import java.util.Objects; - -/** - * A triple of objects. - * - * @param - * @param - * @param - * - * @author Adam Warski (adamw@aster.pl) - */ -public class Triple { - private T1 obj1; - private T2 obj2; - private T3 obj3; - - public Triple(T1 obj1, T2 obj2, T3 obj3) { - this.obj1 = obj1; - this.obj2 = obj2; - this.obj3 = obj3; - } - - public T1 getFirst() { - return obj1; - } - - public T2 getSecond() { - return obj2; - } - - public T3 getThird() { - return obj3; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Triple) ) { - return false; - } - - final Triple other = (Triple) o; - return Objects.equals( obj1, other.obj1 ) - && Objects.equals( obj2, other.obj2 ) - && Objects.equals( obj3, other.obj3 ); - } - - @Override - public int hashCode() { - int result; - result = (obj1 != null ? obj1.hashCode() : 0); - result = 31 * result + (obj2 != null ? obj2.hashCode() : 0); - result = 31 * result + (obj3 != null ? obj3.hashCode() : 0); - return result; - } - - public static Triple make(T1 obj1, T2 obj2, T3 obj3) { - return new Triple<>( obj1, obj2, obj3 ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/GraphDefiner.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/GraphDefiner.java deleted file mode 100644 index 1d7946ebe81c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/GraphDefiner.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.graph; - -import java.util.List; - -/** - * Defines a graph, where each vertex has a representation, which identifies uniquely a value. - * Representations are comparable, values - not. - * - * @author Adam Warski (adam at warski dot org) - */ -public interface GraphDefiner { - R getRepresentation(V v); - - V getValue(R r); - - List getNeighbours(V v); - - List getValues(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/GraphTopologicalSort.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/GraphTopologicalSort.java deleted file mode 100644 index ee9cb743717a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/GraphTopologicalSort.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.graph; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public final class GraphTopologicalSort { - private GraphTopologicalSort() { - } - - /** - * Sorts a graph topologically. - * - * @param definer Defines a graph (values and representations) to sort. - * - * @return Values of the graph, sorted topologically. - */ - public static List sort(GraphDefiner definer) { - final List values = definer.getValues(); - final Map> vertices = new HashMap<>(); - - // Creating a vertex for each representation - for ( V v : values ) { - final R rep = definer.getRepresentation( v ); - vertices.put( rep, new Vertex<>( rep ) ); - } - - // Connecting neighbourhooding vertices - for ( V v : values ) { - for ( V vn : definer.getNeighbours( v ) ) { - vertices.get( definer.getRepresentation( v ) ) - .addNeighbour( vertices.get( definer.getRepresentation( vn ) ) ); - } - } - - // Sorting the representations - final List sortedReps = new TopologicalSort().sort( vertices.values() ); - - // Transforming the sorted representations to sorted values - final List sortedValues = new ArrayList<>( sortedReps.size() ); - for ( R rep : sortedReps ) { - sortedValues.add( definer.getValue( rep ) ); - } - - return sortedValues; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/TopologicalSort.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/TopologicalSort.java deleted file mode 100644 index 7687bd6b7fad..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/TopologicalSort.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.graph; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -/** - * Topological sorting of a graph - based on DFS. - * - * @author Adam Warski (adam at warski dot org) - */ -public class TopologicalSort { - private List sorted; - private int time; - - private void process(Vertex v) { - if ( v.getStartTime() != 0 ) { - // alread processed - return; - } - - v.setStartTime( time++ ); - - for ( Vertex n : v.getNeighbours() ) { - process( n ); - } - - v.setEndTime( time++ ); - - sorted.add( v.getRepresentation() ); - } - - public List sort(Collection> vertices) { - sorted = new ArrayList<>( vertices.size() ); - - time = 1; - - for ( Vertex v : vertices ) { - if ( v.getEndTime() == 0 ) { - process( v ); - } - } - - Collections.reverse( sorted ); - - return sorted; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/Vertex.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/Vertex.java deleted file mode 100644 index 85591dea64f5..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/graph/Vertex.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.graph; - -import java.util.ArrayList; -import java.util.List; - -/** - * A graph vertex - stores its representation, neighbours, start and end time in (D|B)FS. - * - * @author Adam Warski (adam at warski dot org) - */ -public class Vertex { - private final R representation; - private final List> neighbours; - - private int startTime; - private int endTime; - - public Vertex(R representation) { - this.representation = representation; - this.neighbours = new ArrayList<>(); - this.startTime = 0; - this.endTime = 0; - } - - public R getRepresentation() { - return representation; - } - - public List> getNeighbours() { - return neighbours; - } - - public void addNeighbour(Vertex n) { - neighbours.add( n ); - } - - public int getStartTime() { - return startTime; - } - - public void setStartTime(int startTime) { - this.startTime = startTime; - } - - public int getEndTime() { - return endTime; - } - - public void setEndTime(int endTime) { - this.endTime = endTime; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/Parameters.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/Parameters.java deleted file mode 100644 index 5a38f6031998..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/Parameters.java +++ /dev/null @@ -1,527 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.query; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.tools.MutableBoolean; -import org.hibernate.envers.internal.tools.MutableInteger; -import org.hibernate.envers.query.criteria.AuditFunction; - -/** - * Parameters of a query, built using {@link QueryBuilder}. - * - * @author Adam Warski (adam at warski dot org) - */ -public class Parameters { - public static final String AND = "and"; - public static final String OR = "or"; - - /** - * Main alias of the entity. - */ - private final String alias; - /** - * Connective between these parameters - "and" or "or". - */ - private final String connective; - /** - * For use by the parameter generator. Must be the same in all "child" (and parent) parameters. - */ - private final MutableInteger queryParamCounter; - - /** - * A list of sub-parameters (parameters with a different connective). - */ - private final List subParameters; - /** - * A list of negated parameters. - */ - private final List negatedParameters; - /** - * A list of complete where-expressions. - */ - private final List expressions; - /** - * Values of parameters used in expressions. - */ - private final Map localQueryParamValues; - - Parameters(String alias, String connective, MutableInteger queryParamCounter) { - this.alias = alias; - this.connective = connective; - this.queryParamCounter = queryParamCounter; - - subParameters = new ArrayList<>(); - negatedParameters = new ArrayList<>(); - expressions = new ArrayList<>(); - localQueryParamValues = new HashMap<>(); - } - - // Only for deep copy purpose. - private Parameters(Parameters other) { - this.alias = other.alias; - this.connective = other.connective; - this.queryParamCounter = other.queryParamCounter.deepCopy(); - - subParameters = new ArrayList<>( other.subParameters.size() ); - for ( Parameters p : other.subParameters ) { - subParameters.add( p.deepCopy() ); - } - negatedParameters = new ArrayList<>( other.negatedParameters.size() ); - for ( Parameters p : other.negatedParameters ) { - negatedParameters.add( p.deepCopy() ); - } - expressions = new ArrayList<>( other.expressions ); - localQueryParamValues = new HashMap<>( other.localQueryParamValues ); - } - - public Parameters deepCopy() { - return new Parameters( this ); - } - - private String generateQueryParam() { - return "_p" + queryParamCounter.getAndIncrease(); - } - - /** - * Adds sub-parameters with a new connective. That is, the parameters will be grouped in parentheses in the - * generated query, e.g.: ... and (exp1 or exp2) and ..., assuming the old connective is "and", and the - * new connective is "or". - * - * @param newConnective New connective of the parameters. - * - * @return Sub-parameters with the given connective. - */ - public Parameters addSubParameters(String newConnective) { - if ( connective.equals( newConnective ) ) { - return this; - } - else { - final Parameters newParams = new Parameters( alias, newConnective, queryParamCounter ); - subParameters.add( newParams ); - return newParams; - } - } - - /** - * Adds negated parameters, by default with the "and" connective. These paremeters will be grouped in parentheses - * in the generated query and negated, e.g. ... not (exp1 and exp2) ... - * - * @return Negated sub paremters. - */ - public Parameters addNegatedParameters() { - final Parameters newParams = new Parameters( alias, AND, queryParamCounter ); - negatedParameters.add( newParams ); - return newParams; - } - - /** - * Adds IS NULL restriction. - * - * @param propertyName Property name. - * @param addAlias Positive if an alias to property name shall be added. - */ - public void addNullRestriction(String propertyName, boolean addAlias) { - addWhere( propertyName, addAlias, "is", "null", false ); - } - - /** - * Adds IS NULL restriction. - * - * @param alias the alias which should be added to the property name. - * @param propertyName Property name. - */ - public void addNullRestriction(String alias, String propertyName) { - addWhere( alias, propertyName, "is", null, "null" ); - } - - /** - * Adds IS NOT NULL restriction. - * - * @param propertyName Property name. - * @param addAlias Positive if an alias to property name shall be added. - */ - public void addNotNullRestriction(String propertyName, boolean addAlias) { - addWhere( propertyName, addAlias, "is not", "null", false ); - } - - /** - * Adds IS NOT NULL restriction. - * - * @param alias the alias which should be added to the property name. - * @param propertyName Property name. - */ - public void addNotNullRestriction(String alias, String propertyName) { - addWhere( alias, propertyName, "is not", null, "null" ); - } - - public void addWhere(String left, boolean addAliasLeft, String op, String right, boolean addAliasRight) { - addWhere( - addAliasLeft ? alias : null, - left, - op, - addAliasRight ? alias : null, - right - ); - } - - public void addWhere(String aliasLeft, String left, String op, String aliasRight, String right) { - final StringBuilder expression = new StringBuilder(); - - if ( aliasLeft != null ) { - expression.append( aliasLeft ).append( "." ); - } - expression.append( left ); - - expression.append( " " ).append( op ).append( " " ); - - if ( aliasRight != null ) { - expression.append( aliasRight ).append( "." ); - } - expression.append( right ); - - expressions.add( expression.toString() ); - } - - public void addWhereWithFunction(String alias, String left, String leftFunction, String op, Object paramValue){ - final String paramName = generateQueryParam(); - localQueryParamValues.put( paramName, paramValue ); - - final StringBuilder expression = new StringBuilder(); - - expression.append( leftFunction ).append( "(" ); - expression.append( alias ).append( "." ); - expression.append( left ).append( ")" ); - expression.append( " " ).append( op ).append( " " ); - expression.append( ":" ).append( paramName ); - - expressions.add( expression.toString() ); - } - - public void addWhereWithParam(String left, String op, Object paramValue) { - addWhereWithParam( left, true, op, paramValue ); - } - - public void addWhereWithParam(String alias, String left, String op, Object paramValue ) { - String effectiveLeft = alias.concat( "." ).concat( left ); - addWhereWithParam( effectiveLeft, false, op, paramValue ); - } - - public void addWhereWithParam(String left, boolean addAlias, String op, Object paramValue) { - final String paramName = generateQueryParam(); - localQueryParamValues.put( paramName, paramValue ); - - addWhereWithNamedParam( left, addAlias, op, paramName ); - } - - public void addWhereWithNamedParam(String left, String op, String paramName) { - addWhereWithNamedParam( left, true, op, paramName ); - } - - public void addWhereWithNamedParam(String left, boolean addAlias, String op, String paramName) { - final StringBuilder expression = new StringBuilder(); - - if ( addAlias ) { - expression.append( alias ).append( "." ); - } - expression.append( left ); - expression.append( " " ).append( op ).append( " " ); - expression.append( ":" ).append( paramName ); - - expressions.add( expression.toString() ); - } - - public void addWhereWithParams(String alias, String left, String opStart, Object[] paramValues, String opEnd) { - final StringBuilder expression = new StringBuilder(); - - expression.append( alias ).append( "." ).append( left ).append( " " ).append( opStart ); - - for ( int i = 0; i < paramValues.length; i++ ) { - final Object paramValue = paramValues[i]; - final String paramName = generateQueryParam(); - localQueryParamValues.put( paramName, paramValue ); - expression.append( ":" ).append( paramName ); - - if ( i != paramValues.length - 1 ) { - expression.append( ", " ); - } - } - - expression.append( opEnd ); - - expressions.add( expression.toString() ); - } - - public void addWhere(String left, boolean addAlias, String op, QueryBuilder right) { - addWhere( - addAlias ? alias : null, - left, - op, - right - ); - } - - public void addWhere( String leftAlias, String left, String op, QueryBuilder right) { - final StringBuilder expression = new StringBuilder(); - - if ( leftAlias != null ) { - expression.append( leftAlias ).append( "." ); - } - - expression.append( left ); - - expression.append( " " ).append( op ).append( " " ); - - expression.append( "(" ); - right.build( expression, localQueryParamValues ); - expression.append( ")" ); - - expressions.add( expression.toString() ); - } - - /** - * Add where clause with a null restriction: (left = right or (left is null and right is null)) - * - * @param left Left property name. - * @param addAliasLeft Whether to add the alias to the left property. - * @param op The operator. - * @param right Right property name. - * @param addAliasRight Whether to add the alias to the right property. - */ - public void addWhereOrNullRestriction(String left, boolean addAliasLeft, String op, String right, boolean addAliasRight) { - if ( "=".equals( op ) ) { - addWhere( left, addAliasLeft, " is not distinct from ", right, addAliasRight ); - } - else { - // apply the normal addWhere predicate - final Parameters sub1 = addSubParameters( "or" ); - sub1.addWhere( left, addAliasLeft, op, right, addAliasRight ); - - // apply the is null predicate for both join properties - final Parameters sub2 = sub1.addSubParameters( "and" ); - sub2.addNullRestriction( left, false ); - sub2.addNullRestriction( right, false ); - } - } - - /** - * Add where clause with a function call on the left and a scalar value on the right. - * - * @param configuration the configuration. - * @param aliasToEntityNameMap alias to entity name map, never {@literal null} - * @param aliasToComponentPropertyNameMap alias to component property name map, never {@literal null} - * @param function the function. - * @param op the operator. - * @param value the scalar value. - */ - public void addWhereWithFunction( - Configuration configuration, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - AuditFunction function, - String op, - Object value) { - final StringBuilder expression = new StringBuilder(); - - QueryBuilder.appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - queryParamCounter, - localQueryParamValues, - alias, - expression, - function - ); - - expression.append( ' ' ).append( op ); - - String queryParam = generateQueryParam(); - localQueryParamValues.put( queryParam, value ); - expression.append( ' ' ).append( ':' ).append( queryParam ); - - expressions.add( expression.toString() ); - } - - /** - * Add a where clause with a function call on the left and an optionally aliased property on the right. - * - * @param configuration the configuration. - * @param aliasToEntityNameMap alias to entity name map, never {@literal null} - * @param aliasToComponentPropertyNameMap alias to component property name map, never {@literal null} - * @param function the function. - * @param op the operator. - * @param aliasRight the optional alias of the right property, may be {@literal null} - * @param right the property. - */ - public void addWhereWithFunction( - Configuration configuration, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - AuditFunction function, - String op, - String aliasRight, - String right) { - final StringBuilder expression = new StringBuilder(); - - QueryBuilder.appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - queryParamCounter, - localQueryParamValues, - alias, - expression, - function - ); - - expression.append( ' ' ).append( op ).append( ' ' ); - - if ( aliasRight != null ) { - expression.append( aliasRight ).append( '.' ); - } - expression.append( right ); - - expressions.add( expression.toString() ); - } - - /** - * Adds a where clause with a left (optionally aliased) property and a function call on the right side. - * - * @param configuration the configuration. - * @param aliasToEntityNameMap alias to entity name map, never {@literal null} - * @param aliasToComponentPropertyNameMap alias to component property name map, never {@literal null} - * @param aliasLeft the optional alias of the left property, may be {@literal null} - * @param left the property. - * @param op the operator. - * @param function the function. - */ - public void addWhereWithFunction( - Configuration configuration, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String aliasLeft, - String left, - String op, - AuditFunction function) { - final StringBuilder expression = new StringBuilder(); - - if ( aliasLeft != null ) { - expression.append( aliasLeft ).append( '.' ); - } - expression.append( left ); - - expression.append( ' ' ).append( op ).append( ' ' ); - - QueryBuilder.appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - queryParamCounter, - localQueryParamValues, - alias, - expression, - function - ); - - expressions.add( expression.toString() ); - } - - /** - * Adds a where clause with a function call on both the left and right of the predicate. - * - * @param configuration the configuration. - * @param aliasToEntityNameMap alias to entity name map, never {@literal null} - * @param aliasToComponentPropertyNameMap alias to component property name map, never {@literal null} - * @param left the left-side function. - * @param op the operator. - * @param right the right-side function. - */ - public void addWhereWithFunction( - Configuration configuration, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - AuditFunction left, - String op, - AuditFunction right) { - final StringBuilder expression = new StringBuilder(); - - QueryBuilder.appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - queryParamCounter, - localQueryParamValues, - alias, - expression, - left - ); - - expression.append( ' ' ).append( op ).append( ' ' ); - - QueryBuilder.appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - queryParamCounter, - localQueryParamValues, - alias, - expression, - right - ); - - expressions.add( expression.toString() ); - } - - public void addEntityTypeRestriction(String alias, String entityName) { - String expression = String.format( "type(%s) = %s", alias, entityName ); - expressions.add( expression ); - } - - private void append(StringBuilder sb, String toAppend, MutableBoolean isFirst) { - if ( !isFirst.isSet() ) { - sb.append( " " ).append( connective ).append( " " ); - } - - sb.append( toAppend ); - - isFirst.unset(); - } - - boolean isEmpty() { - return expressions.size() == 0 && subParameters.size() == 0 && negatedParameters.size() == 0; - } - - void build(StringBuilder sb, Map queryParamValues) { - final MutableBoolean isFirst = new MutableBoolean( true ); - - for ( String expression : expressions ) { - append( sb, expression, isFirst ); - } - - for ( Parameters sub : subParameters ) { - if ( !subParameters.isEmpty() ) { - append( sb, "(", isFirst ); - sub.build( sb, queryParamValues ); - sb.append( ")" ); - } - } - - for ( Parameters negated : negatedParameters ) { - if ( !negatedParameters.isEmpty() ) { - append( sb, "not (", isFirst ); - negated.build( sb, queryParamValues ); - sb.append( ")" ); - } - } - - queryParamValues.putAll( localQueryParamValues ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/QueryBuilder.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/QueryBuilder.java deleted file mode 100644 index 50d16363d85e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/QueryBuilder.java +++ /dev/null @@ -1,523 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.query; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.HibernateException; -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.function.OrderByFragmentFunction; -import org.hibernate.envers.internal.entities.RevisionTypeType; -import org.hibernate.envers.internal.entities.mapper.id.QueryParameterData; -import org.hibernate.envers.internal.tools.MutableInteger; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.envers.query.criteria.AuditFunction; -import org.hibernate.envers.query.criteria.AuditId; -import org.hibernate.envers.query.criteria.AuditProperty; -import org.hibernate.envers.query.criteria.internal.CriteriaTools; -import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.envers.tools.Pair; -import org.hibernate.internal.util.QuotingHelper; -import org.hibernate.query.Query; -import org.hibernate.type.BasicType; - -/** - * A class for incrementally building a HQL query. - * - * @author Adam Warski (adam at warski dot org) - */ -public class QueryBuilder { - private final String entityName; - private final String alias; - - /** - * For use by alias generator (in case an alias is not provided by the user). - */ - private final MutableInteger aliasCounter; - /** - * For use by parameter generator, in {@link Parameters}. This counter must be - * the same in all parameters and sub-queries of this query. - */ - private final MutableInteger paramCounter; - /** - * "where" parameters for this query. Each parameter element of the list for one alias from the "from" part. - */ - private final List parameters = new ArrayList<>(); - - /** - * A list of triples (from entity name, alias name, whether to select the entity). - */ - private final List froms; - /** - * A list of order by clauses. - */ - private final List orders; - /** - * A list of complete projection definitions: either a sole property name, or a function(property name). - */ - private final List projections; - /** - * Values of parameters used in projections. - */ - private final Map projectionQueryParamValues; - - private final List> orderFragments; - - private final SessionFactoryImplementor sessionFactory; - - private final BasicType revisionType; - - /** - * @param entityName Main entity which should be selected. - * @param alias Alias of the entity - * @param sessionFactory Session factory - */ - public QueryBuilder(String entityName, String alias, SessionFactoryImplementor sessionFactory) { - this( entityName, alias, new MutableInteger(), new MutableInteger(), sessionFactory ); - } - - private QueryBuilder( - String entityName, - String alias, - MutableInteger aliasCounter, - MutableInteger paramCounter, - SessionFactoryImplementor sessionFactory) { - this.entityName = entityName; - this.alias = alias; - this.aliasCounter = aliasCounter; - this.paramCounter = paramCounter; - this.sessionFactory = sessionFactory; - - this.revisionType = sessionFactory.getTypeConfiguration() - .getBasicTypeRegistry() - .getRegisteredType( RevisionTypeType.class ); - - final Parameters rootParameters = new Parameters( alias, "and", paramCounter ); - parameters.add( rootParameters ); - - froms = new ArrayList<>(); - orders = new ArrayList<>(); - projections = new ArrayList<>(); - projectionQueryParamValues = new HashMap<>(); - orderFragments = new ArrayList<>(); - - addFrom( entityName, alias, true ); - } - - // Only for deep copy purpose. - private QueryBuilder(QueryBuilder other) { - this.entityName = other.entityName; - this.alias = other.alias; - this.sessionFactory = other.sessionFactory; - this.revisionType = other.revisionType; - this.aliasCounter = other.aliasCounter.deepCopy(); - this.paramCounter = other.paramCounter.deepCopy(); - for (final Parameters params : other.parameters) { - this.parameters.add( params.deepCopy() ); - } - - froms = new ArrayList<>( other.froms ); - orders = new ArrayList<>( other.orders ); - projections = new ArrayList<>( other.projections ); - projectionQueryParamValues = new HashMap<>( other.projectionQueryParamValues ); - orderFragments = new ArrayList<>( other.orderFragments ); - } - - public QueryBuilder deepCopy() { - return new QueryBuilder( this ); - } - - /** - * @return the main alias of this query builder - */ - public String getAlias() { - return alias; - } - - /** - * Add an entity from which to select. - * - * @param entityName Name of the entity from which to select. - * @param alias Alias of the entity. Should be different than all other aliases. - * @param select whether the entity should be selected - */ - public void addFrom(String entityName, String alias, boolean select) { - CrossJoinParameter joinParameter = new CrossJoinParameter( entityName, alias, select ); - froms.add( joinParameter ); - } - - public Parameters addJoin(JoinType joinType, String entityName, String alias, boolean select) { - Parameters joinConditionParameters = new Parameters( alias, Parameters.AND, paramCounter ); - InnerOuterJoinParameter joinParameter = new InnerOuterJoinParameter( - joinType, - entityName, - alias, - select, - joinConditionParameters - ); - froms.add( joinParameter ); - return joinConditionParameters; - } - - public String generateAlias() { - return "_e" + aliasCounter.getAndIncrease(); - } - - /** - * @param entityName Entity name, which will be the main entity for the sub-query. - * @param alias Alias of the entity, which can later be used in parameters. - * - * @return A sub-query builder for the given entity, with the given alias. The sub-query can - * be later used as a value of a parameter. - */ - public QueryBuilder newSubQueryBuilder(String entityName, String alias) { - return new QueryBuilder( entityName, alias, aliasCounter, paramCounter, sessionFactory ); - } - - public Parameters getRootParameters() { - return parameters.get( 0 ); - } - - public Parameters addParameters(final String alias) { - final Parameters result = new Parameters( alias, Parameters.AND, paramCounter); - parameters.add( result ); - return result; - } - - public void addOrder(String alias, String propertyName, boolean ascending, NullPrecedence nullPrecedence) { - orders.add( new OrderByClause( alias, propertyName, ascending, nullPrecedence ) ); - } - - public void addOrderFragment(String alias, String orderByCollectionRole) { - orderFragments.add( Pair.make( alias, orderByCollectionRole ) ); - } - - public void addProjection(String function, String alias, String propertyName, boolean distinct) { - final String effectivePropertyName = propertyName == null ? "" : ".".concat( propertyName ); - if ( function == null ) { - projections.add( (distinct ? "distinct " : "") + alias + effectivePropertyName ); - } - else { - projections.add( - function + "(" + (distinct ? "distinct " : "") + alias + - effectivePropertyName + ")" - ); - } - } - - public void addProjection( - Configuration configuration, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - AuditFunction function) { - final StringBuilder expression = new StringBuilder(); - appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - paramCounter, - projectionQueryParamValues, - alias, - expression, - function - ); - projections.add( expression.toString() ); - } - - protected static void appendFunctionArgument( - Configuration configuration, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - MutableInteger paramCounter, - Map queryParamValues, - String alias, - StringBuilder expression, - Object argument) { - if ( argument instanceof AuditFunction ) { - AuditFunction function = (AuditFunction) argument; - expression.append( function.getFunction() ).append( '(' ); - boolean first = true; - for ( final Object innerArg : function.getArguments() ) { - if ( !first ) { - expression.append( ',' ); - } - appendFunctionArgument( - configuration, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - paramCounter, - queryParamValues, - alias, - expression, - innerArg - ); - first = false; - } - expression.append( ')' ); - } - else if ( argument instanceof AuditId ) { - AuditId id = (AuditId) argument; - String prefix = configuration.getOriginalIdPropertyName(); - String idAlias = id.getAlias( alias ); - String entityName = aliasToEntityNameMap.get( idAlias ); - /* - * Resolve the name of the id property by reusing the IdMapper.mapToQueryParametersFromId() method. Null is - * passed as value because only the name of the property is of interest. TODO: is there a better way to - * obtain the name of the id property? - */ - EnversService enversService = configuration.getEnversService(); - List parameters = enversService.getEntitiesConfigurations().get( entityName ) - .getIdMapper() - .mapToQueryParametersFromId( null ); - if ( parameters.size() != 1 ) { - throw new HibernateException( "Cannot add id property as function argument when id property is not a single column property" ); - } - String propertyName = parameters.get( 0 ).getProperty( prefix ); - if ( idAlias != null ) { - expression.append( idAlias ).append( '.' ); - } - expression.append( propertyName ); - } - else if ( argument instanceof AuditProperty ) { - AuditProperty property = (AuditProperty) argument; - String propertyAlias = property.getAlias( alias ); - if ( propertyAlias != null ) { - expression.append( propertyAlias ).append( '.' ); - } - String propertyPrefix = CriteriaTools.determineComponentPropertyPrefix( - configuration.getEnversService(), - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - propertyAlias - ); - String propertyName = property.getPropertyNameGetter().get( configuration ); - expression.append( propertyPrefix.concat( propertyName ) ); - } - else { - String queryParam = "_p" + paramCounter.getAndIncrease(); - queryParamValues.put( queryParam, argument ); - expression.append( ':' ).append( queryParam ); - } - } - - /** - * Builds the given query, appending results to the given string buffer, and adding all query parameter values - * that are used to the map provided. - * - * @param sb String builder to which the query will be appended. - * @param queryParamValues Map to which name and values of parameters used in the query should be added. - */ - public void build(StringBuilder sb, Map queryParamValues) { - sb.append( "select " ); - if ( projections.size() > 0 ) { - // all projections separated with commas - StringTools.append( sb, projections.iterator(), ", " ); - } - else { - // all aliases separated with commas - StringTools.append( sb, getSelectAliasList().iterator(), ", " ); - } - queryParamValues.putAll( projectionQueryParamValues ); - sb.append( " from " ); - // all from entities with aliases - boolean first = true; - for (final JoinParameter joinParameter : froms) { - joinParameter.appendJoin( first, sb, queryParamValues ); - first = false; - } - // where part - rootParameters - first = true; - for (final Parameters params : parameters) { - if (!params.isEmpty()) { - if (first) { - sb.append( " where " ); - first = false; - } - else { - sb.append( " and " ); - } - params.build( sb, queryParamValues ); - } - } - // orders - if ( !orders.isEmpty() ) { - sb.append( " order by " ); - StringTools.append( sb, getOrderList().iterator(), ", " ); - } - else if ( !orderFragments.isEmpty() ) { - sb.append( " order by " ); - - final Iterator> fragmentIterator = orderFragments.iterator(); - while( fragmentIterator.hasNext() ) { - final Pair fragment = fragmentIterator.next(); - sb.append( OrderByFragmentFunction.FUNCTION_NAME ).append( '(' ); - // The first argument is the sqm alias of the from node - QuotingHelper.appendSingleQuoteEscapedString( sb, fragment.getFirst() ); - sb.append( ", " ); - // The second argument is the collection role that contains the order by fragment - QuotingHelper.appendSingleQuoteEscapedString( sb, fragment.getSecond() ); - sb.append( ')' ); - if ( fragmentIterator.hasNext() ) { - sb.append( ", " ); - } - } - } - } - - private List getSelectAliasList() { - final List aliasList = new ArrayList<>(); - for ( JoinParameter from : froms ) { - if ( from.isSelect() ) { - aliasList.add( from.getAlias() ); - } - } - - return aliasList; - } - - public String getRootAlias() { - return alias; - } - - private List getOrderList() { - final List orderList = new ArrayList<>(); - for ( OrderByClause orderByClause : orders ) { - orderList.add( orderByClause.renderToHql() ); - } - return orderList; - } - - public Query toQuery(Session session) { - final StringBuilder querySb = new StringBuilder(); - final Map queryParamValues = new HashMap<>(); - - build( querySb, queryParamValues ); - - final Query query = session.createQuery( querySb.toString() ); - for ( Map.Entry paramValue : queryParamValues.entrySet() ) { - if ( paramValue.getValue() instanceof RevisionType ) { - // this is needed when the ClassicQueryTranslatorFactory is used - query.setParameter( paramValue.getKey(), paramValue.getValue(), revisionType ); - } - else { - query.setParameter( paramValue.getKey(), paramValue.getValue() ); - } - } - return query; - } - - private abstract static class JoinParameter { - - private final String alias; - private final boolean select; - - protected JoinParameter(String alias, boolean select) { - this.alias = alias; - this.select = select; - } - - public String getAlias() { - return alias; - } - - public boolean isSelect() { - return select; - } - - public abstract void appendJoin(boolean firstFromElement, StringBuilder builder, Map queryParamValues); - - } - - private static class CrossJoinParameter extends JoinParameter { - - private final String entityName; - - public CrossJoinParameter(String entityName, String alias, boolean select) { - super( alias, select ); - this.entityName = entityName; - } - - @Override - public void appendJoin(boolean firstFromElement, StringBuilder builder, Map queryParamValues) { - if ( !firstFromElement ) { - builder.append( ", " ); - } - builder.append( entityName ).append( ' ' ).append( getAlias() ); - } - - } - - private static class InnerOuterJoinParameter extends JoinParameter { - - private final JoinType joinType; - private final String entityName; - private final Parameters joinConditionParameters; - - public InnerOuterJoinParameter( - JoinType joinType, - String entityName, - String alias, - boolean select, - Parameters joinConditionParameters) { - super(alias, select); - this.joinType = joinType; - this.entityName = entityName; - this.joinConditionParameters = joinConditionParameters; - } - - @Override - public void appendJoin(boolean firstFromElement, StringBuilder builder, Map queryParamValues) { - if (firstFromElement) { - throw new IllegalArgumentException( "An inner/outer join cannot come as first 'from element'" ); - } - builder.append( ' ' ).append( joinType.name() - .toLowerCase( Locale.US ) ).append( " join " ) - .append( entityName ).append( ' ' ) - .append( getAlias() ).append( " on " ); - joinConditionParameters.build( builder, queryParamValues ); - } - - } - - private static class OrderByClause { - private String alias; - private String propertyName; - private boolean ascending; - private NullPrecedence nullPrecedence; - - public OrderByClause(String alias, String propertyName, boolean ascending, NullPrecedence nullPrecedence) { - this.alias = alias; - this.propertyName = propertyName; - this.ascending = ascending; - this.nullPrecedence = nullPrecedence; - } - - public String renderToHql() { - StringBuilder hql = new StringBuilder(); - hql.append( alias ).append( "." ).append( propertyName ).append( " " ); - hql.append( ascending ? "asc" : "desc" ); - if ( nullPrecedence != null ) { - if ( NullPrecedence.FIRST.equals( nullPrecedence ) ) { - hql.append( " nulls first" ); - } - else { - hql.append( " nulls last" ); - } - } - return hql.toString(); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/UpdateBuilder.java b/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/UpdateBuilder.java deleted file mode 100644 index f27581ab8580..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/internal/tools/query/UpdateBuilder.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.internal.tools.query; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.internal.tools.MutableInteger; -import org.hibernate.query.Query; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class UpdateBuilder { - private final String entityName; - private final String alias; - private final MutableInteger paramCounter; - private final Parameters rootParameters; - private final Map updates; - - public UpdateBuilder(String entityName, String alias) { - this( entityName, alias, new MutableInteger() ); - } - - private UpdateBuilder(String entityName, String alias, MutableInteger paramCounter) { - this.entityName = entityName; - this.alias = alias; - this.paramCounter = paramCounter; - rootParameters = new Parameters( alias, "and", paramCounter ); - updates = new HashMap<>(); - } - - public Parameters getRootParameters() { - return rootParameters; - } - - public void updateValue(String propertyName, Object value) { - updates.put( propertyName, value ); - } - - public void build(StringBuilder sb, Map updateParamValues) { - sb.append( "update " ).append( entityName ).append( " " ).append( alias ); - sb.append( " set " ); - int i = 1; - for ( Map.Entry entry : updates.entrySet() ) { - final String property = entry.getKey(); - final String paramName = generateParameterName(); - sb.append( alias ).append( "." ).append( property ).append( " = " ).append( ":" ).append( paramName ); - updateParamValues.put( paramName, entry.getValue() ); - if ( i < updates.size() ) { - sb.append( ", " ); - } - ++i; - } - if ( !rootParameters.isEmpty() ) { - sb.append( " where " ); - rootParameters.build( sb, updateParamValues ); - } - } - - private String generateParameterName() { - return "_u" + paramCounter.getAndIncrease(); - } - - public Query toQuery(Session session) { - final StringBuilder querySb = new StringBuilder(); - final Map queryParamValues = new HashMap<>(); - - build( querySb, queryParamValues ); - - final Query query = session.createQuery( querySb.toString() ); - for ( Map.Entry paramValue : queryParamValues.entrySet() ) { - query.setParameter( paramValue.getKey(), paramValue.getValue() ); - } - - return query; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditAssociationQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditAssociationQuery.java deleted file mode 100644 index 2575777d31d2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditAssociationQuery.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query; - -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.CacheMode; -import org.hibernate.FlushMode; -import org.hibernate.Incubating; -import org.hibernate.LockMode; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.order.AuditOrder; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@Incubating -public interface AuditAssociationQuery extends AuditQuery { - - @Override - AuditAssociationQuery> traverseRelation(String associationName, JoinType joinType); - - @Override - AuditAssociationQuery> traverseRelation(String associationName, JoinType joinType, - String alias); - - @Override - AuditAssociationQuery add(AuditCriterion criterion); - - @Override - AuditAssociationQuery addOrder(AuditOrder order); - - @Override - AuditAssociationQuery addProjection(AuditProjection projection); - - @Override - AuditAssociationQuery setMaxResults(int maxResults); - - @Override - AuditAssociationQuery setFirstResult(int firstResult); - - @Override - AuditAssociationQuery setCacheable(boolean cacheable); - - @Override - AuditAssociationQuery setCacheRegion(String cacheRegion); - - @Override - AuditAssociationQuery setComment(String comment); - - @Override - AuditAssociationQuery setFlushMode(FlushMode flushMode); - - @Override - AuditAssociationQuery setCacheMode(CacheMode cacheMode); - - @Override - AuditAssociationQuery setTimeout(int timeout); - - @Override - AuditAssociationQuery setLockMode(LockMode lockMode); - - Q up(); - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditEntity.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditEntity.java deleted file mode 100644 index ee8587764614..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditEntity.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.internal.tools.EntityTools; -import org.hibernate.envers.query.criteria.AuditConjunction; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditDisjunction; -import org.hibernate.envers.query.criteria.AuditFunction; -import org.hibernate.envers.query.criteria.AuditId; -import org.hibernate.envers.query.criteria.AuditProperty; -import org.hibernate.envers.query.criteria.AuditRelatedId; -import org.hibernate.envers.query.criteria.internal.EntityTypeAuditExpression; -import org.hibernate.envers.query.criteria.internal.LogicalAuditExpression; -import org.hibernate.envers.query.criteria.internal.NotAuditExpression; -import org.hibernate.envers.query.internal.property.EntityPropertyName; -import org.hibernate.envers.query.internal.property.RevisionNumberPropertyName; -import org.hibernate.envers.query.internal.property.RevisionPropertyPropertyName; -import org.hibernate.envers.query.internal.property.RevisionTypePropertyName; -import org.hibernate.envers.query.projection.AuditProjection; -import org.hibernate.envers.query.projection.internal.EntityAuditProjection; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings({"JavaDoc"}) -public class AuditEntity { - private AuditEntity() { - } - - public static AuditId id() { - return id( null ); - } - - public static AuditId id(String alias) { - return new AuditId( alias ); - } - - /** - * Create restrictions, projections and specify order for a property of an audited entity. - * - * @param propertyName Name of the property. - */ - public static AuditProperty property(String propertyName) { - return property( null, propertyName ); - } - - /** - * Create restrictions, projections and specify order for a property of an audited entity. - * - * @param alias the alias of the entity which owns the property. - * @param propertyName Name of the property. - */ - public static AuditProperty property(String alias, String propertyName) { - return new AuditProperty<>( alias, new EntityPropertyName( propertyName ) ); - } - - /** - * Create restrictions, projections and specify order for the revision number, corresponding to an - * audited entity. - */ - public static AuditProperty revisionNumber() { - return revisionNumber( null ); - } - - /** - * Create restrictions, projections and specify order for the revision number, corresponding to an - * audited entity. - * - * @param alias the alias of the entity which owns the revision number. - */ - public static AuditProperty revisionNumber(String alias) { - return new AuditProperty<>( alias, new RevisionNumberPropertyName() ); - } - - /** - * Create restrictions, projections and specify order for a property of the revision entity, - * corresponding to an audited entity. - * - * @param propertyName Name of the property. - */ - public static AuditProperty revisionProperty(String propertyName) { - return revisionProperty( null, propertyName ); - } - - /** - * Create restrictions, projections and specify order for a property of the revision entity, - * corresponding to an audited entity. - * - * @param alias the alias of the entity which owns the revision property. - * @param propertyName Name of the property. - */ - public static AuditProperty revisionProperty(String alias, String propertyName) { - return new AuditProperty<>( alias, new RevisionPropertyPropertyName( propertyName ) ); - } - - /** - * Create restrictions, projections and specify order for the revision type, corresponding to an - * audited entity. - */ - public static AuditProperty revisionType() { - return revisionType( null ); - } - - /** - * Create restrictions, projections and specify order for the revision type, corresponding to an - * audited entity. - * - * @param alias the alias of the entity which owns the revision type. - */ - public static AuditProperty revisionType(String alias) { - return new AuditProperty<>( alias, new RevisionTypePropertyName() ); - } - - /** - * Create restrictions on an id of a related entity. - * - * @param propertyName Name of the property, which is the relation. - */ - public static AuditRelatedId relatedId(String propertyName) { - return relatedId( null, propertyName ); - } - - /** - * Create restrictions on an id of a related entity. - * - * @param alias the alias of the entity which owns the relation property. - * @param propertyName Name of the property, which is the relation. - */ - public static AuditRelatedId relatedId(String alias, String propertyName) { - return new AuditRelatedId( alias, new EntityPropertyName( propertyName ) ); - } - - /** - * Return the conjuction of two criterions. - */ - public static AuditCriterion and(AuditCriterion lhs, AuditCriterion rhs) { - return new LogicalAuditExpression( lhs, rhs, "and" ); - } - - /** - * Return the disjuction of two criterions. - */ - public static AuditCriterion or(AuditCriterion lhs, AuditCriterion rhs) { - return new LogicalAuditExpression( lhs, rhs, "or" ); - } - - /** - * Return the negation of a criterion. - */ - public static AuditCriterion not(AuditCriterion expression) { - return new NotAuditExpression( expression ); - } - - /** - * Group criterions together in a single conjunction (A and B and C...). - */ - public static AuditConjunction conjunction() { - return new AuditConjunction(); - } - - /** - * Group criterions together in a single disjunction (A or B or C...). - */ - public static AuditDisjunction disjunction() { - return new AuditDisjunction(); - } - - /** - * Adds a projection to the current entity itself. Useful for - * selecting entities which are reached through associations within the query. - * @param distinct whether to distinct select the entity - */ - public static AuditProjection selectEntity(boolean distinct) { - return new EntityAuditProjection( null, distinct ); - } - - /** - * Create restrictions or projections using a function. - *

- * Examples: - *

    - *
  • AuditEntity.function("upper", AuditEntity.property("prop"))
  • - *
  • AuditEntity.function("substring", AuditEntity.property("prop"), 3, 2)
  • - *
  • AuditEntity.function("concat", AuditEntity.function("upper", AuditEntity.property("prop1")), - * AuditEntity.function("substring", AuditEntity.property("prop2"), 1, 2))
  • - *
- * - * @param function the name of the function - * @param arguments the arguments of the function. A function argument can either be - *
    - *
  • a primitive value like a Number or a String
  • - *
  • an AuditProperty (see {@link #property(String)})
  • - *
  • an other AuditFunction
  • - *
- */ - public static AuditFunction function(final String function, final Object... arguments) { - List argumentList = new ArrayList<>(); - Collections.addAll( argumentList, arguments ); - return new AuditFunction( function, argumentList ); - } - - /** - * Adds a restriction for the type of the current entity. - * - * @param type the entity type to restrict the current alias to - */ - public static AuditCriterion entityType(final Class type) { - return entityType( null, type ); - } - - /** - * Adds a restriction for the type of the current entity. - * - * @param entityName the entity name to restrict the current alias to - */ - public static AuditCriterion entityType(final String entityName) { - return entityType( null, entityName ); - } - - /** - * Adds a restriction for the type of the entity of the specified alias. - * - * @param alias the alias to restrict. If null is specified, the current alias is used - * @param type the entity type to restrict the alias to - */ - public static AuditCriterion entityType(final String alias, final Class type) { - Class unproxiedType = EntityTools.getTargetClassIfProxied( type ); - return entityType( alias, unproxiedType.getName() ); - } - - /** - * Adds a restriction for the type of the entity of the specified alias. - * - * @param alias the alias to restrict. If null is specified, the current alias is used - * @param entityName the entity name to restrict the alias to - * @return - */ - public static AuditCriterion entityType(final String alias, final String entityName) { - return new EntityTypeAuditExpression( alias, entityName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditQuery.java deleted file mode 100644 index 63db50320636..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditQuery.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query; - -import java.util.List; -import jakarta.persistence.NoResultException; -import jakarta.persistence.NonUniqueResultException; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.CacheMode; -import org.hibernate.FlushMode; -import org.hibernate.Incubating; -import org.hibernate.LockMode; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.order.AuditOrder; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface AuditQuery { - List getResultList() throws AuditException; - - Object getSingleResult() throws AuditException, NonUniqueResultException, NoResultException; - - AuditAssociationQuery traverseRelation(String associationName, JoinType joinType); - - AuditAssociationQuery traverseRelation( - String associationName, - JoinType joinType, - String alias); - - @Incubating - AuditAssociationQuery traverseRelation( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClauseCriterion); - - AuditQuery add(AuditCriterion criterion); - - AuditQuery addProjection(AuditProjection projection); - - AuditQuery addOrder(AuditOrder order); - - AuditQuery setMaxResults(int maxResults); - - AuditQuery setFirstResult(int firstResult); - - AuditQuery setCacheable(boolean cacheable); - - AuditQuery setCacheRegion(String cacheRegion); - - AuditQuery setComment(String comment); - - AuditQuery setFlushMode(FlushMode flushMode); - - AuditQuery setCacheMode(CacheMode cacheMode); - - AuditQuery setTimeout(int timeout); - - AuditQuery setLockMode(LockMode lockMode); - - String getAlias(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java deleted file mode 100644 index e52497a6f4af..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/AuditQueryCreator.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query; - -import org.hibernate.Incubating; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.internal.impl.EntitiesAtRevisionQuery; -import org.hibernate.envers.query.internal.impl.EntitiesModifiedAtRevisionQuery; -import org.hibernate.envers.query.internal.impl.RevisionsOfEntityQuery; - -import static org.hibernate.envers.internal.tools.ArgumentsTools.checkNotNull; -import static org.hibernate.envers.internal.tools.ArgumentsTools.checkPositive; -import static org.hibernate.envers.internal.tools.EntityTools.getTargetClassIfProxied; - -/** - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class AuditQueryCreator { - private final EnversService enversService; - private final AuditReaderImplementor auditReaderImplementor; - - public AuditQueryCreator(EnversService enversService, AuditReaderImplementor auditReaderImplementor) { - this.enversService = enversService; - this.auditReaderImplementor = auditReaderImplementor; - } - - /** - * Creates a query, which will return entities satisfying some conditions (specified later), - * at a given revision. Deleted entities are not included. - * - * @param c Class of the entities for which to query. - * @param revision Revision number at which to execute the query. - * - * @return A query for entities at a given revision, to which conditions can be added and which - * can then be executed. The result of the query will be a list of entities (beans), unless a - * projection is added. - */ - public AuditQuery forEntitiesAtRevision(Class c, Number revision) { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - c = getTargetClassIfProxied( c ); - checkEntityAudited( c.getName() ); - return new EntitiesAtRevisionQuery( enversService, auditReaderImplementor, c, revision, false ); - } - - /** - * Creates a query, which will return entities satisfying some conditions (specified later), - * at a given revision and a given entityName. Deleted entities are not included. - * - * @param c Class of the entities for which to query. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code c}). - * @param revision Revision number at which to execute the query. - * - * @return A query for entities at a given revision, to which conditions can be added and which - * can then be executed. The result of the query will be a list of entities (beans), unless a - * projection is added. - */ - public AuditQuery forEntitiesAtRevision(Class c, String entityName, Number revision) { - return forEntitiesAtRevision( c, entityName, revision, false ); - } - - /** - * Creates a query, which will return entities satisfying some conditions (specified later), - * at a given revision and a given entityName. Deleted entities may be optionally - * included. - * - * @param c Class of the entities for which to query. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code c}). - * @param revision Revision number at which to execute the query. - * @param includeDeletions Whether to include deleted entities in the search. - * - * @return A query for entities at a given revision, to which conditions can be added and which - * can then be executed. The result of the query will be a list of entities (beans), unless a - * projection is added. - */ - public AuditQuery forEntitiesAtRevision(Class c, String entityName, Number revision, boolean includeDeletions) { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - c = getTargetClassIfProxied( c ); - checkEntityAudited( entityName ); - return new EntitiesAtRevisionQuery( - enversService, - auditReaderImplementor, - c, - entityName, - revision, - includeDeletions - ); - } - - /** - * Creates a query, which will return entities modified at the specified revision. - *

- * In comparison, the {@link #forEntitiesAtRevision(Class, String, Number)} query takes into all entities - * which were present at a given revision, even if they were not modified. - * - * @param c Class of the entities for which to query. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code c}). - * @param revision Revision number at which to execute the query. - * - * @return A query for entities changed at a given revision, to which conditions can be added and which - * can then be executed. - * - * @see #forEntitiesAtRevision(Class, String, Number) - */ - public AuditQuery forEntitiesModifiedAtRevision(Class c, String entityName, Number revision) { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - c = getTargetClassIfProxied( c ); - checkEntityAudited( entityName ); - return new EntitiesModifiedAtRevisionQuery( enversService, auditReaderImplementor, c, entityName, revision ); - } - - /** - * Creates a query, which will return entities modified at the specified revision. - *

- * In comparison, the {@link #forEntitiesAtRevision(Class, String, Number)} query takes into all entities - * which were present at a given revision, even if they were not modified. - * - * @param c Class of the entities for which to query. - * @param revision Revision number at which to execute the query. - * - * @return A query for entities changed at a given revision, to which conditions can be added and which - * can then be executed. - * - * @see #forEntitiesAtRevision(Class, Number) - */ - public AuditQuery forEntitiesModifiedAtRevision(Class c, Number revision) { - checkNotNull( revision, "Entity revision" ); - checkPositive( revision, "Entity revision" ); - c = getTargetClassIfProxied( c ); - checkEntityAudited( c.getName() ); - return new EntitiesModifiedAtRevisionQuery( enversService, auditReaderImplementor, c, revision ); - } - - /** - * Creates a query, which selects the revisions, at which the given entity was modified. - * Unless an explicit projection is set, the result will be a list of three-element arrays, containing: - *

    - *
  1. the entity instance
  2. - *
  3. revision entity, corresponding to the revision at which the entity was modified. If no custom - * revision entity is used, this will be an instance of {@link org.hibernate.envers.DefaultRevisionEntity}
  4. - *
  5. type of the revision (an enum instance of class {@link org.hibernate.envers.RevisionType})
  6. - *
- * Additional conditions that the results must satisfy may be specified. - * - * @param c Class of the entities for which to query. - * @param selectEntitiesOnly If true, instead of a list of three-element arrays, a list of entities will be - * returned as a result of executing this query. - * @param selectDeletedEntities If true, also revisions where entities were deleted will be returned. The additional - * entities will have revision type "delete", and contain no data (all fields null), except for the id field. - * - * @return A query for revisions at which instances of the given entity were modified, to which - * conditions can be added (for example - a specific id of an entity of class c), and which - * can then be executed. The results of the query will be sorted in ascending order by the revision number, - * unless an order or projection is added. - */ - public AuditQuery forRevisionsOfEntity(Class c, boolean selectEntitiesOnly, boolean selectDeletedEntities) { - c = getTargetClassIfProxied( c ); - checkEntityAudited( c.getName() ); - return new RevisionsOfEntityQuery( - enversService, - auditReaderImplementor, - c, - selectEntitiesOnly, - selectDeletedEntities, - false, - false - ); - } - - /** - * Creates a query, which selects the revisions, at which the given entity was modified and with a given entityName. - * Unless an explicit projection is set, the result will be a list of three-element arrays, containing: - *
    - *
  1. the entity instance
  2. - *
  3. revision entity, corresponding to the revision at which the entity was modified. If no custom - * revision entity is used, this will be an instance of {@link org.hibernate.envers.DefaultRevisionEntity}
  4. - *
  5. type of the revision (an enum instance of class {@link org.hibernate.envers.RevisionType})
  6. - *
- * Additional conditions that the results must satisfy may be specified. - * - * @param c Class of the entities for which to query. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code c}). - * @param selectEntitiesOnly If true, instead of a list of three-element arrays, a list of entities will be - * returned as a result of executing this query. - * @param selectDeletedEntities If true, also revisions where entities were deleted will be returned. The additional - * entities will have revision type "delete", and contain no data (all fields null), except for the id field. - * - * @return A query for revisions at which instances of the given entity were modified, to which - * conditions can be added (for example - a specific id of an entity of class c), and which - * can then be executed. The results of the query will be sorted in ascending order by the revision number, - * unless an order or projection is added. - */ - public AuditQuery forRevisionsOfEntity( - Class c, - String entityName, - boolean selectEntitiesOnly, - boolean selectDeletedEntities) { - c = getTargetClassIfProxied( c ); - checkEntityAudited( entityName ); - return new RevisionsOfEntityQuery( - enversService, - auditReaderImplementor, - c, - entityName, - selectEntitiesOnly, - selectDeletedEntities, - false, - false - ); - } - - /** - * Creates a query that selects the revision entities associated with the specified entity. You may also - * specify whether the revision entities list should include those for deletions of the entity class. - * - * @param clazz Class of the entities for which to query. - * @param selectDeletedEntities If true, the result will include revision entities where deletions occurred. - * - * @return A query of revision entities based on the specified entity class. The results of the query will - * be stored in ascending order by the revision number unless an order is specified. - * - * @since 5.3 - */ - @Incubating - public AuditQuery forRevisionsOfEntity(Class clazz, boolean selectDeletedEntities) { - clazz = getTargetClassIfProxied( clazz ); - return new RevisionsOfEntityQuery( - enversService, - auditReaderImplementor, - clazz, - false, - selectDeletedEntities, - true, - false - ); - } - - /** - * Creates a query that selects the revision entities associated with the specified entity. You may also - * specify whether the revision entities list should include those for deletions of the entity class. - * - * @param clazz Class of the entities for which to query. - * @param entityName Name of the entity (for cases where it cannot be guessed based on class clazz). - * @param selectDeletedEntities If true, the result will include revision entities where deletions occurred. - * - * @return A query of revision entities based on the specified entity class. The results of the query will - * be stored in ascending order by the revision number unless an order is specified. - * - * @since 5.3 - */ - @Incubating - public AuditQuery forRevisionsOfEntity(Class clazz, String entityName, boolean selectDeletedEntities) { - clazz = getTargetClassIfProxied( clazz ); - return new RevisionsOfEntityQuery( - enversService, - auditReaderImplementor, - clazz, - entityName, - false, - selectDeletedEntities, - true, - false - ); - } - - /** - * Creates a query that selects the revisions at which the given entity was modified. Unless a - * projection is set, the result will be a list of 4-element arrays, containing the following: - *
    - *
  1. The entity instance
  2. - *
  3. Revision entity, corresponding to the revision where the entity was modified. If no custom - * revision entity is used, this will be an instance of {@link org.hibernate.envers.DefaultRevisionEntity}.
  4. - *
  5. The revision type, an enum of class {@link org.hibernate.envers.RevisionType}.
  6. - *
  7. The names of the properties changed in this revision
  8. - *
- * Additional criterion may be specified to filter the result set. - * - * @param clazz Class of the entities for which to query. - * @param selectDeletedEntities If true, the result set will include revisions where entities were deleted. - * - * @return the audit query - * - * @since 5.3 - */ - @Incubating - public AuditQuery forRevisionsOfEntityWithChanges(Class clazz, boolean selectDeletedEntities) { - clazz = getTargetClassIfProxied( clazz ); - return new RevisionsOfEntityQuery( - enversService, - auditReaderImplementor, - clazz, - false, - selectDeletedEntities, - false, - true - ); - } - - /** - * Creates a query that selects the revisions at which the given entity was modified. Unless a - * projection is set, the result will be a list of 4-element arrays, containing the following: - *
    - *
  1. The entity instance
  2. - *
  3. Revision entity, corresponding to the revision where the entity was modified. If no custom - * revision entity is used, this will be an instance of {@link org.hibernate.envers.DefaultRevisionEntity}.
  4. - *
  5. The revision type, an enum of class {@link org.hibernate.envers.RevisionType}.
  6. - *
  7. The names of the properties changed in this revision
  8. - *
- * Additional criterion may be specified to filter the result set. - * - * @param clazz Class of the entities for which to query. - * @param entityName Name of the entity (if it can't be guessed basing on the {@code clazz}). - * @param selectDeletedEntities If true, the result set will include revisions where entities were deleted. - * - * @return the audit query - * - * @since 5.3 - */ - @Incubating - public AuditQuery forRevisionsOfEntityWithChanges(Class clazz, String entityName, boolean selectDeletedEntities) { - clazz = getTargetClassIfProxied( clazz ); - return new RevisionsOfEntityQuery( - enversService, - auditReaderImplementor, - clazz, - entityName, - false, - selectDeletedEntities, - false, - true - ); - } - - private void checkEntityAudited(String entityName) { - if ( !auditReaderImplementor.isEntityNameAudited( entityName ) ) { - throw new NotAuditedException( - entityName, - "Cannot query audit history on a non-audited entity [" + entityName + "]." - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AggregatedAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AggregatedAuditExpression.java deleted file mode 100644 index 506c2260d598..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AggregatedAuditExpression.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.internal.CriteriaTools; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class AggregatedAuditExpression implements AuditCriterion, ExtendableCriterion { - private String alias; - private PropertyNameGetter propertyNameGetter; - private AggregatedMode mode; - // Correlate subquery with outer query by entity id. - private boolean correlate; - private List criterions; - - public AggregatedAuditExpression(String alias, PropertyNameGetter propertyNameGetter, AggregatedMode mode) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - this.mode = mode; - criterions = new ArrayList<>(); - } - - public enum AggregatedMode { - MAX, - MIN - } - - @Override - public AggregatedAuditExpression add(AuditCriterion criterion) { - criterions.add( criterion ); - return this; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder qb, - Parameters parameters) { - String effectiveAlias = this.alias == null ? baseAlias : this.alias; - String entityName = aliasToEntityNameMap.get( effectiveAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - String componentPrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveAlias - ); - String prefixedPropertyName = componentPrefix.concat( propertyName ); - - CriteriaTools.checkPropertyNotARelation( enversService, entityName, prefixedPropertyName ); - - // Make sure our conditions are ANDed together even if the parent Parameters have a different connective - Parameters subParams = parameters.addSubParameters( Parameters.AND ); - // This will be the aggregated query, containing all the specified conditions - String auditEntityName = enversService.getConfig().getAuditEntityName( entityName ); - String subQueryAlias = qb.generateAlias(); - QueryBuilder subQb = qb.newSubQueryBuilder( auditEntityName, subQueryAlias ); - aliasToEntityNameMap.put( subQueryAlias, entityName ); - - // Adding all specified conditions both to the main query, as well as to the - // aggregated one. - for ( AuditCriterion versionsCriteria : criterions ) { - versionsCriteria.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveAlias, - qb, - subParams - ); - - versionsCriteria.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - subQueryAlias, - subQb, - subQb.getRootParameters() - ); - } - - // Setting the desired projection of the aggregated query - switch ( mode ) { - case MIN: - subQb.addProjection( "min", subQb.getAlias(), prefixedPropertyName, false ); - break; - case MAX: - subQb.addProjection( "max", subQb.getAlias(), prefixedPropertyName, false ); - } - - // Correlating subquery with the outer query by entity id. See JIRA HHH-7827. - if ( correlate ) { - final String originalIdPropertyName = enversService.getConfig().getOriginalIdPropertyName(); - enversService.getEntitiesConfigurations().get( entityName ).getIdMapper().addIdsEqualToQuery( - subQb.getRootParameters(), - subQb.getRootAlias() + "." + originalIdPropertyName, - effectiveAlias + "." + originalIdPropertyName - ); - } - - // Adding the constrain on the result of the aggregated criteria - subParams.addWhere( effectiveAlias, prefixedPropertyName, "=", subQb ); - } - - /** - * Compute aggregated expression in the context of each entity instance separately. Useful for retrieving latest - * revisions of all entities of a particular type.
- * Implementation note: Correlates subquery with the outer query by entity id. - * - * @return this (for method chaining). - */ - public AggregatedAuditExpression computeAggregationInInstanceContext() { - correlate = true; - return this; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditConjunction.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditConjunction.java deleted file mode 100644 index 946a2c2242cb..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditConjunction.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class AuditConjunction implements AuditCriterion, ExtendableCriterion { - private List criterions; - - public AuditConjunction() { - criterions = new ArrayList<>(); - } - - @Override - public AuditConjunction add(AuditCriterion criterion) { - criterions.add( criterion ); - return this; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String alias, - QueryBuilder qb, - Parameters parameters) { - Parameters andParameters = parameters.addSubParameters( Parameters.AND ); - - if ( criterions.size() == 0 ) { - andParameters.addWhere( "1", false, "=", "1", false ); - } - else { - for ( AuditCriterion criterion : criterions ) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - qb, - andParameters - ); - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditCriterion.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditCriterion.java deleted file mode 100644 index 454ed2717d0b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditCriterion.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface AuditCriterion { - void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder qb, - Parameters parameters); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditDisjunction.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditDisjunction.java deleted file mode 100644 index ba2308b6a8f8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditDisjunction.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class AuditDisjunction implements AuditCriterion, ExtendableCriterion { - private List criterions; - - public AuditDisjunction() { - criterions = new ArrayList<>(); - } - - @Override - public AuditDisjunction add(AuditCriterion criterion) { - criterions.add( criterion ); - return this; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String alias, - QueryBuilder qb, - Parameters parameters) { - Parameters orParameters = parameters.addSubParameters( Parameters.OR ); - - if ( criterions.size() == 0 ) { - orParameters.addWhere( "0", false, "=", "1", false ); - } - else { - for ( AuditCriterion criterion : criterions ) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - qb, - orParameters - ); - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditFunction.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditFunction.java deleted file mode 100644 index f11dcf3541d9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditFunction.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.internal.FunctionFunctionAuditExpression; -import org.hibernate.envers.query.criteria.internal.PropertyFunctionAuditExpression; -import org.hibernate.envers.query.criteria.internal.SimpleFunctionAuditExpression; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * Create restrictions or projections using a function. - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class AuditFunction implements AuditProjection { - - private final String function; - private final List arguments; - - public AuditFunction(String function, List arguments) { - this.function = function; - this.arguments = arguments; - } - - public String getFunction() { - return function; - } - - public List getArguments() { - return arguments; - } - - /** - * Apply an "equal" constraint - */ - public AuditCriterion eq(Object value) { - return new SimpleFunctionAuditExpression( this, value, "=" ); - } - - /** - * Apply a "not equal" constraint - */ - public AuditCriterion ne(Object value) { - return new SimpleFunctionAuditExpression( this, value, "<>" ); - } - - /** - * Apply a "like" constraint - */ - public AuditCriterion like(Object value) { - return new SimpleFunctionAuditExpression( this, value, " like " ); - } - - /** - * Apply a "like" constraint - */ - public AuditCriterion like(String value, MatchMode matchMode) { - return new SimpleFunctionAuditExpression( this, matchMode.toMatchString( value ), " like " ); - } - - /** - * Apply a "greater than" constraint - */ - public AuditCriterion gt(Object value) { - return new SimpleFunctionAuditExpression( this, value, ">" ); - } - - /** - * Apply a "less than" constraint - */ - public AuditCriterion lt(Object value) { - return new SimpleFunctionAuditExpression( this, value, "<" ); - } - - /** - * Apply a "less than or equal" constraint - */ - public AuditCriterion le(Object value) { - return new SimpleFunctionAuditExpression( this, value, "<=" ); - } - - /** - * Apply a "greater than or equal" constraint - */ - public AuditCriterion ge(Object value) { - return new SimpleFunctionAuditExpression( this, value, ">=" ); - } - - /** - * Apply an "equal" constraint to a property - */ - public AuditCriterion eqProperty(String propertyName) { - return eqProperty( null, propertyName ); - } - - /** - * Apply an "equal" constraint to a property - * - * @param alias the alias of the entity which owns the property. - */ - public AuditCriterion eqProperty(String alias, String propertyName) { - return new PropertyFunctionAuditExpression( this, alias, propertyName, "=" ); - } - - /** - * Apply a "not equal" constraint to a property - */ - public AuditCriterion neProperty(String propertyName) { - return neProperty( null, propertyName ); - } - - /** - * Apply a "not equal" constraint to a property - * - * @param alias the alias of the entity which owns the property. - */ - public AuditCriterion neProperty(String alias, String propertyName) { - return new PropertyFunctionAuditExpression( this, alias, propertyName, "<>" ); - } - - /** - * Apply a "less than" constraint to a property - */ - public AuditCriterion ltProperty(String propertyName) { - return ltProperty( null, propertyName ); - } - - /** - * Apply a "less than" constraint to a property - * - * @param alias the alias of the entity which owns the property. - */ - public AuditCriterion ltProperty(String alias, String propertyName) { - return new PropertyFunctionAuditExpression( this, alias, propertyName, "<" ); - } - - /** - * Apply a "less than or equal" constraint to a property - */ - public AuditCriterion leProperty(String propertyName) { - return leProperty( null, propertyName ); - } - - /** - * Apply a "less than or equal" constraint to a property - * - * @param alias the alias of the entity which owns the property. - */ - public AuditCriterion leProperty(String alias, String propertyName) { - return new PropertyFunctionAuditExpression( this, alias, propertyName, "<=" ); - } - - /** - * Apply a "greater than" constraint to a property - */ - public AuditCriterion gtProperty(String propertyName) { - return gtProperty( null, propertyName ); - } - - /** - * Apply a "greater than" constraint to a property - * - * @param alias the alias of the entity which owns the property. - */ - public AuditCriterion gtProperty(String alias, String propertyName) { - return new PropertyFunctionAuditExpression( this, alias, propertyName, ">" ); - } - - /** - * Apply a "greater than or equal" constraint to a property - */ - public AuditCriterion geProperty(String propertyName) { - return geProperty( null, propertyName ); - } - - /** - * Apply a "greater than or equal" constraint to a property - * - * @param alias the alias of the entity which owns the property. - */ - public AuditCriterion geProperty(String alias, String propertyName) { - return new PropertyFunctionAuditExpression( this, alias, propertyName, ">=" ); - } - - /** - * Apply an "equal" constraint to another function - */ - public AuditCriterion eqFunction(AuditFunction otherFunction) { - return new FunctionFunctionAuditExpression( this, otherFunction, "=" ); - } - - /** - * Apply a "not equal" constraint to another function - */ - public AuditCriterion neFunction(AuditFunction otherFunction) { - return new FunctionFunctionAuditExpression( this, otherFunction, "<>" ); - } - - /** - * Apply a "less than" constraint to another function - */ - public AuditCriterion ltFunction(AuditFunction otherFunction) { - return new FunctionFunctionAuditExpression( this, otherFunction, "<" ); - } - - /** - * Apply a "less than or equal" constraint to another function - */ - public AuditCriterion leFunction(AuditFunction otherFunction) { - return new FunctionFunctionAuditExpression( this, otherFunction, "<=" ); - } - - /** - * Apply a "greater than" constraint to another function - */ - public AuditCriterion gtFunction(AuditFunction otherFunction) { - return new FunctionFunctionAuditExpression( this, otherFunction, ">" ); - } - - /** - * Apply a "greater than or equal" constraint to another function - */ - public AuditCriterion geFunction(AuditFunction otherFunction) { - return new FunctionFunctionAuditExpression( this, otherFunction, ">=" ); - } - - @Override - public void addProjectionToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder) { - queryBuilder.addProjection( - enversService.getConfig(), - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - this - ); - } - - @Override - public Object convertQueryResult(EnversService enversService, EntityInstantiator entityInstantiator, - String entityName, Number revision, Object value) { - return value; - } - - @Override - public String getAlias(String baseAlias) { - return baseAlias; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditId.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditId.java deleted file mode 100644 index 414d93b55cff..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditId.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import org.hibernate.envers.query.criteria.internal.IdentifierEqAuditExpression; -import org.hibernate.envers.query.internal.property.EntityPropertyName; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * Create restrictions and projections for the id of an audited entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@SuppressWarnings({"JavaDoc"}) -public class AuditId extends AuditProperty { - public static final String IDENTIFIER_PLACEHOLDER = "$$id$$"; - private static final PropertyNameGetter IDENTIFIER_PROPERTY_GETTER = new EntityPropertyName( IDENTIFIER_PLACEHOLDER ); - - private final String alias; - - public AuditId(String alias) { - super( alias, IDENTIFIER_PROPERTY_GETTER ); - this.alias = alias; - } - - /** - * Apply an "equal" constraint - */ - @Override - public AuditCriterion eq(Object id) { - return new IdentifierEqAuditExpression( alias, id, true ); - } - - /** - * Apply a "not equal" constraint - */ - @Override - public AuditCriterion ne(Object id) { - return new IdentifierEqAuditExpression( alias, id, false ); - } - - // Projections - - @Override - public AuditCriterion hasChanged() { - throw new UnsupportedOperationException(); - } - - @Override - public AuditCriterion hasNotChanged() { - throw new UnsupportedOperationException(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditProperty.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditProperty.java deleted file mode 100644 index f3827172b284..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditProperty.java +++ /dev/null @@ -1,461 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import java.util.Collection; -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.internal.BetweenAuditExpression; -import org.hibernate.envers.query.criteria.internal.CriteriaTools; -import org.hibernate.envers.query.criteria.internal.FunctionPropertyAuditExpression; -import org.hibernate.envers.query.criteria.internal.IlikeAuditExpression; -import org.hibernate.envers.query.criteria.internal.InAuditExpression; -import org.hibernate.envers.query.criteria.internal.NotNullAuditExpression; -import org.hibernate.envers.query.criteria.internal.NullAuditExpression; -import org.hibernate.envers.query.criteria.internal.PropertyAuditExpression; -import org.hibernate.envers.query.criteria.internal.SimpleAuditExpression; -import org.hibernate.envers.query.internal.property.ModifiedFlagPropertyName; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; -import org.hibernate.envers.query.order.AuditOrder; -import org.hibernate.envers.query.order.internal.PropertyAuditOrder; -import org.hibernate.envers.query.projection.AuditProjection; -import org.hibernate.envers.query.projection.internal.PropertyAuditProjection; - -/** - * Create restrictions, projections and specify order for a property of an audited entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -@SuppressWarnings({"JavaDoc"}) -public class AuditProperty implements AuditProjection { - private final String alias; - private final PropertyNameGetter propertyNameGetter; - - public AuditProperty(String alias, PropertyNameGetter propertyNameGetter) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - } - - @Override - public String getAlias(String baseAlias) { - return alias == null ? baseAlias : alias; - } - - public PropertyNameGetter getPropertyNameGetter() { - return propertyNameGetter; - } - - public AuditCriterion hasChanged() { - return new SimpleAuditExpression( alias, new ModifiedFlagPropertyName( propertyNameGetter ), true, "=" ); - } - - public AuditCriterion hasNotChanged() { - return new SimpleAuditExpression( alias, new ModifiedFlagPropertyName( propertyNameGetter ), false, "=" ); - } - - /** - * Apply an "equal" constraint - */ - public AuditCriterion eq(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, "=" ); - } - - /** - * Apply a "not equal" constraint - */ - public AuditCriterion ne(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, "<>" ); - } - - /** - * Apply a "like" constraint - */ - public AuditCriterion like(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, " like " ); - } - - /** - * Apply a "like" constraint - */ - public AuditCriterion like(String value, MatchMode matchMode) { - return new SimpleAuditExpression( alias, propertyNameGetter, matchMode.toMatchString( value ), " like " ); - } - - /** - * Apply an "ilike" constraint - */ - public AuditCriterion ilike(T value) { - return new IlikeAuditExpression( alias, propertyNameGetter, value.toString() ); - } - - /** - * Apply on "ilike" constraint - */ - public AuditCriterion ilike(String value, MatchMode matchMode) { - return new IlikeAuditExpression( alias, propertyNameGetter, matchMode.toMatchString( value ) ); - } - - /** - * Apply a "greater than" constraint - */ - public AuditCriterion gt(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, ">" ); - } - - /** - * Apply a "less than" constraint - */ - public AuditCriterion lt(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, "<" ); - } - - /** - * Apply a "less than or equal" constraint - */ - public AuditCriterion le(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, "<=" ); - } - - /** - * Apply a "greater than or equal" constraint - */ - public AuditCriterion ge(T value) { - return new SimpleAuditExpression( alias, propertyNameGetter, value, ">=" ); - } - - /** - * Apply a "between" constraint - */ - public AuditCriterion between(T lo, T hi) { - return new BetweenAuditExpression( alias, propertyNameGetter, lo, hi ); - } - - /** - * Apply an "in" constraint - */ - public AuditCriterion in(T[] values) { - return new InAuditExpression( alias, propertyNameGetter, values ); - } - - /** - * Apply an "in" constraint - */ - public AuditCriterion in(Collection values) { - return new InAuditExpression( alias, propertyNameGetter, values.toArray() ); - } - - /** - * Apply an "is null" constraint - */ - public AuditCriterion isNull() { - return new NullAuditExpression( alias, propertyNameGetter ); - } - - /** - * Apply an "equal" constraint to another property - */ - public AuditCriterion eqProperty(String otherPropertyName) { - /* - * We provide alias as otherAlias rather than null, because this seems the intuitive use case. - * E.g. if the user calls AuditEntity.property( "alias", "prop" ).eqProperty( "otherProp" ) - * it is assumed that the otherProp is on the same entity as prop and therefore we have to use - * the same alias. - */ - return eqProperty( alias, otherPropertyName ); - } - - /** - * Apply an "equal" constraint to another property - * - * @param otherAlias the alias of the entity which owns the other property. - */ - public AuditCriterion eqProperty(String otherAlias, String otherPropertyName) { - return new PropertyAuditExpression( alias, propertyNameGetter, otherAlias, otherPropertyName, "=" ); - } - - /** - * Apply a "not equal" constraint to another property - */ - public AuditCriterion neProperty(String otherPropertyName) { - /* - * We provide alias as otherAlias rather than null, because this seems the intuitive use case. - * E.g. if the user calls AuditEntity.property( "alias", "prop" ).neProperty( "otherProp" ) - * it is assumed that the otherProp is on the same entity as prop and therefore we have to use - * the same alias. - */ - return neProperty( alias, otherPropertyName ); - } - - /** - * Apply a "not equal" constraint to another property - * - * @param otherAlias the alias of the entity which owns the other property. - */ - public AuditCriterion neProperty(String otherAlias, String otherPropertyName) { - return new PropertyAuditExpression( alias, propertyNameGetter, otherAlias, otherPropertyName, "<>" ); - } - - /** - * Apply a "less than" constraint to another property - */ - public AuditCriterion ltProperty(String otherPropertyName) { - /* - * We provide alias as otherAlias rather than null, because this seems the intuitive use case. - * E.g. if the user calls AuditEntity.property( "alias", "prop" ).ltProperty( "otherProp" ) - * it is assumed that the otherProp is on the same entity as prop and therefore we have to use - * the same alias. - */ - return ltProperty( alias, otherPropertyName ); - } - - /** - * Apply a "less than" constraint to another property - * - * @param otherAlias the alias of the entity which owns the other property. - */ - public AuditCriterion ltProperty(String otherAlias, String otherPropertyName) { - return new PropertyAuditExpression( alias, propertyNameGetter, otherAlias, otherPropertyName, "<" ); - } - - /** - * Apply a "less than or equal" constraint to another property - */ - public AuditCriterion leProperty(String otherPropertyName) { - /* - * We provide alias as otherAlias rather than null, because this seems the intuitive use case. - * E.g. if the user calls AuditEntity.property( "alias", "prop" ).leProperty( "otherProp" ) - * it is assumed that the otherProp is on the same entity as prop and therefore we have to use - * the same alias. - */ - return leProperty( alias, otherPropertyName ); - } - - /** - * Apply a "less than or equal" constraint to another property - * - * @param otherAlias the alias of the entity which owns the other property. - */ - public AuditCriterion leProperty(String otherAlias, String otherPropertyName) { - return new PropertyAuditExpression( alias, propertyNameGetter, otherAlias, otherPropertyName, "<=" ); - } - - /** - * Apply a "greater than" constraint to another property - */ - public AuditCriterion gtProperty(String otherPropertyName) { - /* - * We provide alias as otherAlias rather than null, because this seems the intuitive use case. - * E.g. if the user calls AuditEntity.property( "alias", "prop" ).gtProperty( "otherProp" ) - * it is assumed that the otherProp is on the same entity as prop and therefore we have to use - * the same alias. - */ - return gtProperty( alias, otherPropertyName ); - } - - /** - * Apply a "greater than" constraint to another property - * - * @param otherAlias the alias of the entity which owns the other property. - */ - public AuditCriterion gtProperty(String otherAlias, String otherPropertyName) { - return new PropertyAuditExpression( alias, propertyNameGetter, otherAlias, otherPropertyName, ">" ); - } - - /** - * Apply a "greater than or equal" constraint to another property - */ - public AuditCriterion geProperty(String otherPropertyName) { - /* - * We provide alias as otherAlias rather than null, because this seems the intuitive use case. - * E.g. if the user calls AuditEntity.property( "alias", "prop" ).geProperty( "otherProp" ) - * it is assumed that the otherProp is on the same entity as prop and therefore we have to use - * the same alias. - */ - return geProperty( alias, otherPropertyName ); - } - - /** - * Apply a "greater than or equal" constraint to another property - * - * @param otherAlias the alias of the entity which owns the other property. - */ - public AuditCriterion geProperty(String otherAlias, String otherPropertyName) { - return new PropertyAuditExpression( alias, propertyNameGetter, otherAlias, otherPropertyName, ">=" ); - } - - /** - * Apply an "equal" constraint to a function - */ - public AuditCriterion eqFunction(AuditFunction otherFunction) { - return new FunctionPropertyAuditExpression( alias, propertyNameGetter, otherFunction, "=" ); - } - - /** - * Apply a "not equal" constraint to a function - */ - public AuditCriterion neFunction(AuditFunction otherFunction) { - return new FunctionPropertyAuditExpression( alias, propertyNameGetter, otherFunction, "<>" ); - } - - /** - * Apply a "less than" constraint to a function - */ - public AuditCriterion ltFunction(AuditFunction otherFunction) { - return new FunctionPropertyAuditExpression( alias, propertyNameGetter, otherFunction, "<" ); - } - - /** - * Apply a "less than or equal" constraint to a function - */ - public AuditCriterion leFunction(AuditFunction otherFunction) { - return new FunctionPropertyAuditExpression( alias, propertyNameGetter, otherFunction, "<=" ); - } - - /** - * Apply a "greater than" constraint to a function - */ - public AuditCriterion gtFunction(AuditFunction otherFunction) { - return new FunctionPropertyAuditExpression( alias, propertyNameGetter, otherFunction, ">" ); - } - - /** - * Apply a "greater than or equal" constraint to a function - */ - public AuditCriterion geFunction(AuditFunction otherFunction) { - return new FunctionPropertyAuditExpression( alias, propertyNameGetter, otherFunction, ">=" ); - } - - /** - * Apply an "is not null" constraint to the another property - */ - public AuditCriterion isNotNull() { - return new NotNullAuditExpression( alias, propertyNameGetter ); - } - - /** - * Apply a "maximalize" constraint, with the ability to specify further constraints on the maximized - * property - */ - public AggregatedAuditExpression maximize() { - return new AggregatedAuditExpression( alias, propertyNameGetter, AggregatedAuditExpression.AggregatedMode.MAX ); - } - - /** - * Apply a "minimize" constraint, with the ability to specify further constraints on the minimized - * property - */ - public AggregatedAuditExpression minimize() { - return new AggregatedAuditExpression( alias, propertyNameGetter, AggregatedAuditExpression.AggregatedMode.MIN ); - } - - // Projections - - /** - * Projection on the maximum value - */ - public AuditProjection max() { - return new PropertyAuditProjection( alias, propertyNameGetter, "max", false ); - } - - /** - * Projection on the minimum value - */ - public AuditProjection min() { - return new PropertyAuditProjection( alias, propertyNameGetter, "min", false ); - } - - /** - * Projection counting the values - */ - public AuditProjection count() { - return new PropertyAuditProjection( alias, propertyNameGetter, "count", false ); - } - - /** - * Projection counting distinct values - */ - public AuditProjection countDistinct() { - return new PropertyAuditProjection( alias, propertyNameGetter, "count", true ); - } - - /** - * Projection on distinct values - */ - public AuditProjection distinct() { - return new PropertyAuditProjection( alias, propertyNameGetter, null, true ); - } - - /** - * Projection using a custom function - */ - public AuditProjection function(String functionName) { - return new PropertyAuditProjection( alias, propertyNameGetter, functionName, false ); - } - - // Projection on this property - - @Override - public void addProjectionToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder) { - String projectionEntityAlias = getAlias( baseAlias ); - String projectionEntityName = aliasToEntityNameMap.get( projectionEntityAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - auditReader, - projectionEntityName, - propertyNameGetter - ); - String propertyNamePrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - projectionEntityAlias - ); - queryBuilder.addProjection( - null, - projectionEntityAlias, - propertyNamePrefix.concat( propertyName ), - false - ); - } - - // Order - - /** - * Sort the results by the property in ascending order - */ - public AuditOrder asc() { - return new PropertyAuditOrder( alias, propertyNameGetter, true ); - } - - /** - * Sort the results by the property in descending order - */ - public AuditOrder desc() { - return new PropertyAuditOrder( alias, propertyNameGetter, false ); - } - - @Override - public Object convertQueryResult( - EnversService enversService, - EntityInstantiator entityInstantiator, - String entityName, - Number revision, - Object value) { - return value; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditRelatedId.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditRelatedId.java deleted file mode 100644 index 4c33a96a19f0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/AuditRelatedId.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -import org.hibernate.envers.query.criteria.internal.RelatedAuditEqualityExpression; -import org.hibernate.envers.query.criteria.internal.RelatedAuditInExpression; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * Create restrictions on an id of an entity related to an audited entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class AuditRelatedId { - private final String alias; - private final PropertyNameGetter propertyNameGetter; - - public AuditRelatedId(String alias, PropertyNameGetter propertyNameGetter) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - } - - /** - * Applies an "equals" criteria predicate. - * - * @param id the value to test equality with - * @return the criterion. - */ - public AuditCriterion eq(Object id) { - return new RelatedAuditEqualityExpression( alias, propertyNameGetter, id, true ); - } - - /** - * Applies a "not equals" criteria predicate. - * - * @param id the value to test inequality with - * @return the criterion - */ - public AuditCriterion ne(Object id) { - return new RelatedAuditEqualityExpression( alias, propertyNameGetter, id, false ); - } - - /** - * Applies an "in" criteria predicate. - * - * @param values the values to test with -* @return the criterion - */ - public AuditCriterion in(Object[] values) { - return new RelatedAuditInExpression( alias, propertyNameGetter, values ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/ExtendableCriterion.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/ExtendableCriterion.java deleted file mode 100644 index b1f14f759726..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/ExtendableCriterion.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface ExtendableCriterion { - ExtendableCriterion add(AuditCriterion criterion); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/MatchMode.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/MatchMode.java deleted file mode 100644 index 889492fb1ad8..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/MatchMode.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria; - -/** - * A strategy for matching strings using "like". - * - * @author Chris Cranford - */ -public enum MatchMode { - /** - * Match the pattern exactly. - */ - EXACT { - @Override - public String toMatchString(String pattern) { - return pattern; - } - }, - - /** - * Match the start of the string to the pattern. - */ - START { - @Override - public String toMatchString(String pattern) { - return pattern + '%'; - } - }, - - /** - * Match the end of the string to the pattern. - */ - END { - @Override - public String toMatchString(String pattern) { - return '%' + pattern; - } - }, - - /** - * Match the pattern anywhere in the string. - */ - ANYWHERE { - @Override - public String toMatchString(String pattern) { - return '%' + pattern + '%'; - } - }; - - /** - * Convert the pattern by prepending/append "%". - * - * @param pattern The pattern to convert according to the mode. - * @return The converted pattern. - */ - public abstract String toMatchString(String pattern); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/AbstractAtomicExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/AbstractAtomicExpression.java deleted file mode 100644 index 703c0c5ac313..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/AbstractAtomicExpression.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; - -/** - * An abstract class for all expression types which are atomic (i.e. expressions - * which are not composed of one or more other expressions). For those expression - * types which base class already calculates the effective alias and resolves - * the corresponding entity name. The effect alias is either the alias that has been - * specified at creation time of this expression or if that alias is null, the base - * alias is used. This calculation is done in the - * {@link AuditCriterion#addToQuery(EnversService, AuditReaderImplementor, Map, Map, String, QueryBuilder, Parameters)} - * implementation and then delegated for the concrete work to the template method - * {@link #addToQuery(EnversService, AuditReaderImplementor, String, String, String, QueryBuilder, Parameters)} - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -abstract class AbstractAtomicExpression implements AuditCriterion { - - private final String alias; - - protected AbstractAtomicExpression(String alias) { - this.alias = alias; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder qb, - Parameters parameters) { - final String effectiveAlias = alias == null ? baseAlias : alias; - final String entityName = aliasToEntityNameMap.get( effectiveAlias ); - final String componentPrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveAlias - ); - addToQuery(enversService, versionsReader, entityName, effectiveAlias, componentPrefix, qb, parameters); - } - - protected abstract void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters); - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/BetweenAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/BetweenAuditExpression.java deleted file mode 100644 index 3b1375f6d2bf..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/BetweenAuditExpression.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BetweenAuditExpression extends AbstractAtomicExpression { - private PropertyNameGetter propertyNameGetter; - private Object lo; - private Object hi; - - public BetweenAuditExpression(String alias, PropertyNameGetter propertyNameGetter, Object lo, Object hi) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - this.lo = lo; - this.hi = hi; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - String prefixedPropertyName = componentPrefix.concat( propertyName ); - CriteriaTools.checkPropertyNotARelation( enversService, entityName, prefixedPropertyName ); - - Parameters subParams = parameters.addSubParameters( Parameters.AND ); - subParams.addWhereWithParam( alias, prefixedPropertyName, ">=", lo ); - subParams.addWhereWithParam( alias, prefixedPropertyName, "<=", hi ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/CriteriaTools.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/CriteriaTools.java deleted file mode 100644 index 18a76c1f532f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/CriteriaTools.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.ComponentDescription; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.criteria.AuditId; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; -import org.hibernate.type.EmbeddedComponentType; -import org.hibernate.type.Type; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public abstract class CriteriaTools { - public static void checkPropertyNotARelation( - EnversService enversService, - String entityName, - String propertyName) throws AuditException { - if ( enversService.getEntitiesConfigurations().get( entityName ).isRelation( propertyName ) ) { - throw new AuditException( - "This criterion cannot be used on a property that is " + - "a relation to another property." - ); - } - } - - public static RelationDescription getRelatedEntity( - EnversService enversService, - String entityName, - String propertyName) throws AuditException { - RelationDescription relationDesc = enversService.getEntitiesConfigurations().getRelationDescription( entityName, propertyName ); - - if ( relationDesc == null ) { - return null; - } - - if ( relationDesc.getRelationType() == RelationType.TO_ONE - || relationDesc.getRelationType() == RelationType.TO_MANY_MIDDLE - || relationDesc.getRelationType() == RelationType.TO_MANY_NOT_OWNING - || relationDesc.getRelationType() == RelationType.TO_MANY_MIDDLE_NOT_OWNING ) { - return relationDesc; - } - - throw new AuditException( - String.format( - Locale.ENGLISH, - "This type of relation (%s.%s) isn't supported and can't be used in queries.", - entityName, - propertyName - ) - ); - } - - public static ComponentDescription getComponent( - EnversService enversService, - String entityName, - String propertyName) { - return enversService.getEntitiesConfigurations().getComponentDescription( entityName, propertyName ); - } - - public static String determinePropertyName( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - PropertyNameGetter propertyNameGetter) { - return determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter.get( enversService.getConfig() ) - ); - } - - /** - * @param enversService The EnversService - * @param versionsReader Versions reader. - * @param entityName Original entity name (not audited). - * @param propertyName Property name or placeholder. - * - * @return Path to property. Handles identifier placeholder used by {@link AuditId}. - */ - public static String determinePropertyName( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String propertyName) { - final SessionFactoryImplementor sessionFactory = versionsReader.getSessionImplementor().getFactory(); - - if ( AuditId.IDENTIFIER_PLACEHOLDER.equals( propertyName ) ) { - final String identifierPropertyName = sessionFactory.getMappingMetamodel() - .getEntityDescriptor( entityName ) - .getIdentifierPropertyName(); - propertyName = enversService.getConfig().getOriginalIdPropertyName() + "." + identifierPropertyName; - } - else { - final List identifierPropertyNames = identifierPropertyNames( sessionFactory, entityName ); - if ( identifierPropertyNames.contains( propertyName ) ) { - propertyName = enversService.getConfig().getOriginalIdPropertyName() + "." + propertyName; - } - else if ( propertyName != null ) { - // if property starts with an identifier prefix ( e.g. embedded ids ), substitute with the originalId property - // because Envers performs replacement this automatically during the mapping. - for ( String identifierPropertyName : identifierPropertyNames ) { - if ( propertyName.startsWith( identifierPropertyName + "." ) ) { - propertyName = enversService.getConfig().getOriginalIdPropertyName() + - propertyName.substring( identifierPropertyName.length() ); - break; - } - } - } - } - - return propertyName; - } - - /** - * @param enversService The EnversService - * @param aliasToEntityNameMap the map from aliases to entity names - * @param aliasToComponentPropertyNameMap the map from aliases to component property name, if an alias is for a - * component - * @param alias the alias - * @return The prefix that has to be used when referring to a property of a component. If no prefix is required or - * the alias is not a component, the empty string is returned (but never null) - */ - public static String determineComponentPropertyPrefix( - EnversService enversService, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String alias) { - String componentPrefix = ""; - final String entityName = aliasToEntityNameMap.get( alias ); - final String owningComponentPropertyName = aliasToComponentPropertyNameMap.get( alias ); - if ( owningComponentPropertyName != null ) { - final ComponentDescription componentDescription = CriteriaTools.getComponent( - enversService, - entityName, - owningComponentPropertyName - ); - if ( componentDescription.getType() == ComponentDescription.ComponentType.ONE ) { - componentPrefix = componentDescription.getPropertyName().concat( "_" ); - } - } - return componentPrefix; - } - - /** - * @param sessionFactory Session factory. - * @param entityName Entity name. - * - * @return List of property names representing entity identifier. - */ - private static List identifierPropertyNames(SessionFactoryImplementor sessionFactory, String entityName) { - final String identifierPropertyName = sessionFactory.getMappingMetamodel() - .getEntityDescriptor( entityName ) - .getIdentifierPropertyName(); - if ( identifierPropertyName != null ) { - // Single id. - return Arrays.asList( identifierPropertyName ); - } - final Type identifierType = sessionFactory.getMappingMetamodel() - .getEntityDescriptor( entityName ) - .getIdentifierType(); - if ( identifierType instanceof EmbeddedComponentType ) { - // Multiple ids. - final EmbeddedComponentType embeddedComponentType = (EmbeddedComponentType) identifierType; - return Arrays.asList( embeddedComponentType.getPropertyNames() ); - } - return Collections.emptyList(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/EntityTypeAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/EntityTypeAuditExpression.java deleted file mode 100644 index 6914b8a852dc..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/EntityTypeAuditExpression.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class EntityTypeAuditExpression implements AuditCriterion { - - private String alias; - private String entityName; - - public EntityTypeAuditExpression( - String alias, - String entityName) { - this.alias = alias; - this.entityName = entityName; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder qb, - Parameters parameters) { - // todo: add contextual detail about query generation - // - // Take an example situation where a non-audited entity extends an audited-entity and uses the - // AuditEntity#entityType method with the non-audited entity. It would stand to reason that - // it makes sense that we'd throw a NotAuditedException here rather than apply the restriction - // anyway and return no results? - // - // Knowing whether EntityTypeAuditExpression is for an association traversal or part of the - // entity inheritance criteria of the root entity would drive how we'd either throw an - // exception or be lenient and permit adding the expression without validation. - // - // For now, we're just going to allow adding the criteria without any validation because the - // code needs to support both traversal paths without any clear distinction. - // - String effectiveAlias = alias == null ? baseAlias : alias; - String effectiveEntityName = entityName; - if ( enversService.getEntitiesConfigurations().isVersioned( effectiveEntityName ) ) { - effectiveEntityName = enversService.getConfig().getAuditEntityName( effectiveEntityName ); - } - parameters.addEntityTypeRestriction( effectiveAlias, effectiveEntityName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/FunctionFunctionAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/FunctionFunctionAuditExpression.java deleted file mode 100644 index b8aa585d50ed..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/FunctionFunctionAuditExpression.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditFunction; - -/** - * An audit query criterion that defines a predicate where both sides are a function. - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class FunctionFunctionAuditExpression implements AuditCriterion { - - private AuditFunction leftFunction; - private AuditFunction rightFunction; - private String op; - - public FunctionFunctionAuditExpression( - AuditFunction leftFunction, - AuditFunction rightFunction, - String op) { - this.leftFunction = leftFunction; - this.rightFunction = rightFunction; - this.op = op; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder, - Parameters parameters) { - parameters.addWhereWithFunction( - enversService.getConfig(), - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - leftFunction, - op, - rightFunction - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/FunctionPropertyAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/FunctionPropertyAuditExpression.java deleted file mode 100644 index 4e705ab7244d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/FunctionPropertyAuditExpression.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditFunction; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * An audit query criterion that defines a predicate that is a comparison between a function - * and an audit property expression. - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class FunctionPropertyAuditExpression implements AuditCriterion { - - private String alias; - private PropertyNameGetter propertyNameGetter; - private AuditFunction function; - private String op; - - public FunctionPropertyAuditExpression( - String alias, - PropertyNameGetter propertyNameGetter, - AuditFunction function, - String op) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - this.function = function; - this.op = op; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder, - Parameters parameters) { - String effectiveAlias = alias == null ? baseAlias : alias; - String entityName = aliasToEntityNameMap.get( effectiveAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - auditReader, - entityName, - propertyNameGetter - ); - String propertyNamePrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveAlias - ); - String prefixedPropertyName = propertyNamePrefix.concat( propertyName ); - CriteriaTools.checkPropertyNotARelation( enversService, entityName, prefixedPropertyName ); - parameters.addWhereWithFunction( - enversService.getConfig(), - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveAlias, - prefixedPropertyName, - op, - function - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/IdentifierEqAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/IdentifierEqAuditExpression.java deleted file mode 100644 index f4176a9f5d87..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/IdentifierEqAuditExpression.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -/** - * A criterion that expresses that the id of an entity is equal or not equal to some specified value. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class IdentifierEqAuditExpression extends AbstractAtomicExpression { - private final Object id; - private final boolean equals; - - public IdentifierEqAuditExpression(String alias, Object id, boolean equals) { - super( alias ); - this.id = id; - this.equals = equals; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String prefix = enversService.getConfig().getOriginalIdPropertyName(); - enversService.getEntitiesConfigurations().get( entityName ) - .getIdMapper() - .addIdEqualsToQuery( parameters, id, alias, prefix, equals ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/IlikeAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/IlikeAuditExpression.java deleted file mode 100644 index 550ab74a5359..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/IlikeAuditExpression.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Locale; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -public class IlikeAuditExpression extends AbstractAtomicExpression { - - private PropertyNameGetter propertyNameGetter; - private String value; - - public IlikeAuditExpression(String alias, PropertyNameGetter propertyNameGetter, String value) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - this.value = value; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - - String prefixedPropertyName = componentPrefix.concat( propertyName ); - CriteriaTools.checkPropertyNotARelation( enversService, entityName, prefixedPropertyName ); - parameters.addWhereWithFunction( alias, prefixedPropertyName, " lower ", " like ", value.toLowerCase( Locale.ROOT ) ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/InAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/InAuditExpression.java deleted file mode 100644 index a3723bf17224..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/InAuditExpression.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class InAuditExpression extends AbstractAtomicExpression { - private PropertyNameGetter propertyNameGetter; - private Object[] values; - - public InAuditExpression(String alias, PropertyNameGetter propertyNameGetter, Object[] values) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - this.values = values; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - String prefixedPropertyName = componentPrefix.concat( propertyName ); - CriteriaTools.checkPropertyNotARelation( enversService, entityName, prefixedPropertyName ); - parameters.addWhereWithParams( alias, prefixedPropertyName, "in (", values, ")" ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/LogicalAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/LogicalAuditExpression.java deleted file mode 100644 index 3d75d8689154..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/LogicalAuditExpression.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class LogicalAuditExpression implements AuditCriterion { - private AuditCriterion lhs; - private AuditCriterion rhs; - private String op; - - public LogicalAuditExpression(AuditCriterion lhs, AuditCriterion rhs, String op) { - this.lhs = lhs; - this.rhs = rhs; - this.op = op; - } - - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String alias, - QueryBuilder qb, - Parameters parameters) { - Parameters opParameters = parameters.addSubParameters( op ); - - lhs.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - qb, - opParameters.addSubParameters( "and" ) - ); - - rhs.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - qb, - opParameters.addSubParameters( "and" ) - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NotAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NotAuditExpression.java deleted file mode 100644 index 8d5d48d49ff0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NotAuditExpression.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotAuditExpression implements AuditCriterion { - private AuditCriterion criterion; - - public NotAuditExpression(AuditCriterion criterion) { - this.criterion = criterion; - } - - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String alias, - QueryBuilder qb, - Parameters parameters) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - qb, - parameters.addNegatedParameters() - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NotNullAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NotNullAuditExpression.java deleted file mode 100644 index 0a5f61c12e90..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NotNullAuditExpression.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Locale; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotNullAuditExpression extends AbstractAtomicExpression { - private PropertyNameGetter propertyNameGetter; - - public NotNullAuditExpression(String alias, PropertyNameGetter propertyNameGetter) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - String prefixedPropertyName = componentPrefix.concat( propertyName ); - RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, prefixedPropertyName ); - - if ( relatedEntity == null ) { - parameters.addNotNullRestriction( alias, prefixedPropertyName ); - } - else if ( relatedEntity.getRelationType() == RelationType.TO_ONE ) { - relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, null, alias, null, false ); - } - else { - throw new AuditException( - String.format( - Locale.ENGLISH, - "This type of relation (%s.%s) can't be used with not null restrictions.", - entityName, - propertyName - ) - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NullAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NullAuditExpression.java deleted file mode 100644 index f785e075e97d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/NullAuditExpression.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Locale; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NullAuditExpression extends AbstractAtomicExpression { - private PropertyNameGetter propertyNameGetter; - - public NullAuditExpression(String alias, PropertyNameGetter propertyNameGetter) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, propertyName ); - String prefixedPropertyName = componentPrefix.concat( propertyName ); - - if ( relatedEntity == null ) { - parameters.addNullRestriction( alias, prefixedPropertyName ); - } - else if ( relatedEntity.getRelationType() == RelationType.TO_ONE ) { - relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, null, alias, null, true ); - } - else { - throw new AuditException( - String.format( - Locale.ENGLISH, - "This type of relation (%s.%s) can't be used with null restrictions", - entityName, - propertyName - ) - ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/PropertyAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/PropertyAuditExpression.java deleted file mode 100644 index c0c0c83e85f2..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/PropertyAuditExpression.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class PropertyAuditExpression implements AuditCriterion { - private String alias; - private PropertyNameGetter propertyNameGetter; - private String otherAlias; - private String otherPropertyName; - private String op; - - public PropertyAuditExpression( - String alias, - PropertyNameGetter propertyNameGetter, - String otherAlias, - String otherPropertyName, - String op - ) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - this.otherAlias = otherAlias; - this.otherPropertyName = otherPropertyName; - this.op = op; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder qb, - Parameters parameters) { - String effectiveAlias = alias == null ? baseAlias : alias; - String effectiveOtherAlias = otherAlias == null ? baseAlias : otherAlias; - String entityName = aliasToEntityNameMap.get( effectiveAlias ); - String otherEntityName = aliasToEntityNameMap.get( effectiveOtherAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - String propertyNamePrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveAlias - ); - String otherPropertyNamePrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - effectiveOtherAlias - ); - String prefixedPropertyName = propertyNamePrefix.concat( propertyName ); - String prefixedOtherPropertyName = otherPropertyNamePrefix.concat( otherPropertyName ); - CriteriaTools.checkPropertyNotARelation( enversService, entityName, prefixedPropertyName ); - /* - * Check that the other property name is not a relation. However, we can only - * do this for audited entities. If the other property belongs to a non-audited - * entity, we have to skip this check. - */ - if ( enversService.getEntitiesConfigurations().isVersioned( otherEntityName ) ) { - CriteriaTools.checkPropertyNotARelation( enversService, otherEntityName, prefixedOtherPropertyName ); - } - parameters.addWhere( effectiveAlias, prefixedPropertyName, op, effectiveOtherAlias, prefixedOtherPropertyName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/PropertyFunctionAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/PropertyFunctionAuditExpression.java deleted file mode 100644 index 4b4fdcb8cbc7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/PropertyFunctionAuditExpression.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditFunction; - -/** - * An audit query criterion where a function is compared to a property. - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class PropertyFunctionAuditExpression implements AuditCriterion { - - private AuditFunction function; - private String otherAlias; - private String otherPropertyName; - private String op; - - public PropertyFunctionAuditExpression( - AuditFunction function, - String otherAlias, - String otherPropertyName, - String op) { - this.function = function; - this.otherAlias = otherAlias; - this.otherPropertyName = otherPropertyName; - this.op = op; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder, - Parameters parameters) { - String effectiveOtherAlias = otherAlias == null ? baseAlias : otherAlias; - String otherEntityName = aliasToEntityNameMap.get( effectiveOtherAlias ); - /* - * Check that the other property name is not a relation. However, we can only do this for audited entities. If - * the other property belongs to a non-audited entity, we have to skip this check. - */ - if ( enversService.getEntitiesConfigurations().isVersioned( otherEntityName ) ) { - String otherPropertyNamePrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, effectiveOtherAlias - ); - CriteriaTools.checkPropertyNotARelation( - enversService, - otherEntityName, - otherPropertyNamePrefix.concat( otherPropertyName ) - ); - } - parameters.addWhereWithFunction( - enversService.getConfig(), - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - function, - op, - effectiveOtherAlias, - otherPropertyName - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RelatedAuditEqualityExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RelatedAuditEqualityExpression.java deleted file mode 100644 index eed0a8962882..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RelatedAuditEqualityExpression.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Locale; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Chris Cranford - * @since 5.2 - */ -public class RelatedAuditEqualityExpression extends AbstractAtomicExpression { - private final PropertyNameGetter propertyNameGetter; - private final Object id; - private final boolean equals; - - public RelatedAuditEqualityExpression(String alias, PropertyNameGetter propertyNameGetter, Object id, boolean equals) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - this.id = id; - this.equals = equals; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - - RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( - enversService, - entityName, - componentPrefix.concat( propertyName ) - ); - - if ( relatedEntity == null ) { - throw new AuditException( - "This criterion can only be used on a property that is a relation to another property." ); - } - else if ( relatedEntity.getRelationType() != RelationType.TO_ONE ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "This type of relation (%s.%s) can't be used with related equality restrictions", - entityName, - propertyName - ) - ); - } - relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, id, alias, null, equals ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RelatedAuditInExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RelatedAuditInExpression.java deleted file mode 100644 index 462216cd1dcc..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RelatedAuditInExpression.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.List; -import java.util.Locale; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.entities.mapper.id.QueryParameterData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; - -/** - * @author Chris Cranford - * @since 5.2 - */ -public class RelatedAuditInExpression extends AbstractAtomicExpression { - - private final PropertyNameGetter propertyNameGetter; - private final Object[] ids; - - public RelatedAuditInExpression(String alias, PropertyNameGetter propertyNameGetter, Object[] ids) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - this.ids = ids; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - - RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( - enversService, - entityName, - componentPrefix.concat( propertyName ) - ); - - if ( relatedEntity == null ) { - throw new AuditException( - "The criterion can only be used on a property that is a relation to another property." ); - } - else if ( relatedEntity.getRelationType() != RelationType.TO_ONE ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "This type of relation (%s.%s) can't be used with related in restrictions", - entityName, - propertyName - ) - ); - } - - // todo: should this throw an error if qpdList is null? is it possible? - List qpdList = relatedEntity.getIdMapper().mapToQueryParametersFromId( propertyName ); - if ( qpdList != null ) { - QueryParameterData qpd = qpdList.iterator().next(); - parameters.addWhereWithParams( alias, componentPrefix.concat( qpd.getQueryParameterName() ), "in (", ids, ")" ); - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RevisionTypeAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RevisionTypeAuditExpression.java deleted file mode 100644 index 543dbf34f05e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/RevisionTypeAuditExpression.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class RevisionTypeAuditExpression extends AbstractAtomicExpression { - private Object value; - private String op; - - public RevisionTypeAuditExpression(String alias, Object value, String op) { - super( alias ); - this.value = value; - this.op = op; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - parameters.addWhereWithParam( alias, enversService.getConfig().getRevisionTypePropertyName(), op, value ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/SimpleAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/SimpleAuditExpression.java deleted file mode 100644 index 887dc2f0176c..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/SimpleAuditExpression.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Locale; - -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.type.ComponentType; -import org.hibernate.type.Type; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SimpleAuditExpression extends AbstractAtomicExpression { - - private PropertyNameGetter propertyNameGetter; - private Object value; - private String op; - - public SimpleAuditExpression(String alias, PropertyNameGetter propertyNameGetter, Object value, String op) { - super( alias ); - this.propertyNameGetter = propertyNameGetter; - this.value = value; - this.op = op; - } - - @Override - protected void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - String entityName, - String alias, - String componentPrefix, - QueryBuilder qb, - Parameters parameters) { - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - entityName, - propertyNameGetter - ); - - String prefixedPropertyName = componentPrefix.concat( propertyName ); - RelationDescription relatedEntity = CriteriaTools.getRelatedEntity( enversService, entityName, prefixedPropertyName ); - - if ( relatedEntity == null ) { - // HHH-9178 - Add support to component type equality. - // This basically will allow = and <> operators to perform component-based equality checks. - // Any other operator for a component type will not be supported. - // Non-component types will continue to behave normally. - final SessionImplementor session = versionsReader.getSessionImplementor(); - final Type type = getPropertyType( session, entityName, propertyName ); - if ( type != null && type.isComponentType() ) { - if ( !"=".equals( op ) && !"<>".equals( op ) ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "Component-based criterion is not supported for op: %s", - op - ) - ); - } - final ComponentType componentType = (ComponentType) type; - for ( int i = 0; i < componentType.getPropertyNames().length; i++ ) { - final Object componentValue = componentType.getPropertyValue( value, i, session ); - parameters.addWhereWithParam( - alias, - prefixedPropertyName + "_" + componentType.getPropertyNames()[ i ], - op, - componentValue - ); - } - } - else { - parameters.addWhereWithParam( alias, prefixedPropertyName, op, value ); - } - } - else if ( relatedEntity.getRelationType() == RelationType.TO_ONE ) { - if ( !"=".equals( op ) && !"<>".equals( op ) ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "This type of operation: %s (%s.%s) isn't supported and can't be used in queries.", - op, - entityName, - propertyName - ) - ); - } - Object id = relatedEntity.getIdMapper().mapToIdFromEntity( value ); - relatedEntity.getIdMapper().addIdEqualsToQuery( parameters, id, alias, null, "=".equals( op ) ); - } - else { - throw new AuditException( - String.format( - "This type of relation (%s.%s) can't be used in audit query restrictions.", - entityName, - propertyName - ) - ); - } - } - - /** - * Get the property type of a given property in the specified entity. - * - * @param session the session - * @param entityName the entity name - * @param propertyName the property name - * @return the property type of the property or {@code null} if the property name isn't found. - */ - private Type getPropertyType(SessionImplementor session, String entityName, String propertyName) { - // rather than rely on QueryException from calling getPropertyType(), this allows a non-failure way - // to determine whether to return null or lookup the value safely. - final EntityPersister persister = session.getSessionFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ); - for ( String name : persister.getPropertyNames() ) { - if ( name.equals( propertyName ) ) { - return persister.getPropertyType( propertyName ); - } - } - return null; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/SimpleFunctionAuditExpression.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/SimpleFunctionAuditExpression.java deleted file mode 100644 index dfcf3d4a57ac..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/criteria/internal/SimpleFunctionAuditExpression.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.criteria.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditFunction; - -/** - * An audit query criterion that compares a function call with a scalar value. - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class SimpleFunctionAuditExpression implements AuditCriterion { - - private AuditFunction function; - private Object value; - private String op; - - public SimpleFunctionAuditExpression(AuditFunction function, Object value, String op) { - this.function = function; - this.value = value; - this.op = op; - } - - @Override - public void addToQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder qb, - Parameters parameters) { - parameters.addWhereWithFunction( - enversService.getConfig(), - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - function, - op, - value - ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AbstractAuditAssociationQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AbstractAuditAssociationQuery.java deleted file mode 100644 index fd7b70fb2d1b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AbstractAuditAssociationQuery.java +++ /dev/null @@ -1,576 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import jakarta.persistence.NoResultException; -import jakarta.persistence.NonUniqueResultException; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.CacheMode; -import org.hibernate.FlushMode; -import org.hibernate.Incubating; -import org.hibernate.LockMode; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.ComponentDescription; -import org.hibernate.envers.internal.entities.ComponentDescription.ComponentType; -import org.hibernate.envers.internal.entities.RelationDescription; -import org.hibernate.envers.internal.entities.RelationType; -import org.hibernate.envers.internal.entities.mapper.id.IdMapper; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.internal.CriteriaTools; -import org.hibernate.envers.query.order.AuditOrder; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * An abstract base class for all {@link AuditAssociationQuery} implementations. - * - * @author Felix Feisst (feisst dot felix at gmail dot com) - * @author Chris Cranford - */ -@Incubating -public abstract class AbstractAuditAssociationQuery - implements AuditAssociationQuery, AuditQueryImplementor { - - protected final EnversService enversService; - protected final AuditReaderImplementor auditReader; - protected final Q parent; - protected final QueryBuilder queryBuilder; - protected final JoinType joinType; - protected final String entityName; - protected final RelationDescription relationDescription; - protected final ComponentDescription componentDescription; - protected final String ownerAlias; - protected final String ownerEntityName; - protected final String alias; - protected final Map aliasToEntityNameMap; - protected final Map aliasToComponentPropertyNameMap; - protected final List criterions = new ArrayList<>(); - protected final AuditCriterion onClauseCriterion; - protected final Parameters parameters; - - // todo: can these association query collections be merged? - protected final List> associationQueries = new ArrayList<>(); - protected final Map>> associationQueryMap = new HashMap<>(); - - public AbstractAuditAssociationQuery( - final EnversService enversService, - final AuditReaderImplementor auditReader, - final Q parent, - final QueryBuilder queryBuilder, - final String propertyName, - final JoinType joinType, - final Map aliasToEntityNameMap, - final Map aliasToComponentPropertyNameMap, - final String ownerAlias, - final String userSuppliedAlias, - final AuditCriterion onClauseCriterion) { - this.enversService = enversService; - this.auditReader = auditReader; - this.parent = parent; - this.queryBuilder = queryBuilder; - this.joinType = joinType; - - ownerEntityName = aliasToEntityNameMap.get( ownerAlias ); - this.ownerAlias = ownerAlias; - this.alias = userSuppliedAlias == null ? queryBuilder.generateAlias() : userSuppliedAlias; - - String componentPrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - ownerAlias - ); - String prefixedPropertyName = componentPrefix.concat( propertyName ); - - relationDescription = CriteriaTools.getRelatedEntity( - enversService, - ownerEntityName, - prefixedPropertyName - ); - - componentDescription = CriteriaTools.getComponent( enversService, ownerEntityName, prefixedPropertyName ); - - if ( relationDescription == null && componentDescription == null ) { - throw new IllegalArgumentException( - String.format( - Locale.ENGLISH, - "Property %s of entity %s is not a valid association for queries", - propertyName, - ownerEntityName - ) - ); - } - - if ( relationDescription != null ) { - this.entityName = relationDescription.getToEntityName(); - } - else { - aliasToComponentPropertyNameMap.put( alias, componentDescription.getPropertyName() ); - this.entityName = ownerEntityName; - } - aliasToEntityNameMap.put( this.alias, entityName ); - this.aliasToEntityNameMap = aliasToEntityNameMap; - this.aliasToComponentPropertyNameMap = aliasToComponentPropertyNameMap; - parameters = queryBuilder.addParameters( this.alias ); - this.onClauseCriterion = onClauseCriterion; - } - - @Override - public String getAlias() { - return alias; - } - - @Override - public List getResultList() throws AuditException { - return parent.getResultList(); - } - - @Override - public Object getSingleResult() throws AuditException, NonUniqueResultException, NoResultException { - return parent.getSingleResult(); - } - - @Override - public AbstractAuditAssociationQuery> traverseRelation( - String associationName, - JoinType joinType) { - return traverseRelation( - associationName, - joinType, - null - ); - } - - @Override - public AbstractAuditAssociationQuery> traverseRelation( - String associationName, - JoinType joinType, - String alias) { - return traverseRelation( - associationName, - joinType, - alias, - null - ); - } - - public AbstractAuditAssociationQuery> traverseRelation( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClause) { - AbstractAuditAssociationQuery> query = associationQueryMap.get( associationName ); - if ( query == null ) { - query = createAssociationQuery( associationName, joinType, alias, onClause ); - associationQueries.add( (AbstractAuditAssociationQuery) query ); - associationQueryMap.put( associationName, query ); - } - return query; - } - - protected abstract AbstractAuditAssociationQuery> createAssociationQuery( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClause); - - @Override - public AbstractAuditAssociationQuery add(AuditCriterion criterion) { - criterions.add( criterion ); - return this; - } - - @Override - public AbstractAuditAssociationQuery addProjection(AuditProjection projection) { - String projectionEntityAlias = projection.getAlias( alias ); - String projectionEntityName = aliasToEntityNameMap.get( projectionEntityAlias ); - registerProjection( projectionEntityName, projection ); - projection.addProjectionToQuery( - enversService, - auditReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - queryBuilder - ); - return this; - } - - @Override - public AbstractAuditAssociationQuery addOrder(AuditOrder order) { - AuditOrder.OrderData orderData = order.getData( enversService.getConfig() ); - String orderEntityAlias = orderData.getAlias( alias ); - String orderEntityName = aliasToEntityNameMap.get( orderEntityAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - auditReader, - orderEntityName, - orderData.getPropertyName() - ); - String componentPrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - orderEntityAlias - ); - queryBuilder.addOrder( - orderEntityAlias, - componentPrefix.concat( propertyName ), - orderData.isAscending(), - orderData.getNullPrecedence() - ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setMaxResults(int maxResults) { - parent.setMaxResults( maxResults ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setFirstResult(int firstResult) { - parent.setFirstResult( firstResult ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setCacheable(boolean cacheable) { - parent.setCacheable( cacheable ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setCacheRegion(String cacheRegion) { - parent.setCacheRegion( cacheRegion ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setComment(String comment) { - parent.setComment( comment ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setFlushMode(FlushMode flushMode) { - parent.setFlushMode( flushMode ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setCacheMode(CacheMode cacheMode) { - parent.setCacheMode( cacheMode ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setTimeout(int timeout) { - parent.setTimeout( timeout ); - return this; - } - - @Override - public AbstractAuditAssociationQuery setLockMode(LockMode lockMode) { - parent.setLockMode( lockMode ); - return this; - } - - public Q up() { - return parent; - } - - protected void addCriterionToQuery(AuditReaderImplementor versionsReader) { - Parameters onClauseParameters; - if ( relationDescription != null ) { - onClauseParameters = createEntityJoin( enversService.getConfig() ); - } - else { - onClauseParameters = createComponentJoin( enversService.getConfig() ); - } - - if ( onClauseCriterion != null ) { - onClauseCriterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - queryBuilder, - onClauseParameters - ); - } - - for ( AuditCriterion criterion : criterions ) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - alias, - queryBuilder, - parameters - ); - } - - for ( AbstractAuditAssociationQuery subQuery : associationQueries ) { - subQuery.addCriterionToQuery( versionsReader ); - } - } - - protected Parameters createEntityJoin(Configuration configuration) { - boolean targetIsAudited = enversService.getEntitiesConfigurations().isVersioned( entityName ); - String targetEntityName = entityName; - if ( targetIsAudited ) { - targetEntityName = configuration.getAuditEntityName( entityName ); - } - String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - String revisionPropertyPath = configuration.getRevisionNumberPath(); - - Parameters onClauseParameters; - if ( relationDescription.getRelationType() == RelationType.TO_ONE ) { - Parameters joinConditionParameters = queryBuilder.addJoin( joinType, targetEntityName, alias, false ); - onClauseParameters = joinConditionParameters; - - // owner.reference_id = target.originalId.id - IdMapper idMapperTarget; - String prefix; - if ( targetIsAudited ) { - idMapperTarget = enversService.getEntitiesConfigurations().get( entityName ).getIdMapper(); - prefix = alias.concat( "." ).concat( originalIdPropertyName ); - } - else { - idMapperTarget = enversService.getEntitiesConfigurations() - .getNotVersionEntityConfiguration( entityName ) - .getIdMapper(); - prefix = alias; - } - relationDescription.getIdMapper().addIdsEqualToQuery( - joinConditionParameters, - ownerAlias, - idMapperTarget, - prefix - ); - } - else if ( relationDescription.getRelationType() == RelationType.TO_MANY_NOT_OWNING ) { - if ( !targetIsAudited ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "Cannot build queries for relation type %s to non audited target entities", - relationDescription.getRelationType() - ) - ); - } - Parameters joinConditionParameters = queryBuilder.addJoin( joinType, targetEntityName, alias, false ); - onClauseParameters = joinConditionParameters; - - // owner.originalId.id = target.reference_id - IdMapper idMapperOwner = enversService.getEntitiesConfigurations().get( ownerEntityName ).getIdMapper(); - String prefix = ownerAlias.concat( "." ).concat( originalIdPropertyName ); - relationDescription.getIdMapper().addIdsEqualToQuery( - joinConditionParameters, - alias, - idMapperOwner, - prefix ); - } - else if ( relationDescription.getRelationType() == RelationType.TO_MANY_MIDDLE - || relationDescription.getRelationType() == RelationType.TO_MANY_MIDDLE_NOT_OWNING ) { - if ( !targetIsAudited && relationDescription.getRelationType() == RelationType.TO_MANY_MIDDLE_NOT_OWNING ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "Cannot build queries for relation type %s to non audited target entities", - relationDescription.getRelationType() - ) - ); - } - - String middleEntityAlias = queryBuilder.generateAlias(); - - // join middle_entity - Parameters joinConditionParametersMiddle = queryBuilder.addJoin( - joinType, - relationDescription.getAuditMiddleEntityName(), - middleEntityAlias, - false - ); - - // join target_entity - Parameters joinConditionParametersTarget = queryBuilder.addJoin( joinType, targetEntityName, alias, false ); - onClauseParameters = joinConditionParametersTarget; - - Parameters middleParameters = queryBuilder.addParameters( middleEntityAlias ); - String middleOriginalIdPropertyPath = middleEntityAlias + "." + originalIdPropertyName; - - // join condition: owner.reference_id = middle.id_ref_ing - String ownerPrefix = ownerAlias + "." + originalIdPropertyName; - MiddleIdData referencingIdData = relationDescription.getReferencingIdData(); - referencingIdData.getPrefixedMapper().addIdsEqualToQuery( - joinConditionParametersMiddle, - middleOriginalIdPropertyPath, - referencingIdData.getOriginalMapper(), - ownerPrefix - ); - - // join condition: middle.id_ref_ed = target.id - String targetPrefix = alias; - if ( targetIsAudited ) { - targetPrefix = alias + "." + originalIdPropertyName; - } - MiddleIdData referencedIdData = relationDescription.getReferencedIdData(); - referencedIdData.getPrefixedMapper().addIdsEqualToQuery( - joinConditionParametersTarget, - middleOriginalIdPropertyPath, - referencedIdData.getOriginalMapper(), - targetPrefix - ); - - // filter revisions of middle entity - Parameters middleParametersToUse = middleParameters; - if ( joinType == JoinType.LEFT ) { - middleParametersToUse = middleParameters.addSubParameters( Parameters.OR ); - middleParametersToUse.addNullRestriction( revisionPropertyPath, true ); - middleParametersToUse = middleParametersToUse.addSubParameters( Parameters.AND ); - } - - enversService.getAuditStrategy().addAssociationAtRevisionRestriction( - queryBuilder, - middleParametersToUse, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencingIdData, - relationDescription.getAuditMiddleEntityName(), - middleOriginalIdPropertyPath, - revisionPropertyPath, - originalIdPropertyName, - middleEntityAlias, - true - ); - - // filter deleted middle entities - if ( joinType == JoinType.LEFT ) { - middleParametersToUse = middleParameters.addSubParameters( Parameters.OR ); - middleParametersToUse.addNullRestriction( configuration.getRevisionTypePropertyName(), true ); - } - middleParametersToUse.addWhereWithParam( configuration.getRevisionTypePropertyName(), true, "!=", RevisionType.DEL ); - } - else { - throw new AuditException( - String.format( - Locale.ENGLISH, - "Cannot build queries for relation type %s", - relationDescription.getRelationType() - ) - ); - } - - return onClauseParameters; - } - - protected Parameters createComponentJoin(Configuration configuration) { - String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - String revisionPropertyPath = configuration.getRevisionNumberPath(); - Parameters onClauseParameters; - if ( componentDescription.getType() == ComponentType.MANY ) { - // join middle_entity - Parameters joinConditionParameters = queryBuilder.addJoin( - joinType, - componentDescription.getAuditMiddleEntityName(), - alias, - false - ); - onClauseParameters = joinConditionParameters; - - String middleOriginalIdPropertyPath = alias + "." + originalIdPropertyName; - - // join condition: owner.reference_id = middle.id_ref_ing - String ownerPrefix = ownerAlias + "." + originalIdPropertyName; - MiddleIdData middleIdData = componentDescription.getMiddleIdData(); - middleIdData.getPrefixedMapper().addIdsEqualToQuery( - joinConditionParameters, - middleOriginalIdPropertyPath, - middleIdData.getOriginalMapper(), - ownerPrefix - ); - - // filter revisions of middle entity - Parameters middleParameters = queryBuilder.addParameters( alias ); - Parameters middleParametersToUse = middleParameters; - if ( joinType == JoinType.LEFT ) { - middleParametersToUse = middleParameters.addSubParameters( Parameters.OR ); - middleParametersToUse.addNullRestriction( revisionPropertyPath, true ); - middleParametersToUse = middleParametersToUse.addSubParameters( Parameters.AND ); - } - configuration.getAuditStrategy().addAssociationAtRevisionRestriction( - queryBuilder, - middleParametersToUse, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - middleIdData, - componentDescription.getAuditMiddleEntityName(), - middleOriginalIdPropertyPath, - revisionPropertyPath, - originalIdPropertyName, - alias, - true - ); - - // filter deleted middle entities - String middleRevTypePropertyPath = middleOriginalIdPropertyPath + "." + configuration.getRevisionTypePropertyName(); - if ( joinType == JoinType.LEFT ) { - middleParametersToUse = middleParameters.addSubParameters( Parameters.OR ); - middleParametersToUse.addNullRestriction( middleRevTypePropertyPath, false ); - } - middleParametersToUse.addWhereWithParam( middleRevTypePropertyPath, false, "!=", RevisionType.DEL ); - } - else { - // ComponentType.ONE - /* - * The properties of a single component are directly mapped on the owner entity. Therefore no join would be - * required to access those properties (except the case an explicit on-clause has been specified). However, - * the user has supplied an alias and may be accessing properties of this component through that alias: If - * no join is generated, the 'virtual' alias has to be retranslated to the owning entity alias. To keep - * things simple a join on the owning entity itself is generated. The join is cheaper than other audit joins - * because we can join on the complete primary key (id + rev) and do not have to range filter on the target - * revision number. - */ - String targetEntityName = configuration.getAuditEntityName( entityName ); - Parameters joinConditionParameters = queryBuilder.addJoin( joinType, targetEntityName, alias, false ); - onClauseParameters = joinConditionParameters; - - // join condition: owner.reference_id = middle.id_reference_id - String ownerPrefix = ownerAlias + "." + originalIdPropertyName; - String middleOriginalIdPropertyPath = alias + "." + originalIdPropertyName; - IdMapper idMapper = enversService.getEntitiesConfigurations().get( entityName ).getIdMapper(); - idMapper.addIdsEqualToQuery( joinConditionParameters, ownerPrefix, middleOriginalIdPropertyPath ); - - // join condition: owner.rev=middle.rev - joinConditionParameters.addWhere( ownerAlias, revisionPropertyPath, "=", alias, revisionPropertyPath ); - } - return onClauseParameters; - } - - @Override - public void registerProjection(final String entityName, AuditProjection projection) { - parent.registerProjection( entityName, projection ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AbstractAuditQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AbstractAuditQuery.java deleted file mode 100644 index 4d6b11299b8b..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AbstractAuditQuery.java +++ /dev/null @@ -1,368 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import jakarta.persistence.NoResultException; -import jakarta.persistence.NonUniqueResultException; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.CacheMode; -import org.hibernate.FlushMode; -import org.hibernate.LockMode; -import org.hibernate.LockOptions; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.envers.internal.entities.EntityConfiguration; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.internal.CriteriaTools; -import org.hibernate.envers.query.order.AuditOrder; -import org.hibernate.envers.query.projection.AuditProjection; -import org.hibernate.envers.tools.Pair; -import org.hibernate.query.Query; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; - -/** - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Chris Cranford - */ -public abstract class AbstractAuditQuery implements AuditQueryImplementor { - protected EntityInstantiator entityInstantiator; - protected List criterions; - - protected String entityName; - protected String entityClassName; - protected String versionsEntityName; - protected QueryBuilder qb; - protected final Map aliasToEntityNameMap = new HashMap<>(); - protected final Map aliasToComponentPropertyNameMap = new HashMap<>(); - - protected boolean hasOrder; - - protected final EnversService enversService; - protected final AuditReaderImplementor versionsReader; - - // todo: can these association query collections be merged? - protected final List> associationQueries = new ArrayList<>(); - protected final Map> associationQueryMap = new HashMap<>(); - protected final List> projections = new ArrayList<>(); - - protected AbstractAuditQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls) { - this( enversService, versionsReader, cls, cls.getName() ); - } - - protected AbstractAuditQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls, - String entityName) { - this.enversService = enversService; - this.versionsReader = versionsReader; - - criterions = new ArrayList<>(); - entityInstantiator = new EntityInstantiator( enversService, versionsReader ); - - entityClassName = cls.getName(); - this.entityName = entityName; - versionsEntityName = enversService.getConfig().getAuditEntityName( entityName ); - if ( !enversService.getEntitiesConfigurations().isVersioned( entityName ) ) { - throw new NotAuditedException( entityName, "Entity [" + entityName + "] is not versioned" ); - } - aliasToEntityNameMap.put( REFERENCED_ENTITY_ALIAS, entityName ); - - qb = new QueryBuilder( versionsEntityName, REFERENCED_ENTITY_ALIAS, versionsReader.getSessionImplementor().getFactory() ); - } - - @Override - public String getAlias() { - return REFERENCED_ENTITY_ALIAS; - } - - protected Query buildQuery() { - Query query = qb.toQuery( versionsReader.getSessionImplementor() ); - setQueryProperties( query ); - return query; - } - - protected List buildAndExecuteQuery() { - Query query = buildQuery(); - - return query.list(); - } - - public abstract List list() throws AuditException; - - public List getResultList() throws AuditException { - return list(); - } - - public Object getSingleResult() throws AuditException, NonUniqueResultException, NoResultException { - List result = list(); - - if ( result == null || result.size() == 0 ) { - throw new NoResultException(); - } - - if ( result.size() > 1 ) { - throw new NonUniqueResultException(); - } - - return result.get( 0 ); - } - - public AuditQuery add(AuditCriterion criterion) { - criterions.add( criterion ); - return this; - } - - // Projection and order - - public AuditQuery addProjection(AuditProjection projection) { - String projectionEntityAlias = projection.getAlias( REFERENCED_ENTITY_ALIAS ); - String projectionEntityName = aliasToEntityNameMap.get( projectionEntityAlias ); - registerProjection( projectionEntityName, projection ); - projection.addProjectionToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - REFERENCED_ENTITY_ALIAS, - qb - ); - return this; - } - - @Override - public void registerProjection(String entityName, AuditProjection projection) { - projections.add( Pair.make( entityName, projection ) ); - } - - protected boolean hasProjection() { - return !projections.isEmpty(); - } - - public AuditQuery addOrder(AuditOrder order) { - hasOrder = true; - AuditOrder.OrderData orderData = order.getData( enversService.getConfig() ); - String orderEntityAlias = orderData.getAlias( REFERENCED_ENTITY_ALIAS ); - String orderEntityName = aliasToEntityNameMap.get( orderEntityAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - versionsReader, - orderEntityName, - orderData.getPropertyName() - ); - String componentPrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - orderEntityAlias - ); - qb.addOrder( - orderEntityAlias, - componentPrefix.concat( propertyName ), - orderData.isAscending(), - orderData.getNullPrecedence() - ); - return this; - } - - @Override - public AuditAssociationQuery traverseRelation(String associationName, JoinType joinType) { - return traverseRelation( - associationName, - joinType, - null - ); - } - - @Override - public AuditAssociationQuery traverseRelation(String associationName, JoinType joinType, String alias) { - return traverseRelation( - associationName, - joinType, - alias, - null ); - } - - // Query properties - - private Integer maxResults; - private Integer firstResult; - private Boolean cacheable; - private String cacheRegion; - private String comment; - private FlushMode flushMode; - private CacheMode cacheMode; - private Integer timeout; - private LockOptions lockOptions = new LockOptions( LockMode.NONE ); - - public AuditQuery setMaxResults(int maxResults) { - this.maxResults = maxResults; - return this; - } - - public AuditQuery setFirstResult(int firstResult) { - this.firstResult = firstResult; - return this; - } - - public AuditQuery setCacheable(boolean cacheable) { - this.cacheable = cacheable; - return this; - } - - public AuditQuery setCacheRegion(String cacheRegion) { - this.cacheRegion = cacheRegion; - return this; - } - - public AuditQuery setComment(String comment) { - this.comment = comment; - return this; - } - - public AuditQuery setFlushMode(FlushMode flushMode) { - this.flushMode = flushMode; - return this; - } - - public AuditQuery setCacheMode(CacheMode cacheMode) { - this.cacheMode = cacheMode; - return this; - } - - public AuditQuery setTimeout(int timeout) { - this.timeout = timeout; - return this; - } - - /** - * Set lock mode - * - * @param lockMode The {@link LockMode} used for this query. - * - * @return this object - * - * @deprecated Instead use setLockOptions - */ - @Deprecated - public AuditQuery setLockMode(LockMode lockMode) { - lockOptions.setLockMode( lockMode ); - return this; - } - - /** - * Set lock options - * - * @param lockOptions The @{link LockOptions} used for this query. - * - * @return this object - */ - public AuditQuery setLockOptions(LockOptions lockOptions) { - LockOptions.copy( lockOptions, this.lockOptions ); - return this; - } - - protected void setQueryProperties(Query query) { - if ( maxResults != null ) { - query.setMaxResults( maxResults ); - } - if ( firstResult != null ) { - query.setFirstResult( firstResult ); - } - if ( cacheable != null ) { - query.setCacheable( cacheable ); - } - if ( cacheRegion != null ) { - query.setCacheRegion( cacheRegion ); - } - if ( comment != null ) { - query.setComment( comment ); - } - if ( flushMode != null ) { - query.setHibernateFlushMode( flushMode ); - } - if ( cacheMode != null ) { - query.setCacheMode( cacheMode ); - } - if ( timeout != null ) { - query.setTimeout( timeout ); - } - if ( lockOptions != null && lockOptions.getLockMode() != LockMode.NONE ) { - query.setLockMode( REFERENCED_ENTITY_ALIAS, lockOptions.getLockMode() ); - } - } - - protected List applyProjections(final List queryResult, final Number revision) { - final List result = new ArrayList( queryResult.size() ); - if ( hasProjection() ) { - for (final Object qr : queryResult) { - if ( projections.size() == 1 ) { - // qr is the value of the projection itself - final Pair projection = projections.get( 0 ); - result.add( - projection.getSecond().convertQueryResult( - enversService, - entityInstantiator, - projection.getFirst(), - revision, - qr - ) - ); - } - else { - // qr is an array where each of its components holds the value of corresponding projection - Object[] qresults = (Object[]) qr; - Object[] tresults = new Object[qresults.length]; - for ( int i = 0; i < qresults.length; i++ ) { - final Pair projection = projections.get( i ); - tresults[i] = projection.getSecond().convertQueryResult( - enversService, - entityInstantiator, - projection.getFirst(), - revision, - qresults[i] - ); - } - result.add( tresults ); - } - } - } - else { - entityInstantiator.addInstancesFromVersionsEntities( entityName, result, queryResult, revision ); - } - return result; - } - - protected EntityConfiguration getEntityConfiguration() { - return enversService.getEntitiesConfigurations().get( entityName ); - } - - protected String getEntityName() { - // todo: can this be replaced by a call to getEntittyConfiguration#getEntityClassName()? - return entityName; - } - - protected void addAssociationQuery(String associationName, AbstractAuditAssociationQuery query) { - associationQueries.add( query ); - associationQueryMap.put( associationName, query ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AuditQueryImplementor.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AuditQueryImplementor.java deleted file mode 100644 index 9cb335eb1cc7..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/AuditQueryImplementor.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import org.hibernate.Incubating; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@Incubating -interface AuditQueryImplementor extends AuditQuery { - - void registerProjection(final String entityName, final AuditProjection projection); - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesAtRevisionAssociationQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesAtRevisionAssociationQuery.java deleted file mode 100644 index 22f85a97674e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesAtRevisionAssociationQuery.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import java.util.Map; - -import org.hibernate.Incubating; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; - -import jakarta.persistence.criteria.JoinType; - -/** - * An {@link AuditAssociationQuery} implementation for - * {@link EntitiesAtRevisionQuery} and {@link EntitiesModifiedAtRevisionQuery} query types. - * - * @author Chris Cranford - */ -@Incubating -public class EntitiesAtRevisionAssociationQuery extends AbstractAuditAssociationQuery { - - public EntitiesAtRevisionAssociationQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Q parent, - QueryBuilder queryBuilder, - String propertyName, - JoinType joinType, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String ownerAlias, - String userSuppliedAlias, - AuditCriterion onClauseCriterion) { - super( - enversService, - auditReader, - parent, - queryBuilder, - propertyName, - joinType, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - ownerAlias, - userSuppliedAlias, - onClauseCriterion - ); - } - - @Override - protected AbstractAuditAssociationQuery> createAssociationQuery( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClause) { - return new EntitiesAtRevisionAssociationQuery<>( - enversService, - auditReader, - this, - queryBuilder, - associationName, - joinType, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - this.alias, - alias, - onClauseCriterion - ); - } - - @Override - protected Parameters createEntityJoin(Configuration configuration) { - Parameters onClauseParameters = super.createEntityJoin( configuration ); - - if ( enversService.getEntitiesConfigurations().isVersioned( entityName ) ) { - final String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - final String revisionPropertyPath = configuration.getRevisionNumberPath(); - - // filter revision of target entity - Parameters parametersToUse = parameters; - if ( joinType == JoinType.LEFT ) { - parametersToUse = parameters.addSubParameters( Parameters.OR ); - parametersToUse.addNullRestriction( revisionPropertyPath, true ); - parametersToUse = parametersToUse.addSubParameters( Parameters.AND ); - } - MiddleIdData referencedIdData = new MiddleIdData( - configuration, - enversService.getEntitiesConfigurations().get( entityName ).getIdMappingData(), - null, - entityName, - true - ); - enversService.getAuditStrategy().addEntityAtRevisionRestriction( - configuration, - queryBuilder, - parametersToUse, - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencedIdData, - revisionPropertyPath, - originalIdPropertyName, - alias, - queryBuilder.generateAlias(), - true - ); - } - - return onClauseParameters; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesAtRevisionQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesAtRevisionQuery.java deleted file mode 100644 index f8a49d2b0463..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesAtRevisionQuery.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import java.util.Collection; -import java.util.List; - -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.query.Query; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS_DEF_AUD_STR; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Chris Cranford - */ -public class EntitiesAtRevisionQuery extends AbstractAuditQuery { - private final Number revision; - private final boolean includeDeletions; - - public EntitiesAtRevisionQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls, - Number revision, - boolean includeDeletions) { - super( enversService, versionsReader, cls ); - this.revision = revision; - this.includeDeletions = includeDeletions; - } - - public EntitiesAtRevisionQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, Class cls, - String entityName, Number revision, boolean includeDeletions) { - super( enversService, versionsReader, cls, entityName ); - this.revision = revision; - this.includeDeletions = includeDeletions; - } - - public List list() { - /* - * The query that we need to create: - * SELECT new list(e) FROM versionsReferencedEntity e - * WHERE - * (all specified conditions, transformed, on the "e" entity) AND - * (selecting e entities at revision :revision) - * --> for DefaultAuditStrategy: - * e.revision = (SELECT max(e2.revision) FROM versionsReferencedEntity e2 - * WHERE e2.revision <= :revision AND e2.id = e.id) - * - * --> for ValidityAuditStrategy: - * e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null) - * - * AND - * (only non-deleted entities) - * e.revision_type != DEL - */ - Configuration configuration = enversService.getConfig(); - String revisionPropertyPath = configuration.getRevisionNumberPath(); - String originalIdPropertyName = configuration.getOriginalIdPropertyName(); - - MiddleIdData referencedIdData = new MiddleIdData( - configuration, - enversService.getEntitiesConfigurations().get( entityName ).getIdMappingData(), - null, - entityName, - enversService.getEntitiesConfigurations().isVersioned( entityName ) - ); - - // (selecting e entities at revision :revision) - // --> based on auditStrategy (see above) - enversService.getAuditStrategy().addEntityAtRevisionRestriction( - configuration, - qb, - qb.getRootParameters(), - revisionPropertyPath, - configuration.getRevisionEndFieldName(), - true, - referencedIdData, - revisionPropertyPath, - originalIdPropertyName, - REFERENCED_ENTITY_ALIAS, - REFERENCED_ENTITY_ALIAS_DEF_AUD_STR, - true - ); - - if ( configuration.isFindByRevisionExactMatch() ) { - // When EnversSettings#FIND_BY_REVISION_EXACT_MATCH is true, this forces this condition - qb.getRootParameters().addWhereWithNamedParam( revisionPropertyPath, "=", REVISION_PARAMETER ); - } - - if ( !includeDeletions ) { - // e.revision_type != DEL - qb.getRootParameters().addWhereWithParam( configuration.getRevisionTypePropertyName(), "<>", RevisionType.DEL ); - } - - // all specified conditions - for ( AuditCriterion criterion : criterions ) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - QueryConstants.REFERENCED_ENTITY_ALIAS, - qb, - qb.getRootParameters() - ); - } - - for ( AbstractAuditAssociationQuery associationQuery : associationQueries ) { - associationQuery.addCriterionToQuery( versionsReader ); - } - - Query query = buildQuery(); - // add named parameter (used for ValidityAuditStrategy and association queries) - Collection params = query.getParameterMetadata().getNamedParameterNames(); - if ( params.contains( REVISION_PARAMETER ) ) { - query.setParameter( REVISION_PARAMETER, revision ); - } - List queryResult = query.list(); - return applyProjections( queryResult, revision ); - } - - @Override - public AuditAssociationQuery traverseRelation( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClauseCriterion) { - AbstractAuditAssociationQuery query = associationQueryMap.get( associationName ); - if ( query == null ) { - query = new EntitiesAtRevisionAssociationQuery<>( - enversService, - versionsReader, - this, - qb, - associationName, - joinType, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - REFERENCED_ENTITY_ALIAS, - alias, - onClauseCriterion - ); - addAssociationQuery( associationName, query ); - } - return query; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesModifiedAtRevisionQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesModifiedAtRevisionQuery.java deleted file mode 100644 index 7f0f4fcee50a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/EntitiesModifiedAtRevisionQuery.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import java.util.Collection; -import java.util.List; - -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.query.Query; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * In comparison to {@link EntitiesAtRevisionQuery} this query returns an empty collection if an entity - * of a certain type has not been changed in a given revision. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - * - * @see EntitiesAtRevisionQuery - */ -public class EntitiesModifiedAtRevisionQuery extends AbstractAuditQuery { - private final Number revision; - - public EntitiesModifiedAtRevisionQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls, - Number revision) { - super( enversService, versionsReader, cls ); - this.revision = revision; - } - - public EntitiesModifiedAtRevisionQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls, - String entityName, - Number revision) { - super( enversService, versionsReader, cls, entityName ); - this.revision = revision; - } - - @Override - public List list() { - /* - * The query that we need to create: - * SELECT new list(e) FROM versionsReferencedEntity e - * WHERE - * (all specified conditions, transformed, on the "e" entity) AND - * e.revision = :revision - */ - String revisionPropertyPath = enversService.getConfig().getRevisionNumberPath(); - qb.getRootParameters().addWhereWithParam( revisionPropertyPath, "=", revision ); - - // all specified conditions - for ( AuditCriterion criterion : criterions ) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - QueryConstants.REFERENCED_ENTITY_ALIAS, - qb, - qb.getRootParameters() - ); - } - - for ( AbstractAuditAssociationQuery associationQuery : associationQueries ) { - associationQuery.addCriterionToQuery( versionsReader ); - } - - Query query = buildQuery(); - // add named parameter (used for ValidityAuditStrategy and association queries) - Collection params = query.getParameterMetadata().getNamedParameterNames(); - if ( params.contains( REVISION_PARAMETER ) ) { - query.setParameter( REVISION_PARAMETER, revision ); - } - List queryResult = query.list(); - return applyProjections( queryResult, revision ); - } - - @Override - public AuditAssociationQuery traverseRelation( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClauseCriterion) { - AbstractAuditAssociationQuery query = associationQueryMap.get( associationName ); - if ( query == null ) { - query = new EntitiesAtRevisionAssociationQuery<>( - enversService, - versionsReader, - this, - qb, - associationName, - joinType, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - REFERENCED_ENTITY_ALIAS, - alias, - null - ); - addAssociationQuery( associationName, query ); - } - return query; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/RevisionsOfEntityAssociationQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/RevisionsOfEntityAssociationQuery.java deleted file mode 100644 index 12f3558df310..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/RevisionsOfEntityAssociationQuery.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import java.util.Map; - -import org.hibernate.Incubating; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; - -import jakarta.persistence.criteria.JoinType; - -/** - * An {@link AuditAssociationQuery} implementation for {@link RevisionsOfEntityQuery}. - * - * @author Chris Cranford - */ -@Incubating -public class RevisionsOfEntityAssociationQuery extends AbstractAuditAssociationQuery { - - public RevisionsOfEntityAssociationQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Q parent, - QueryBuilder queryBuilder, - String propertyName, - JoinType joinType, - Map aliasToEntityNameMap, - Map aliastoComponentPropertyNameMap, - String ownerAlias, - String userSuppliedAlias, - AuditCriterion onClauseCriterion) { - super( - enversService, - auditReader, - parent, - queryBuilder, - propertyName, - joinType, - aliasToEntityNameMap, - aliastoComponentPropertyNameMap, - ownerAlias, - userSuppliedAlias, - onClauseCriterion - ); - } - - @Override - protected AbstractAuditAssociationQuery> createAssociationQuery( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClauseCriterion) { - return new RevisionsOfEntityAssociationQuery<>( - enversService, - auditReader, - this, - queryBuilder, - associationName, - joinType, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - this.alias, - alias, - onClauseCriterion - ); - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/RevisionsOfEntityQuery.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/RevisionsOfEntityQuery.java deleted file mode 100644 index a28ff1822309..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/impl/RevisionsOfEntityQuery.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.impl; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REFERENCED_ENTITY_ALIAS; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.PropertyData; -import org.hibernate.envers.internal.entities.mapper.ExtendedPropertyMapper; -import org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.query.AuditAssociationQuery; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.proxy.HibernateProxy; - -/** - * @author Adam Warski (adam at warski dot org) - * @author HernпїЅn Chanfreau - * @author Chris Cranford - */ -public class RevisionsOfEntityQuery extends AbstractAuditQuery { - private final boolean selectEntitiesOnly; - private final boolean selectDeletedEntities; - private final boolean selectRevisionInfoOnly; - private final boolean includePropertyChanges; - - public RevisionsOfEntityQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls, - boolean selectEntitiesOnly, - boolean selectDeletedEntities, - boolean selectRevisionInfoOnly, - boolean includePropertyChanges) { - super( enversService, versionsReader, cls ); - - this.selectEntitiesOnly = selectEntitiesOnly; - this.selectDeletedEntities = selectDeletedEntities; - this.selectRevisionInfoOnly = selectRevisionInfoOnly && !selectEntitiesOnly; - this.includePropertyChanges = includePropertyChanges; - } - - public RevisionsOfEntityQuery( - EnversService enversService, - AuditReaderImplementor versionsReader, - Class cls, String entityName, - boolean selectEntitiesOnly, - boolean selectDeletedEntities, - boolean selectRevisionInfoOnly, - boolean includePropertyChanges) { - super( enversService, versionsReader, cls, entityName ); - - this.selectEntitiesOnly = selectEntitiesOnly; - this.selectDeletedEntities = selectDeletedEntities; - this.selectRevisionInfoOnly = selectRevisionInfoOnly && !selectEntitiesOnly; - this.includePropertyChanges = includePropertyChanges; - } - - @Override - public AuditAssociationQuery traverseRelation( - String associationName, - JoinType joinType, - String alias, - AuditCriterion onClauseCriterion) { - if ( !selectEntitiesOnly ) { - throw new IllegalStateException( - "Audit association queries are only permitted when the query is created with selectEntitiesOnly=true" - ); - } - - AbstractAuditAssociationQuery query = associationQueryMap.get( associationName ); - if ( query == null ) { - query = new RevisionsOfEntityAssociationQuery<>( - enversService, - versionsReader, - this, - qb, - associationName, - joinType, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - REFERENCED_ENTITY_ALIAS, - alias, - null - ); - - addAssociationQuery( associationName, query ); - } - - return query; - } - - private Number getRevisionNumber(Map versionsEntity) { - Configuration configuration = enversService.getConfig(); - - String originalId = configuration.getOriginalIdPropertyName(); - String revisionPropertyName = configuration.getRevisionFieldName(); - - Object revisionInfoObject = ( (Map) versionsEntity.get( originalId ) ).get( revisionPropertyName ); - - if ( revisionInfoObject instanceof HibernateProxy ) { - return (Number) ( (HibernateProxy) revisionInfoObject ).getHibernateLazyInitializer().getInternalIdentifier(); - } - else { - // Not a proxy - must be read from cache or with a join - return enversService.getRevisionInfoNumberReader().getRevisionNumber( revisionInfoObject ); - } - } - - @SuppressWarnings({"unchecked", "rawtypes"}) - @Override - public List list() throws AuditException { - Configuration configuration = enversService.getConfig(); - - /* - The query that should be executed in the versions table: - SELECT e (unless another projection is specified) FROM ent_ver e, rev_entity r WHERE - e.revision_type != DEL (if selectDeletedEntities == false) AND - e.revision = r.revision AND - (all specified conditions, transformed, on the "e" entity) - ORDER BY e.revision ASC (unless another order or projection is specified) - */ - if ( !selectDeletedEntities ) { - // e.revision_type != DEL AND - qb.getRootParameters().addWhereWithParam( configuration.getRevisionTypePropertyName(), "<>", RevisionType.DEL ); - } - - // all specified conditions, transformed - for ( AuditCriterion criterion : criterions ) { - criterion.addToQuery( - enversService, - versionsReader, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - QueryConstants.REFERENCED_ENTITY_ALIAS, - qb, - qb.getRootParameters() - ); - } - - for ( AbstractAuditAssociationQuery associationQuery : associationQueries ) { - associationQuery.addCriterionToQuery( versionsReader ); - } - - if ( !hasProjection() && !hasOrder ) { - String revisionPropertyPath = configuration.getRevisionNumberPath(); - qb.addOrder( QueryConstants.REFERENCED_ENTITY_ALIAS, revisionPropertyPath, true, null ); - } - - if ( !selectEntitiesOnly ) { - qb.addFrom( configuration.getRevisionInfo().getRevisionInfoEntityName(), "r", true ); - qb.getRootParameters().addWhere( - configuration.getRevisionNumberPath(), - true, - "=", - "r.id", - false - ); - } - - return getQueryResults(); - } - - private boolean isEntityUsingModifiedFlags() { - // todo: merge HHH-8973 ModifiedFlagMapperSupport into 6.0 to get this behavior by default - final ExtendedPropertyMapper propertyMapper = getEntityConfiguration().getPropertyMapper(); - for ( PropertyData propertyData : propertyMapper.getProperties().keySet() ) { - if ( propertyData.isUsingModifiedFlag() ) { - return true; - } - } - return false; - } - - private Set getChangedPropertyNames(Map dataMap, Object revisionType) { - final Set changedPropertyNames = new HashSet<>(); - // we're only interested in changed properties on modification rows. - if ( revisionType == RevisionType.MOD ) { - final String modifiedFlagSuffix = enversService.getConfig().getModifiedFlagsSuffix(); - for ( Map.Entry entry : dataMap.entrySet() ) { - final String key = entry.getKey(); - if ( key.endsWith( modifiedFlagSuffix ) ) { - if ( entry.getValue() != null && Boolean.parseBoolean( entry.getValue().toString() ) ) { - changedPropertyNames.add( key.substring( 0, key.length() - modifiedFlagSuffix.length() ) ); - } - } - } - } - return changedPropertyNames; - } - - private List getQueryResults() { - List queryResults = buildAndExecuteQuery(); - if ( hasProjection() ) { - return queryResults; - } - else if ( selectRevisionInfoOnly ) { - return queryResults.stream().map( e -> ( (Object[]) e )[1] ).collect( Collectors.toList() ); - } - else { - List entities = new ArrayList(); - if ( selectEntitiesOnly ) { - for ( Object row : queryResults ) { - final Map versionsEntity = (Map) row; - entities.add( getQueryResultRowValue( versionsEntity, null, getEntityName() ) ); - } - } - else { - for ( Object row : queryResults ) { - final Object[] rowArray = (Object[]) row; - final Map versionsEntity = (Map) rowArray[ 0 ]; - final Object revisionData = rowArray[ 1 ]; - entities.add( getQueryResultRowValue( versionsEntity, revisionData, getEntityName() ) ); - } - } - return entities; - } - } - - private Object getQueryResultRowValue(Map versionsData, Object revisionData, String entityName) { - final Number revision = getRevisionNumber( versionsData ); - - final Object entity = entityInstantiator.createInstanceFromVersionsEntity( entityName, versionsData, revision ); - if ( selectEntitiesOnly ) { - return entity; - } - - final String revisionTypePropertyName = enversService.getConfig().getRevisionTypePropertyName(); - Object revisionType = versionsData.get( revisionTypePropertyName ); - if ( !includePropertyChanges ) { - return new Object[] { entity, revisionData, revisionType }; - } - - if ( !isEntityUsingModifiedFlags() ) { - throw new AuditException( - String.format( - Locale.ROOT, - "The specified entity [%s] does not support or use modified flags.", - getEntityConfiguration().getEntityClassName() - ) - ); - } - - final Set changedPropertyNames = getChangedPropertyNames( versionsData, revisionType ); - return new Object[] { entity, revisionData, revisionType, changedPropertyNames }; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/EntityPropertyName.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/EntityPropertyName.java deleted file mode 100644 index 244c816f60e0..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/EntityPropertyName.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.configuration.Configuration; - -/** - * Used for specifying restrictions on a property of an audited entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class EntityPropertyName implements PropertyNameGetter { - private final String propertyName; - - public EntityPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - public String get(Configuration configuration) { - return propertyName; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/ModifiedFlagPropertyName.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/ModifiedFlagPropertyName.java deleted file mode 100644 index e3d3c219ac87..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/ModifiedFlagPropertyName.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.boot.internal.ModifiedColumnNameResolver; -import org.hibernate.envers.configuration.Configuration; - -/** - * PropertyNameGetter for modified flags - * - * @author Michal Skowronek (mskowr at o2 dot pl) - * @author Chris Cranford - */ -public class ModifiedFlagPropertyName implements PropertyNameGetter { - private final PropertyNameGetter propertyNameGetter; - - public ModifiedFlagPropertyName(PropertyNameGetter propertyNameGetter) { - this.propertyNameGetter = propertyNameGetter; - } - - @Override - public String get(Configuration configuration) { - final String suffix = configuration.getModifiedFlagsSuffix(); - return ModifiedColumnNameResolver.getName( propertyNameGetter.get( configuration ), suffix ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/OriginalIdPropertyName.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/OriginalIdPropertyName.java deleted file mode 100644 index 2d49c85df66e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/OriginalIdPropertyName.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.configuration.Configuration; - -/** - * Used for specifying restrictions on the identifier. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class OriginalIdPropertyName implements PropertyNameGetter { - private final String idPropertyName; - - public OriginalIdPropertyName(String idPropertyName) { - this.idPropertyName = idPropertyName; - } - - @Override - public String get(Configuration configuration) { - return configuration.getOriginalIdPropertyName() + "." + idPropertyName; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/PropertyNameGetter.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/PropertyNameGetter.java deleted file mode 100644 index ae864d8c0e67..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/PropertyNameGetter.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.configuration.Configuration; - -/** - * Provides a function to get the name of a property, which is used in a query, to apply some restrictions on it. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface PropertyNameGetter { - /** - * @param configuration the envers configuration - * @return Name of the property, to be used in a query. - */ - String get(Configuration configuration); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionNumberPropertyName.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionNumberPropertyName.java deleted file mode 100644 index fc33ed91aa55..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionNumberPropertyName.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.configuration.Configuration; - -/** - * Used for specifying restrictions on the revision number, corresponding to an audit entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class RevisionNumberPropertyName implements PropertyNameGetter { - @Override - public String get(Configuration configuration) { - return configuration.getRevisionNumberPath(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionPropertyPropertyName.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionPropertyPropertyName.java deleted file mode 100644 index 70352ba9a77f..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionPropertyPropertyName.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.configuration.Configuration; - -/** - * Used for specifying restrictions on a property of the revision entity, which is associated with an audit entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class RevisionPropertyPropertyName implements PropertyNameGetter { - private final String propertyName; - - public RevisionPropertyPropertyName(String propertyName) { - this.propertyName = propertyName; - } - - @Override - public String get(Configuration configuration) { - return configuration.getRevisionPropertyPath( propertyName ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionTypePropertyName.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionTypePropertyName.java deleted file mode 100644 index 310de4e6c9c9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/internal/property/RevisionTypePropertyName.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.internal.property; - -import org.hibernate.envers.configuration.Configuration; - -/** - * Used for specifying restrictions on the revision number, corresponding to an audit entity. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class RevisionTypePropertyName implements PropertyNameGetter { - @Override - public String get(Configuration configuration) { - return configuration.getRevisionTypePropertyName(); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/order/AuditOrder.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/order/AuditOrder.java deleted file mode 100644 index 651e3a4fc3bf..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/order/AuditOrder.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.order; - -import org.hibernate.envers.configuration.Configuration; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface AuditOrder { - - /** - * Specifies the null order precedence for the order-by column specification. - * - * @param nullPrecedence the null precedence, may be {@code null}. - * @return this {@link AuditOrder} for chaining purposes - */ - AuditOrder nulls(NullPrecedence nullPrecedence); - - /** - * @param configuration the configuration - * @return the order data. - */ - OrderData getData(Configuration configuration); - - class OrderData { - - private final String alias; - private final String propertyName; - private final boolean ascending; - private final NullPrecedence nullPrecedence; - - public OrderData(String alias, String propertyName, boolean ascending, NullPrecedence nullPrecedence) { - this.alias = alias; - this.propertyName = propertyName; - this.ascending = ascending; - this.nullPrecedence = nullPrecedence; - } - - public String getAlias(String baseAlias) { - return alias == null ? baseAlias : alias; - } - - public String getPropertyName() { - return propertyName; - } - - public boolean isAscending() { - return ascending; - } - - public NullPrecedence getNullPrecedence() { - return nullPrecedence; - } - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/order/NullPrecedence.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/order/NullPrecedence.java deleted file mode 100644 index 9e82718322f9..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/order/NullPrecedence.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.order; - -/** - * Defines the possible null handling modes. - * - * @author Chris Cranford - */ -public enum NullPrecedence { - /** - * Null values will be rendered before non-null values. - */ - FIRST, - - /** - * Null values will be rendered after non-null values. - */ - LAST -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/order/internal/PropertyAuditOrder.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/order/internal/PropertyAuditOrder.java deleted file mode 100644 index 911abddcdf80..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/order/internal/PropertyAuditOrder.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.order.internal; - -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; -import org.hibernate.envers.query.order.AuditOrder; -import org.hibernate.envers.query.order.NullPrecedence; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class PropertyAuditOrder implements AuditOrder { - private final String alias; - private final PropertyNameGetter propertyNameGetter; - private final boolean asc; - private NullPrecedence nullPrecedence; - - public PropertyAuditOrder(String alias, PropertyNameGetter propertyNameGetter, boolean asc) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - this.asc = asc; - } - - @Override - public AuditOrder nulls(NullPrecedence nullPrecedence) { - this.nullPrecedence = nullPrecedence; - return this; - } - - @Override - public OrderData getData(Configuration configuration) { - return new OrderData( alias, propertyNameGetter.get( configuration ), asc, nullPrecedence ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/AuditProjection.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/AuditProjection.java deleted file mode 100644 index 957863d0963d..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/AuditProjection.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.projection; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public interface AuditProjection { - - /** - * Adds an audit projection to the specified query. - * - * @param enversService the Envers service - * @param auditReader the audit reader implementor - * @param aliasToEntityNameMap the entity name alias map - * @param baseAlias the base alias, if one is specified; may be {@literal null} - * @param queryBuilder the query builder - */ - void addProjectionToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder); - - /** - * Get the alias associated with the audit projection. - * - * @param baseAlias the base alias if one exists; may be {@literal null} - * @return the alias - */ - String getAlias(String baseAlias); - - /** - * @param enversService the Envers service - * @param entityInstantiator the entity instantiator - * @param entityName the name of the entity for which the projection has been added - * @param revision the revision - * @param value the value to convert - * @return the converted value - */ - Object convertQueryResult( - final EnversService enversService, - final EntityInstantiator entityInstantiator, - final String entityName, - final Number revision, - final Object value - ); - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/internal/EntityAuditProjection.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/internal/EntityAuditProjection.java deleted file mode 100644 index 5cc15924225e..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/internal/EntityAuditProjection.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.projection.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - * @author Chris Cranford - */ -public class EntityAuditProjection implements AuditProjection { - - private final String alias; - private final boolean distinct; - - public EntityAuditProjection(String alias, boolean distinct) { - this.alias = alias; - this.distinct = distinct; - } - - @Override - public String getAlias(String baseAlias) { - return alias == null ? baseAlias : alias; - } - - @Override - public void addProjectionToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder) { - String projectionEntityAlias = getAlias( baseAlias ); - queryBuilder.addProjection( - null, - projectionEntityAlias, - null, - distinct ); - } - - @Override - public Object convertQueryResult( - final EnversService enversService, - final EntityInstantiator entityInstantiator, - final String entityName, - final Number revision, - final Object value) { - final Object result; - if ( enversService.getEntitiesConfigurations().isVersioned( entityName ) ) { - result = entityInstantiator.createInstanceFromVersionsEntity( entityName, (Map) value, revision ); - } - else { - result = value; - } - return result; - } - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/internal/PropertyAuditProjection.java b/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/internal/PropertyAuditProjection.java deleted file mode 100644 index 915cf2f36695..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/query/projection/internal/PropertyAuditProjection.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.query.projection.internal; - -import java.util.Map; - -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.entities.EntityInstantiator; -import org.hibernate.envers.internal.reader.AuditReaderImplementor; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.query.criteria.internal.CriteriaTools; -import org.hibernate.envers.query.internal.property.PropertyNameGetter; -import org.hibernate.envers.query.projection.AuditProjection; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class PropertyAuditProjection implements AuditProjection { - private final String alias; - private final PropertyNameGetter propertyNameGetter; - private final String function; - private final boolean distinct; - - public PropertyAuditProjection(String alias, PropertyNameGetter propertyNameGetter, String function, boolean distinct) { - this.alias = alias; - this.propertyNameGetter = propertyNameGetter; - this.function = function; - this.distinct = distinct; - } - - @Override - public String getAlias(String baseAlias) { - return alias == null ? baseAlias : alias; - } - - @Override - public void addProjectionToQuery( - EnversService enversService, - AuditReaderImplementor auditReader, - Map aliasToEntityNameMap, - Map aliasToComponentPropertyNameMap, - String baseAlias, - QueryBuilder queryBuilder) { - String projectionEntityAlias = getAlias( baseAlias ); - String projectionEntityName = aliasToEntityNameMap.get( projectionEntityAlias ); - String propertyName = CriteriaTools.determinePropertyName( - enversService, - auditReader, - projectionEntityName, - propertyNameGetter - ); - String propertyNamePrefix = CriteriaTools.determineComponentPropertyPrefix( - enversService, - aliasToEntityNameMap, - aliasToComponentPropertyNameMap, - projectionEntityAlias - ); - queryBuilder.addProjection( - function, - projectionEntityAlias, - propertyNamePrefix.concat( propertyName ), - distinct - ); - } - - @Override - public Object convertQueryResult( - EnversService enversService, - EntityInstantiator entityInstantiator, - String entityName, - Number revision, - Object value) { - return value; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/AuditStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/AuditStrategy.java deleted file mode 100644 index 8a3865b0d333..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/AuditStrategy.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy; - -import org.hibernate.Session; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; - -/** - * Behaviours of different audit strategy for populating audit data. - * - * @deprecated use {@link org.hibernate.envers.strategy.spi.AuditStrategy} instead. - * - * @author Stephanie Pau - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -@Deprecated(since = "5.4") -public interface AuditStrategy extends org.hibernate.envers.strategy.spi.AuditStrategy { - /** - * Perform the persistence of audited data for regular entities. - * - * @param session Session, which can be used to persist the data. - * @param entityName Name of the entity, in which the audited change happens - * @param enversService The EnversService - * @param id Id of the entity. - * @param data Audit data to persist - * @param revision Current revision data - * @deprecated use {@link org.hibernate.envers.strategy.spi.AuditStrategy#perform(Session, String, Configuration, Object, Object, Object)} - */ - @Deprecated(since = "5.2.1") - default void perform( - Session session, - String entityName, - EnversService enversService, - Object id, - Object data, - Object revision) { - perform( - session, - entityName, - enversService.getConfig(), - id, - data, - revision - ); - } - - - /** - * Perform the persistence of audited data for collection ("middle") entities. - * - * @param session Session, which can be used to persist the data. - * @param entityName Name of the entity, in which the audited change happens. - * @param propertyName The name of the property holding the persistent collection - * @param enversService The EnversService - * @param persistentCollectionChangeData Collection change data to be persisted. - * @param revision Current revision data - * @deprecated use {@link #performCollectionChange(Session, String, String, Configuration, PersistentCollectionChangeData, Object)} - */ - @Deprecated(since = "5.2.1") - default void performCollectionChange( - Session session, - String entityName, - String propertyName, - EnversService enversService, - PersistentCollectionChangeData persistentCollectionChangeData, - Object revision) { - performCollectionChange( - session, - entityName, - propertyName, - enversService.getConfig(), - persistentCollectionChangeData, - revision - ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/DefaultAuditStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/DefaultAuditStrategy.java deleted file mode 100644 index 7cac896959a6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/DefaultAuditStrategy.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy; - -/** - * Default strategy is to simply persist the audit data. - * - * @deprecated use {@link org.hibernate.envers.strategy.internal.DefaultAuditStrategy} instead. - * - * @author Adam Warski - * @author Stephanie Pau - * @author Chris Cranford - */ -@Deprecated(since = "5.4") -public class DefaultAuditStrategy extends org.hibernate.envers.strategy.internal.DefaultAuditStrategy { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java deleted file mode 100644 index 000f92c5d2aa..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/ValidityAuditStrategy.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy; - -/** - * Audit strategy which persists and retrieves audit information using a validity algorithm, based on the - * start-revision and end-revision of a row in the audit tables. - *

This algorithm works as follows: - *

    - *
  • For a new row that is persisted in an audit table, only the start-revision column of that row is set
  • - *
  • At the same time the end-revision field of the previous audit row is set to this revision
  • - *
  • Queries are retrieved using 'between start and end revision', instead of a subquery.
  • - *
- *

- * This has a few important consequences that need to be judged against against each other: - *

    - *
  • Persisting audit information is a bit slower, because an extra row is updated
  • - *
  • Retrieving audit information is a lot faster
  • - *
- * - * @deprecated use {@link org.hibernate.envers.strategy.internal.ValidityAuditStrategy} instead. - * - * @author Stephanie Pau - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -@Deprecated(since = "5.4") -public class ValidityAuditStrategy extends org.hibernate.envers.strategy.internal.ValidityAuditStrategy { - -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/internal/DefaultAuditStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/internal/DefaultAuditStrategy.java deleted file mode 100644 index ef0e105f8fad..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/internal/DefaultAuditStrategy.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy.internal; - -import org.hibernate.Session; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.synchronization.SessionCacheCleaner; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.strategy.AuditStrategy; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.MIDDLE_ENTITY_ALIAS_DEF_AUD_STR; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * Default implementation of the {@link org.hibernate.envers.strategy.spi.AuditStrategy} contract. - *

- * This strategy handles the persistence of audit entity data in a very simplistic way. - * - * @author Adam Warski - * @author Stephanie Pau - * @author Chris Cranford - */ -public class DefaultAuditStrategy implements AuditStrategy { - private final SessionCacheCleaner sessionCacheCleaner; - - public DefaultAuditStrategy() { - sessionCacheCleaner = new SessionCacheCleaner(); - } - - @Override - public void perform( - Session session, - String entityName, - Configuration configuration, - Object id, - Object data, - Object revision) { - session.persist( configuration.getAuditEntityName( entityName ), data ); - sessionCacheCleaner.scheduleAuditDataRemoval( session, data ); - } - - @Override - public void performCollectionChange( - Session session, - String entityName, - String propertyName, - Configuration configuration, - PersistentCollectionChangeData persistentCollectionChangeData, - Object revision) { - session.persist( persistentCollectionChangeData.getEntityName(), persistentCollectionChangeData.getData() ); - sessionCacheCleaner.scheduleAuditDataRemoval( session, persistentCollectionChangeData.getData() ); - } - - /** - * {@inheritDoc} - * - * For this implementation, a subquery is used - *

- * {@code e.revision = (SELECT max(...) ...} - */ - @Override - public void addEntityAtRevisionRestriction( - Configuration configuration, - QueryBuilder rootQueryBuilder, - Parameters parameters, - String revisionProperty, - String revisionEndProperty, - boolean addAlias, - MiddleIdData idData, - String revisionPropertyPath, - String originalIdPropertyName, - String alias1, - String alias2, - boolean inclusive) { - // create a subquery builder - // SELECT max(e.revision) FROM versionsReferencedEntity e2 - QueryBuilder maxERevQb = rootQueryBuilder.newSubQueryBuilder( idData.getAuditEntityName(), alias2 ); - maxERevQb.addProjection( "max", alias2, revisionPropertyPath, false ); - // WHERE - Parameters maxERevQbParameters = maxERevQb.getRootParameters(); - // e2.revision <= :revision - maxERevQbParameters.addWhereWithNamedParam( revisionPropertyPath, inclusive ? "<=" : "<", REVISION_PARAMETER ); - // e2.id_ref_ed = e.id_ref_ed - idData.getOriginalMapper().addIdsEqualToQuery( - maxERevQbParameters, - alias1 + "." + originalIdPropertyName, alias2 + "." + originalIdPropertyName - ); - - // add subquery to rootParameters - String subqueryOperator = configuration.getCorrelatedSubqueryOperator(); - parameters.addWhere( revisionProperty, addAlias, subqueryOperator, maxERevQb ); - } - - /** - * {@inheritDoc} - * - * For this implmeentation, the a subquery is used - *

- * {@code e.revision = (SELECT max(...) ...} - */ - @Override - public void addAssociationAtRevisionRestriction( - QueryBuilder rootQueryBuilder, - Parameters parameters, - String revisionProperty, - String revisionEndProperty, - boolean addAlias, - MiddleIdData referencingIdData, - String versionsMiddleEntityName, - String eeOriginalIdPropertyPath, - String revisionPropertyPath, - String originalIdPropertyName, - String alias1, - boolean inclusive, - MiddleComponentData... componentDatas) { - // SELECT max(ee2.revision) FROM middleEntity ee2 - QueryBuilder maxEeRevQb = rootQueryBuilder.newSubQueryBuilder( - versionsMiddleEntityName, - MIDDLE_ENTITY_ALIAS_DEF_AUD_STR - ); - maxEeRevQb.addProjection( "max", MIDDLE_ENTITY_ALIAS_DEF_AUD_STR, revisionPropertyPath, false ); - // WHERE - Parameters maxEeRevQbParameters = maxEeRevQb.getRootParameters(); - // ee2.revision <= :revision - maxEeRevQbParameters.addWhereWithNamedParam( revisionPropertyPath, inclusive ? "<=" : "<", REVISION_PARAMETER ); - // ee2.originalId.* = ee.originalId.* - String ee2OriginalIdPropertyPath = MIDDLE_ENTITY_ALIAS_DEF_AUD_STR + "." + originalIdPropertyName; - referencingIdData.getPrefixedMapper().addIdsEqualToQuery( - maxEeRevQbParameters, - eeOriginalIdPropertyPath, - ee2OriginalIdPropertyPath - ); - for ( MiddleComponentData componentData : componentDatas ) { - componentData.getComponentMapper().addMiddleEqualToQuery( - maxEeRevQbParameters, - eeOriginalIdPropertyPath, - alias1, - ee2OriginalIdPropertyPath, - MIDDLE_ENTITY_ALIAS_DEF_AUD_STR - ); - } - - // add subquery to rootParameters - parameters.addWhere( revisionProperty, addAlias, "=", maxEeRevQb ); - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/internal/ValidityAuditStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/internal/ValidityAuditStrategy.java deleted file mode 100644 index c2bbd95aea10..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/internal/ValidityAuditStrategy.java +++ /dev/null @@ -1,757 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy.internal; - -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Types; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.hibernate.FlushMode; -import org.hibernate.LockOptions; -import org.hibernate.Session; -import org.hibernate.engine.jdbc.spi.JdbcCoordinator; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.boot.model.BasicAttribute; -import org.hibernate.envers.boot.model.Column; -import org.hibernate.envers.boot.model.ManyToOneAttribute; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.internal.metadata.RevisionInfoHelper; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.revisioninfo.RevisionInfoNumberReader; -import org.hibernate.envers.internal.synchronization.SessionCacheCleaner; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.envers.strategy.spi.AuditStrategyContext; -import org.hibernate.envers.strategy.spi.MappingContext; -import org.hibernate.event.spi.EventSource; -import org.hibernate.metamodel.mapping.AttributeMapping; -import org.hibernate.metamodel.mapping.ModelPart; -import org.hibernate.persister.entity.JoinedSubclassEntityPersister; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.persister.entity.UnionSubclassEntityPersister; -import org.hibernate.property.access.spi.Getter; -import org.hibernate.sql.ComparisonRestriction; -import org.hibernate.sql.Update; -import org.hibernate.type.BasicType; -import org.hibernate.type.CollectionType; -import org.hibernate.type.ComponentType; -import org.hibernate.type.MapType; -import org.hibernate.type.StandardBasicTypes; -import org.hibernate.type.Type; - -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.MIDDLE_ENTITY_ALIAS; -import static org.hibernate.envers.internal.entities.mapper.relation.query.QueryConstants.REVISION_PARAMETER; - -/** - * An audit strategy implementation that persists and fetches audit information using a validity - * algorithm, based on the start-revision and end-revision of a row in the audit table schema. - *

- * This algorithm works as follows: - *

    - *
  • For a new row, only the start-revision column is set in the row.
  • - *
  • Concurrently, the end-revision of the prior audit row is set to the current revision
  • - *
  • Queries using a between start and end revision predicate rather than using subqueries.
  • - *
- *

- * This has a few important consequences which must be considered: - *

    - *
  • Persisting audit information is sightly slower due to an extra update required
  • - *
  • Retreiving audit information is considerably faster
  • - *
- * - * @author Stephanie Pau - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Chris Cranford - */ -public class ValidityAuditStrategy implements AuditStrategy { - /** - * getter for the revision entity field annotated with @RevisionTimestamp - */ - private Getter revisionTimestampGetter; - - private final SessionCacheCleaner sessionCacheCleaner; - - public ValidityAuditStrategy() { - sessionCacheCleaner = new SessionCacheCleaner(); - } - - @Override - public void postInitialize(AuditStrategyContext context) { - setRevisionTimestampGetter( context.getRevisionInfoTimestampAccessor() ); - } - - @Override - public void addAdditionalColumns(MappingContext mappingContext) { - if ( !mappingContext.isRevisionEndTimestampOnly() ) { - // Add revision end field since mapping is not requesting only the timestamp. - final ManyToOneAttribute revEndMapping = new ManyToOneAttribute( - mappingContext.getConfiguration().getRevisionEndFieldName(), - mappingContext.getRevisionInfoPropertyType(), - true, - true, - false, - mappingContext.getRevisionInfoExplicitTypeName() - ); - - RevisionInfoHelper.addOrModifyColumn( - revEndMapping, - mappingContext.getConfiguration().getRevisionEndFieldName() - ); - - mappingContext.getEntityMapping().addAttribute( revEndMapping ); - } - - if ( mappingContext.getConfiguration().isRevisionEndTimestampEnabled() ) { - // add a column for the timestamp of the end revision - final String revisionInfoTimestampTypeName; - if ( mappingContext.getConfiguration().isRevisionEndTimestampNumeric() ) { - revisionInfoTimestampTypeName = StandardBasicTypes.LONG.getName(); - } - else { - revisionInfoTimestampTypeName = StandardBasicTypes.TIMESTAMP.getName(); - } - - String revEndTimestampPropertyName = mappingContext.getConfiguration().getRevisionEndTimestampFieldName(); - String revEndTimestampColumnName = revEndTimestampPropertyName; - if ( !mappingContext.getConfiguration().isRevisionEndTimestampUseLegacyPlacement() ) { - if ( mappingContext.isRevisionEndTimestampOnly() ) { - // properties across a joined inheritance model cannot have the same name. - // what is done here is we adjust just the property name so it is seen as unique in - // the mapping model but keep the column representation with the configured timestamp column name. - revEndTimestampPropertyName = mappingContext.getConfiguration().getRevisionEndTimestampFieldName() - + "_" - + mappingContext.getEntityMapping().getAuditTableData().getAuditTableName(); - } - } - final BasicAttribute revEndTimestampMapping = new BasicAttribute( - revEndTimestampPropertyName, - revisionInfoTimestampTypeName, - true, - true, - false - ); - revEndTimestampMapping.addColumn( new Column( revEndTimestampColumnName ) ); - mappingContext.getEntityMapping().addAttribute( revEndTimestampMapping ); - } - } - - @Override - public void perform( - final Session session, - final String entityName, - final Configuration configuration, - final Object id, - final Object data, - final Object revision) { - final String auditedEntityName = configuration.getAuditEntityName( entityName ); - - // Save the audit data - session.persist( auditedEntityName, data ); - - // Update the end date of the previous row. - // - // When application reuses identifiers of previously removed entities: - // The UPDATE statement will no-op if an entity with a given identifier has been - // inserted for the first time. But in case a deleted primary key value was - // reused, this guarantees correct strategy behavior: exactly one row with - // null end date exists for each identifier. - final boolean reuseEntityIdentifier = configuration.isAllowIdentifierReuse(); - if ( reuseEntityIdentifier || getRevisionType( configuration, data ) != RevisionType.ADD ) { - // Register transaction completion process to guarantee execution of UPDATE statement after INSERT. - ( (EventSource) session ).getActionQueue().registerProcess( sessionImplementor -> { - // Construct the update contexts - final List contexts = getUpdateContexts( - entityName, - auditedEntityName, - sessionImplementor, - configuration, - id, - revision - ); - - if ( contexts.isEmpty() ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "Failed to build update contexts for entity %s and id %s", - auditedEntityName, - id - ) - ); - } - - for ( UpdateContext context : contexts ) { - final int rows = executeUpdate( sessionImplementor, context ); - if ( rows != 1 ) { - final RevisionType revisionType = getRevisionType( configuration, data ); - if ( !reuseEntityIdentifier || revisionType != RevisionType.ADD ) { - throw new AuditException( - String.format( - Locale.ENGLISH, - "Cannot update previous revision for entity %s and id %s (%s rows modified).", - auditedEntityName, - id, - rows - ) - ); - } - } - } - } ); - } - sessionCacheCleaner.scheduleAuditDataRemoval( session, data ); - } - - @Override - @SuppressWarnings("unchecked") - public void performCollectionChange( - Session session, - String entityName, - String propertyName, - Configuration configuration, - PersistentCollectionChangeData persistentCollectionChangeData, Object revision) { - final QueryBuilder qb = new QueryBuilder( - persistentCollectionChangeData.getEntityName(), - MIDDLE_ENTITY_ALIAS, - ( (SharedSessionContractImplementor) session ).getFactory() - ); - - final String originalIdPropName = configuration.getOriginalIdPropertyName(); - final Map originalId = (Map) persistentCollectionChangeData.getData().get( - originalIdPropName - ); - final String revisionFieldName = configuration.getRevisionFieldName(); - final String revisionTypePropName = configuration.getRevisionTypePropertyName(); - final String ordinalPropName = configuration.getEmbeddableSetOrdinalPropertyName(); - - // Adding a parameter for each id component, except the rev number and type. - for ( Map.Entry originalIdEntry : originalId.entrySet() ) { - if ( !revisionFieldName.equals( originalIdEntry.getKey() ) - && !revisionTypePropName.equals( originalIdEntry.getKey() ) - && !ordinalPropName.equals( originalIdEntry.getKey() ) ) { - qb.getRootParameters().addWhereWithParam( - originalIdPropName + "." + originalIdEntry.getKey(), - true, "=", originalIdEntry.getValue() - ); - } - } - - if ( isNonIdentifierWhereConditionsRequired( entityName, propertyName, (SessionImplementor) session ) ) { - addNonIdentifierWhereConditions( qb, persistentCollectionChangeData.getData(), originalIdPropName ); - } - - addEndRevisionNullRestriction( configuration, qb.getRootParameters() ); - - final List l = qb.toQuery( session ).setHibernateFlushMode(FlushMode.MANUAL).setLockOptions( LockOptions.UPGRADE ).list(); - - // Update the last revision if one exists. - // HHH-5967: with collections, the same element can be added and removed multiple times. So even if it's an - // ADD, we may need to update the last revision. - if ( l.size() > 0 ) { - updateLastRevision( - session, configuration, l, originalId, persistentCollectionChangeData.getEntityName(), revision - ); - } - - // Save the audit data - session.persist( persistentCollectionChangeData.getEntityName(), persistentCollectionChangeData.getData() ); - sessionCacheCleaner.scheduleAuditDataRemoval( session, persistentCollectionChangeData.getData() ); - } - - /** - * {@inheritDoc} - * - * For this implmenetation, the revision-end column is used - *

- * {@code e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null} - */ - @Override - public void addEntityAtRevisionRestriction( - Configuration configuration, - QueryBuilder rootQueryBuilder, - Parameters parameters, - String revisionProperty, - String revisionEndProperty, - boolean addAlias, - MiddleIdData idData, - String revisionPropertyPath, - String originalIdPropertyName, - String alias1, - String alias2, - boolean inclusive) { - addRevisionRestriction( parameters, revisionProperty, revisionEndProperty, addAlias, inclusive ); - } - - /** - * {@inheritDoc} - * - * For this implmenetation, the revision-end column is used - *

- * {@code e.revision <= :revision and (e.endRevision > :revision or e.endRevision is null} - */ - @Override - public void addAssociationAtRevisionRestriction( - QueryBuilder rootQueryBuilder, - Parameters parameters, - String revisionProperty, - String revisionEndProperty, - boolean addAlias, - MiddleIdData referencingIdData, - String versionsMiddleEntityName, - String eeOriginalIdPropertyPath, - String revisionPropertyPath, - String originalIdPropertyName, - String alias1, - boolean inclusive, - MiddleComponentData... componentDatas) { - addRevisionRestriction( parameters, revisionProperty, revisionEndProperty, addAlias, inclusive ); - } - - /** - * @deprecated with no replacement. - */ - @Deprecated(since = "5.4") - public void setRevisionTimestampGetter(Getter revisionTimestampGetter) { - this.revisionTimestampGetter = revisionTimestampGetter; - } - - private void addRevisionRestriction( - Parameters rootParameters, String revisionProperty, String revisionEndProperty, - boolean addAlias, boolean inclusive) { - // e.revision <= _revision and (e.endRevision > _revision or e.endRevision is null) - Parameters subParm = rootParameters.addSubParameters( "or" ); - rootParameters.addWhereWithNamedParam( revisionProperty, addAlias, inclusive ? "<=" : "<", REVISION_PARAMETER ); - subParm.addWhereWithNamedParam( - revisionEndProperty + ".id", addAlias, inclusive ? ">" : ">=", REVISION_PARAMETER - ); - subParm.addWhere( revisionEndProperty, addAlias, "is", "null", false ); - } - - @SuppressWarnings("unchecked") - private RevisionType getRevisionType(Configuration configuration, Object data) { - return (RevisionType) ( (Map) data ).get( configuration.getRevisionTypePropertyName() ); - } - - @SuppressWarnings("unchecked") - private void updateLastRevision( - Session session, - Configuration configuration, - List l, - Object id, - String auditedEntityName, - Object revision) { - // There should be one entry - if ( l.size() == 1 ) { - // Setting the end revision to be the current rev - Object previousData = l.get( 0 ); - String revisionEndFieldName = configuration.getRevisionEndFieldName(); - ( (Map) previousData ).put( revisionEndFieldName, revision ); - - if ( configuration.isRevisionEndTimestampEnabled() ) { - // Determine the value of the revision property annotated with @RevisionTimestamp - String revEndTimestampFieldName = configuration.getRevisionEndTimestampFieldName(); - Object revEndTimestampObj = this.revisionTimestampGetter.get( revision ); - Date revisionEndTimestamp = convertRevEndTimestampToDate( revEndTimestampObj ); - - // Setting the end revision timestamp - ( (Map) previousData ).put( revEndTimestampFieldName, revisionEndTimestamp ); - } - - // Saving the previous version - session.persist( auditedEntityName, previousData ); - sessionCacheCleaner.scheduleAuditDataRemoval( session, previousData ); - } - else { - throw new RuntimeException( "Cannot find previous revision for entity " + auditedEntityName + " and id " + id ); - } - } - - private Date convertRevEndTimestampToDate(Object revEndTimestampObj) { - // convert to a java.util.Date - if ( revEndTimestampObj instanceof Date ) { - return (Date) revEndTimestampObj; - } - return new Date( (Long) revEndTimestampObj ); - } - - private Long convertRevEndTimestampToLong(Object revEndTimstampObj) { - if ( revEndTimstampObj instanceof Date ) { - return ( (Date) revEndTimstampObj ).getTime(); - } - return (Long) revEndTimstampObj; - } - - private Object getRevEndTimestampValue(Configuration configuration, Object value) { - if ( configuration.isRevisionEndTimestampNumeric() ) { - return convertRevEndTimestampToLong( value ); - } - return convertRevEndTimestampToDate( value ); - } - - private EntityPersister getEntityPersister(String entityName, SessionImplementor sessionImplementor) { - return sessionImplementor.getFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ); - } - - private void addEndRevisionNullRestriction(Configuration configuration, Parameters rootParameters) { - rootParameters.addWhere( configuration.getRevisionEndFieldName(), true, "is", "null", false ); - } - - private void addNonIdentifierWhereConditions(QueryBuilder qb, Map data, String originalIdPropertyName) { - final Parameters parameters = qb.getRootParameters(); - for ( Map.Entry entry : data.entrySet() ) { - if ( !originalIdPropertyName.equals( entry.getKey() ) ) { - if ( entry.getValue() != null ) { - parameters.addWhereWithParam( entry.getKey(), true, "=", entry.getValue() ); - } - else { - parameters.addNullRestriction( entry.getKey(), true ); - } - } - } - } - - private boolean isNonIdentifierWhereConditionsRequired(String entityName, String propertyName, SessionImplementor session) { - final Type propertyType = session.getSessionFactory() - .getMappingMetamodel() - .getEntityDescriptor( entityName ).getPropertyType( propertyName ); - if ( propertyType instanceof CollectionType ) { - final CollectionType collectionType = (CollectionType) propertyType; - final Type collectionElementType = collectionType.getElementType( session.getSessionFactory() ); - if ( collectionElementType instanceof ComponentType ) { - // required for Embeddables - return true; - } - else if ( isMaterializedClob( collectionElementType ) ) { - // for Map<> using @Lob annotations - return collectionType instanceof MapType; - } - } - return false; - } - - private boolean isMaterializedClob(Type collectionElementType) { - if ( collectionElementType instanceof BasicType ) { - final BasicType basicType = (BasicType) collectionElementType; - return basicType.getJavaType() == String.class && ( - basicType.getJdbcType().getDdlTypeCode() == Types.CLOB - || basicType.getJdbcType().getDdlTypeCode() == Types.NCLOB - ); - } - return false; - } - - /** - * Executes the {@link UpdateContext} within the scope of the specified session. - * - * @param session the session - * @param context the update context to be executed - * @return the number of rows affected by the operation - */ - private int executeUpdate(SessionImplementor session, UpdateContext context) { - final String sql = context.toStatementString(); - final JdbcCoordinator jdbcCoordinator = session.getJdbcCoordinator(); - - final PreparedStatement statement = jdbcCoordinator.getStatementPreparer().prepareStatement( sql ); - return session.doReturningWork( - connection -> { - try { - int index = 1; - for ( QueryParameterBinding binding : context.getBindings() ) { - index += binding.bind( index, statement, session ); - } - int result = jdbcCoordinator.getResultSetReturn().executeUpdate( statement, sql ); - return result; - } - finally { - jdbcCoordinator.getLogicalConnection().getResourceRegistry().release( statement ); - jdbcCoordinator.afterStatementExecution(); - } - } - ); - } - - private List getUpdateContexts( - String entityName, - String auditEntityName, - SessionImplementor session, - Configuration configuration, - Object id, - Object revision) { - - EntityPersister entity = getEntityPersister( entityName, session ); - final List contexts = new ArrayList<>( 0 ); - - // HHH-9062 - update inherited - if ( configuration.isRevisionEndTimestampEnabled() && !configuration.isRevisionEndTimestampUseLegacyPlacement() ) { - if ( entity instanceof JoinedSubclassEntityPersister ) { - // iterate subclasses, excluding root - while ( entity.getMappedSuperclass() != null ) { - contexts.add( - getNonRootUpdateContext( - entityName, - auditEntityName, - session, - configuration, - id, - revision - ) - ); - entityName = entity.getEntityMappingType().getSuperMappingType().getEntityName(); - auditEntityName = configuration.getAuditEntityName( entityName ); - entity = getEntityPersister( entityName, session ); - } - } - } - - // add root - contexts.add( - getUpdateContext( - entityName, - auditEntityName, - session, - configuration, - id, - revision - ) - ); - - return contexts; - } - - private UpdateContext getUpdateContext( - String entityName, - String auditEntityName, - SessionImplementor session, - Configuration configuration, - Object id, - Object revision) { - - final EntityPersister entity = getEntityPersister( entityName, session ); - final EntityPersister rootEntity = getEntityPersister( entity.getRootEntityName(), session ); - final EntityPersister auditEntity = getEntityPersister( auditEntityName, session ); - final EntityPersister rootAuditEntity = getEntityPersister( auditEntity.getRootEntityName(), session ); - final EntityPersister revisionEntity = getEntityPersister( configuration.getRevisionInfo().getRevisionInfoClass().getName(), session ); - - final Number revisionNumber = getRevisionNumber( configuration, revision ); - - // The expected SQL is an update statement as follows: - // UPDATE audited_entity SET REVEND = ? [, REVEND_TSTMP = ?] WHERE (entity_id) = ? AND REV <> ? AND REVEND is null - final UpdateContext context = new UpdateContext( session.getFactory() ); - context.setTableName( getUpdateTableName( rootEntity, rootAuditEntity, auditEntity ) ); - - // Apply "SET REVEND = ?" portion of the SQL - final String revEndAttributeName = configuration.getRevisionEndFieldName(); - final String revEndColumnName = rootAuditEntity.findAttributeMapping( revEndAttributeName ) - .getSelectable( 0 ) - .getSelectionExpression(); - context.addAssignment( revEndColumnName ); - context.bind( revisionNumber, revisionEntity.getIdentifierMapping() ); - - if ( configuration.isRevisionEndTimestampEnabled() ) { - final Object revisionTimestamp = revisionTimestampGetter.get( revision ); - final String revEndTimestampAttributeName = configuration.getRevisionEndTimestampFieldName(); - final AttributeMapping revEndTimestampAttributeMapping = rootAuditEntity.findAttributeMapping( revEndTimestampAttributeName ); - // Apply optional "[, REVEND_TSTMP = ?]" portion of the SQL - context.addAssignment( revEndTimestampAttributeMapping.getSelectable( 0 ).getSelectionExpression() ); - context.bind( getRevEndTimestampValue( configuration, revisionTimestamp ), revEndTimestampAttributeMapping ); - } - - // Apply "WHERE (entity_id) = ?" - context.addRestriction( rootEntity.getIdentifierColumnNames() ); - context.bind( id, rootEntity.getIdentifierMapping() ); - - // Apply "AND REV <> ?" - // todo (PropertyMapping) : need to be able to handle paths - final String path = configuration.getRevisionNumberPath(); - context.addRestriction( rootAuditEntity.toColumns( path )[ 0 ], ComparisonRestriction.Operator.NE, "?" ); - context.bind( revisionNumber, rootAuditEntity.getPropertyType( path ) ); - - // Apply "AND REVEND is null" - context.addColumnIsNullRestriction( revEndColumnName ); - - return context; - } - - /** - * Creates the update context used to modify the revision end timestamp values for a non-root entity. - * This is only used to set the revision end timestamp for joined inheritance non-root entity mappings. - * - * @param entityName the entity name - * @param auditEntityName the audited entity name - * @param session the session - * @param configuration the configuration - * @param id the entity identifier - * @param revision the revision entity - * @return the created update context instance, never {@code null}. - */ - private UpdateContext getNonRootUpdateContext( - String entityName, - String auditEntityName, - SessionImplementor session, - Configuration configuration, - Object id, - Object revision) { - - final EntityPersister entity = getEntityPersister( entityName, session ); - final EntityPersister auditEntity = getEntityPersister( auditEntityName, session ); - - - // The expected SQL is an update statement as follows: - // UPDATE audited_entity SET REVEND_TSTMP = ? WHERE (entity_id) = ? AND REV <> ? AND REVEND_TSMTP is null - final UpdateContext context = new UpdateContext( session.getFactory() ); - context.setTableName( getUpdateTableName( entity, auditEntity, auditEntity ) ); - - // Apply "SET REVEND_TSTMP = ?" portion of the SQL - final Object revisionTimestamp = revisionTimestampGetter.get( revision ); - final String revEndTimestampAttributeName = configuration.getRevisionEndTimestampFieldName(); - final AttributeMapping revEndTimestampAttributeMapping = auditEntity.findAttributeMapping( revEndTimestampAttributeName ); - final String revEndTimestampColumnName = revEndTimestampAttributeMapping.getSelectable( 0 ).getSelectionExpression(); - context.addAssignment( revEndTimestampColumnName ); - context.bind( getRevEndTimestampValue( configuration, revisionTimestamp ), revEndTimestampAttributeMapping ); - - // Apply "WHERE (entity_id) = ? AND REV <> ?" portion of the SQL - final Number revisionNumber = getRevisionNumber( configuration, revision ); - - // Apply "WHERE (entity_id) = ?" - context.addRestriction( entity.getIdentifierColumnNames() ); - context.bind( id, entity.getIdentifierType() ); - - // Apply "AND REV <> ?" - // todo (PropertyMapping) : need to be able to handle paths - context.addRestriction( configuration.getRevisionFieldName(), ComparisonRestriction.Operator.NE, "?" ); - context.bind( revisionNumber, auditEntity.getPropertyType( configuration.getRevisionNumberPath() ) ); - - // Apply "AND REVEND_TSTMP is null" - context.addColumnIsNullRestriction( revEndTimestampColumnName ); - - return context; - } - - private Number getRevisionNumber(Configuration configuration, Object revisionEntity) { - final RevisionInfoNumberReader reader = configuration.getRevisionInfo().getRevisionInfoNumberReader(); - return reader.getRevisionNumber( revisionEntity ); - } - - private String getUpdateTableName(EntityPersister rootEntity, EntityPersister rootAuditEntity, EntityPersister auditEntity) { - if ( rootEntity instanceof UnionSubclassEntityPersister ) { - // we need to specially handle union-subclass mappings - return auditEntity.getMappedTableDetails().getTableName(); - } - return rootAuditEntity.getMappedTableDetails().getTableName(); - } - - /** - * An {@link Update} that can also track parameter bindings. - */ - private static class UpdateContext extends Update { - private final List bindings = new ArrayList<>( 0 ); - - public UpdateContext(SessionFactoryImplementor sessionFactory) { - super ( sessionFactory ); - } - - public List getBindings() { - return bindings; - } - - public void bind(Object value, Type type) { - bindings.add( new QueryParameterBindingType( value, type ) ); - } - - public void bind(Object value, ModelPart part) { - bindings.add( new QueryParameterBindingPart( value, part ) ); - } - } - - private interface QueryParameterBinding { - int bind(int index, PreparedStatement statement, SessionImplementor session) throws SQLException; - } - - private static class QueryParameterBindingType implements QueryParameterBinding { - private final Type type; - private final Object value; - - public QueryParameterBindingType(Object value, Type type) { - this.type = type; - this.value = value; - } - - public int bind(int index, PreparedStatement statement, SessionImplementor session) throws SQLException { - type.nullSafeSet( statement, value, index, session ); - return type.getColumnSpan( session.getSessionFactory().getRuntimeMetamodels() ); - } - } - - private static class QueryParameterBindingPart implements QueryParameterBinding { - private final ModelPart modelPart; - private final Object value; - - public QueryParameterBindingPart(Object value, ModelPart modelPart) { - this.value = value; - this.modelPart = modelPart; - } - - @Override - public int bind( - int index, - PreparedStatement statement, - SessionImplementor session) { - try { - return modelPart.breakDownJdbcValues( - value, - index, - statement, - session, - (valueIndex, preparedStatement, sessionImplementor, jdbcValue, jdbcValueMapping) -> { - try { - //noinspection unchecked - jdbcValueMapping.getJdbcMapping().getJdbcValueBinder().bind( - preparedStatement, - jdbcValue, - valueIndex, - sessionImplementor - ); - } - catch (SQLException e) { - throw new NestedRuntimeException( e ); - } - }, - session - ); - } - catch (NestedRuntimeException e) { - throw session.getJdbcServices().getSqlExceptionHelper().convert( - (SQLException) e.getCause(), - String.format( - Locale.ROOT, - "Error binding JDBC value relative to `%s`", - modelPart.getNavigableRole().getFullPath() - ) - ); - } - } - - static class NestedRuntimeException extends RuntimeException { - public NestedRuntimeException(SQLException cause) { - super( cause ); - } - } - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/AuditStrategy.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/AuditStrategy.java deleted file mode 100644 index 10f7fb9335c6..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/AuditStrategy.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy.spi; - -import org.hibernate.Incubating; -import org.hibernate.Session; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.internal.entities.mapper.PersistentCollectionChangeData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleComponentData; -import org.hibernate.envers.internal.entities.mapper.relation.MiddleIdData; -import org.hibernate.envers.internal.tools.query.Parameters; -import org.hibernate.envers.internal.tools.query.QueryBuilder; -import org.hibernate.envers.strategy.DefaultAuditStrategy; -import org.hibernate.envers.strategy.ValidityAuditStrategy; - -/** - * A strategy abstraction for how to audit entity changes. - * - * @since 5.4 - * - * @author Chris Cranford - */ -@Incubating -public interface AuditStrategy { - - // todo (6.0) - cleanup this spi - // 1. Introduce parameter objects to reduce parameter bloat on strategy methods - // 2. Eliminate the use of internal objects on the SPI interface. - - /** - * Add additional columns to the audit mappings. - * - * @param mappingContext The mapping context. - */ - default void addAdditionalColumns(MappingContext mappingContext) { - // Made default for backward compatibility. - // Remove default method in 6.0. - } - - /** - * Performs post initialization of the audit strategy implementation. - * - * @param context the audit strategy context, never {@code null} - */ - default void postInitialize(AuditStrategyContext context) { - // Made default for backward compatibility. - // Remove default method in 6.0. - } - - /** - * Perform the persistence of audited data for regular entities. - * @param session Session, which can be used to persist the data. - * @param entityName Name of the entity, in which the audited change happens - * @param configuration The audit entity configuration. - * @param id Id of the entity. - * @param data Audit data to persist. - * @param revision Current revision data. - */ - void perform( - Session session, - String entityName, - Configuration configuration, - Object id, - Object data, - Object revision); - - - /** - * Perform the persistence of audited data for collection ("middle") entities. - * - * @param session Session, which can be used to persist the data. - * @param entityName Name of the entity, in which the audited change happens. - * @param propertyName The name of the property holding the persistent collection - * @param configuration audit configuration - * @param persistentCollectionChangeData Collection change data to be persisted. - * @param revision Current revision data - */ - void performCollectionChange( - Session session, - String entityName, - String propertyName, - Configuration configuration, - PersistentCollectionChangeData persistentCollectionChangeData, - Object revision); - - /** - * Update the rootQueryBuilder with an extra WHERE clause to restrict the revision for a two-entity relation. - * This WHERE clause depends on the AuditStrategy. - * - * @param configuration the {@link Configuration} - * @param rootQueryBuilder the {@link QueryBuilder} that will be updated - * @param parameters root parameters to which restrictions shall be added - * @param revisionProperty property of the revision column - * @param revisionEndProperty property of the revisionEnd column (only used for {@link ValidityAuditStrategy}) - * @param addAlias {@code boolean} indicator if a left alias is needed - * @param idData id-information for the two-entity relation (only used for {@link DefaultAuditStrategy}) - * @param revisionPropertyPath path of the revision property (only used for {@link ValidityAuditStrategy}) - * @param originalIdPropertyName name of the id property (only used for {@link ValidityAuditStrategy}) - * @param alias1 an alias used for subquery (only used for {@link ValidityAuditStrategy}) - * @param alias2 an alias used for subquery (only used for {@link ValidityAuditStrategy}) - * @param inclusive indicates whether revision number shall be treated as inclusive or exclusive - */ - void addEntityAtRevisionRestriction( - Configuration configuration, - QueryBuilder rootQueryBuilder, - Parameters parameters, - String revisionProperty, - String revisionEndProperty, - boolean addAlias, - MiddleIdData idData, - String revisionPropertyPath, - String originalIdPropertyName, - String alias1, - String alias2, - boolean inclusive); - - /** - * Update the rootQueryBuilder with an extra WHERE clause to restrict the revision for a middle-entity - * association. This WHERE clause depends on the AuditStrategy. - * - * @param rootQueryBuilder the {@link QueryBuilder} that will be updated - * @param parameters root parameters to which restrictions shall be added - * @param revisionProperty property of the revision column - * @param revisionEndProperty property of the revisionEnd column (only used for {@link ValidityAuditStrategy}) - * @param addAlias {@code boolean} indicator if a left alias is needed - * @param referencingIdData id-information for the middle-entity association (only used for {@link DefaultAuditStrategy}) - * @param versionsMiddleEntityName name of the middle-entity - * @param eeOriginalIdPropertyPath name of the id property (only used for {@link ValidityAuditStrategy}) - * @param revisionPropertyPath path of the revision property (only used for {@link ValidityAuditStrategy}) - * @param originalIdPropertyName name of the id property (only used for {@link ValidityAuditStrategy}) - * @param alias1 an alias used for subqueries (only used for {@link DefaultAuditStrategy}) - * @param inclusive indicates whether revision number shall be treated as inclusive or exclusive - * @param componentDatas information about the middle-entity relation - */ - void addAssociationAtRevisionRestriction( - QueryBuilder rootQueryBuilder, - Parameters parameters, - String revisionProperty, - String revisionEndProperty, - boolean addAlias, - MiddleIdData referencingIdData, - String versionsMiddleEntityName, - String eeOriginalIdPropertyPath, - String revisionPropertyPath, - String originalIdPropertyName, - String alias1, - boolean inclusive, - MiddleComponentData... componentDatas); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/AuditStrategyContext.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/AuditStrategyContext.java deleted file mode 100644 index 7452524d834a..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/AuditStrategyContext.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy.spi; - -import org.hibernate.Incubating; -import org.hibernate.property.access.spi.Getter; - -/** - * A contract to initialize an {@link AuditStrategy} - * - * @author Chris Cranford - */ -@Incubating -public interface AuditStrategyContext { - /** - * Get the revision entity class name - * @return the class name of the revision entity - */ - Class getRevisionInfoClass(); - - /** - * Get the revision info timestamp accessor - * @return the getter for the timestamp attribute on the revision entity - */ - Getter getRevisionInfoTimestampAccessor(); -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/MappingContext.java b/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/MappingContext.java deleted file mode 100644 index f903cdfc2705..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/strategy/spi/MappingContext.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.strategy.spi; - -import org.hibernate.Incubating; -import org.hibernate.envers.boot.model.PersistentEntity; -import org.hibernate.envers.configuration.Configuration; - - -/** - * Describes an audit mapping context. - * - * @author Chris Cranford - */ -@Incubating -public class MappingContext { - private final PersistentEntity mapping; - private final Configuration configuration; - private final String revisionInfoPropertyType; - private final String revisionInfoExplicitTypeName; - private final boolean revisionEndTimestampOnly; - public MappingContext( - PersistentEntity mapping, - Configuration configuration, - String revisionInfoPropertyType, - String revisionInfoExplicitTypeName, - boolean revisionEndTimestampOnly) { - this.mapping = mapping; - this.configuration = configuration; - this.revisionInfoPropertyType = revisionInfoPropertyType; - this.revisionInfoExplicitTypeName = revisionInfoExplicitTypeName; - this.revisionEndTimestampOnly = revisionEndTimestampOnly; - } - - public PersistentEntity getEntityMapping() { - return mapping; - } - - public Configuration getConfiguration() { - return configuration; - } - - public String getRevisionInfoPropertyType() { - return revisionInfoPropertyType; - } - - public String getRevisionInfoExplicitTypeName() { - return revisionInfoExplicitTypeName; - } - - public boolean isRevisionEndTimestampOnly() { - return revisionEndTimestampOnly; - } -} diff --git a/hibernate-envers/src/main/java/org/hibernate/envers/tools/Pair.java b/hibernate-envers/src/main/java/org/hibernate/envers/tools/Pair.java deleted file mode 100644 index e3c49d8e40ce..000000000000 --- a/hibernate-envers/src/main/java/org/hibernate/envers/tools/Pair.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.tools; - -/** - * A pair of objects. - * - * @param - * @param - * - * @author Adam Warski (adamw@aster.pl) - */ -public class Pair { - private final T1 obj1; - private final T2 obj2; - - public Pair(T1 obj1, T2 obj2) { - this.obj1 = obj1; - this.obj2 = obj2; - } - - public T1 getFirst() { - return obj1; - } - - public T2 getSecond() { - return obj2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Pair) ) { - return false; - } - - final Pair pair = (Pair) o; - - if ( obj1 != null ? !obj1.equals( pair.obj1 ) : pair.obj1 != null ) { - return false; - } - if ( obj2 != null ? !obj2.equals( pair.obj2 ) : pair.obj2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result; - result = (obj1 != null ? obj1.hashCode() : 0); - result = 31 * result + (obj2 != null ? obj2.hashCode() : 0); - return result; - } - - public static Pair make(T1 obj1, T2 obj2) { - return new Pair<>( obj1, obj2 ); - } -} diff --git a/hibernate-envers/src/main/resources/META-INF/COPYING.txt b/hibernate-envers/src/main/resources/META-INF/COPYING.txt deleted file mode 100644 index f294ab0d7bfb..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/COPYING.txt +++ /dev/null @@ -1,466 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/META-INF/copyright.txt b/hibernate-envers/src/main/resources/META-INF/copyright.txt deleted file mode 100644 index edc0abe75c05..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/copyright.txt +++ /dev/null @@ -1 +0,0 @@ -(c) 2008, Adam Warski, JBoss Inc. \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.model.FunctionContributor b/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.model.FunctionContributor deleted file mode 100644 index b1c8ab2a0054..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.model.FunctionContributor +++ /dev/null @@ -1 +0,0 @@ -org.hibernate.envers.boot.internal.FunctionContributorImpl \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor b/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor deleted file mode 100644 index ad90082d34bc..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.model.TypeContributor +++ /dev/null @@ -1,13 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -org.hibernate.envers.boot.internal.TypeContributorImpl \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.registry.selector.StrategyRegistrationProvider b/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.registry.selector.StrategyRegistrationProvider deleted file mode 100644 index e8cf913f1619..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.registry.selector.StrategyRegistrationProvider +++ /dev/null @@ -1,14 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -org.hibernate.envers.boot.internal.ModifiedColumnNamingStrategyRegistrationProvider -org.hibernate.envers.boot.internal.AuditStrategyRegistrationProvider \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.spi.AdditionalMappingContributor b/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.spi.AdditionalMappingContributor deleted file mode 100644 index 4f21b14ba611..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.boot.spi.AdditionalMappingContributor +++ /dev/null @@ -1,7 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html. -# -org.hibernate.envers.boot.internal.AdditionalMappingContributorImpl diff --git a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator b/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator deleted file mode 100644 index a9a5b8dd9ee7..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator +++ /dev/null @@ -1,13 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -org.hibernate.envers.boot.internal.EnversIntegrator \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.service.spi.ServiceContributor b/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.service.spi.ServiceContributor deleted file mode 100644 index 5c0425f2e95c..000000000000 --- a/hibernate-envers/src/main/resources/META-INF/services/org.hibernate.service.spi.ServiceContributor +++ /dev/null @@ -1,13 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -org.hibernate.envers.boot.internal.EnversServiceContributor \ No newline at end of file diff --git a/hibernate-envers/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/hibernate-envers/src/main/resources/OSGI-INF/blueprint/blueprint.xml deleted file mode 100644 index 3776c747efdc..000000000000 --- a/hibernate-envers/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/java/ee/estonia/entities/Child.java b/hibernate-envers/src/test/java/ee/estonia/entities/Child.java deleted file mode 100644 index a19a8cde7cfe..000000000000 --- a/hibernate-envers/src/test/java/ee/estonia/entities/Child.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package ee.estonia.entities; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Child implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - public Child() { - } - - public Child(String data) { - this.data = data; - } - - public Child(String data, Long id) { - this.id = id; - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Child) ) { - return false; - } - - Child that = (Child) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Child(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/ee/estonia/entities/Parent.java b/hibernate-envers/src/test/java/ee/estonia/entities/Parent.java deleted file mode 100644 index 9bcd4fa169c7..000000000000 --- a/hibernate-envers/src/test/java/ee/estonia/entities/Parent.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package ee.estonia.entities; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Parent implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - @OneToMany - private Set collection = new HashSet(); - - public Parent() { - } - - public Parent(String data) { - this.data = data; - } - - public Parent(String data, Long id) { - this.id = id; - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Parent) ) { - return false; - } - - Parent that = (Parent) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Parent(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/EmbeddableWithCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/EmbeddableWithCollectionTest.java deleted file mode 100644 index fa5edd319552..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/EmbeddableWithCollectionTest.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.components; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.ForeignKey; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-9108") -public class EmbeddableWithCollectionTest extends BaseEnversJPAFunctionalTestCase { - private Long headerId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Header.class, Item.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - headerId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Header h1 = new Header( "h1" ); - h1.addItem( new Item( "h1-item0", h1 ) ); - h1.addItem( new Item( "h1-item1", h1 ) ); - entityManager.persist( h1 ); - return h1.getId(); - } ); - - // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Header header = entityManager.find( Header.class, headerId ); - header.addItem( new Item( "h1-item2", header ) ); - entityManager.merge( header ); - } ); - - // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Header header = entityManager.find( Header.class, headerId ); - header.removeItem( header.getEmbeddableWithCollection().getItems().get( 0 ) ); - entityManager.merge( header ); - } ); - - // Revision 4 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Header header = entityManager.find( Header.class, headerId ); - header.setEmbeddableWithCollection( null ); - entityManager.merge( header ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Header.class, headerId ) ); - } - - @Test - public void testRevisionHistory() { - final Header rev1 = getAuditReader().find( Header.class, headerId, 1 ); - assertEquals( 2, rev1.getEmbeddableWithCollection().getItems().size() ); - assertEquals( "h1-item0", rev1.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); - assertEquals( "h1-item1", rev1.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); - - final Header rev2 = getAuditReader().find( Header.class, headerId, 2 ); - assertEquals( 3, rev2.getEmbeddableWithCollection().getItems().size() ); - assertEquals( "h1-item0", rev2.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); - assertEquals( "h1-item1", rev2.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); - assertEquals( "h1-item2", rev2.getEmbeddableWithCollection().getItems().get( 2 ).getName() ); - - final Header rev3 = getAuditReader().find( Header.class, headerId, 3 ); - assertEquals( 2, rev3.getEmbeddableWithCollection().getItems().size() ); - assertEquals( "h1-item1", rev3.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); - assertEquals( "h1-item2", rev3.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); - - final Header rev4 = getAuditReader().find( Header.class, headerId, 4 ); - assertEquals( 0, rev4.getEmbeddableWithCollection().getItems().size() ); - } - - @Entity(name = "Header") - @Table(name = "ENVERS_HEADER") - @Audited - public static class Header { - private Long id; - private String name; - private EmbeddableWithCollection embeddableWithCollection; - - Header() { - - } - - Header(String name) { - this.name = name; - } - - Header(Long id, String name) { - this( name ); - this.id = id; - } - - @Id - @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Embedded - public EmbeddableWithCollection getEmbeddableWithCollection() { - return embeddableWithCollection; - } - - public void setEmbeddableWithCollection(EmbeddableWithCollection embeddableWithCollection) { - if ( embeddableWithCollection != null ) { - this.embeddableWithCollection = embeddableWithCollection; - } - else if ( this.embeddableWithCollection != null ) { - this.embeddableWithCollection.getItems().clear(); - } - } - - public void addItem(Item item) { - if ( this.embeddableWithCollection == null ) { - this.embeddableWithCollection = new EmbeddableWithCollection(); - } - this.embeddableWithCollection.addItem( item ); - } - - public void removeItem(Item item) { - if ( this.embeddableWithCollection != null ) { - this.embeddableWithCollection.removeItem( item ); - } - } - } - - @Entity(name = "Item") - @Table(name = "ENVERS_ITEM") - @Audited - public static class Item { - private Long id; - private String name; - private Header header; - private Integer position; - - Item() { - - } - - Item(String name, Header header) { - this.name = name; - this.header = header; - } - - Item(Long id, String name, Header header) { - this( name, header ); - this.id = id; - } - - @Id - @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @ManyToOne - @JoinColumn(name = "C_HDR", insertable = false, updatable = false, nullable = false) - public Header getHeader() { - return header; - } - - public void setHeader(Header header) { - this.header = header; - } - - @Column(name = "C_POSITION", insertable = false, updatable = false) - public Integer getPosition() { - return position; - } - - public void setPosition(Integer position) { - this.position = position; - } - } - - @Embeddable - @Audited - public static class EmbeddableWithCollection { - private List items; - - @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval=true) - @JoinColumn(name = "C_HDR", foreignKey = @ForeignKey(name = "ENVERS_ITEM_FK_ENVERS_HEADER"), nullable = false) - @OrderColumn(name = "C_POSITION", nullable = false) - @AuditMappedBy(mappedBy = "header", positionMappedBy = "position") - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public void addItem(Item item) { - if ( this.items == null ) { - this.items = new ArrayList(); - } - this.items.add( item ); - } - - public void removeItem(Item item) { - if ( this.items != null ) { - this.items.remove( item ); - } - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/DurationTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/DurationTest.java deleted file mode 100644 index fdc3a5c39764..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/DurationTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import java.time.Duration; - -@JiraKey(value = "HHH-17243") -public class DurationTest extends BaseEnversJPAFunctionalTestCase{ - - @Entity(name = "Duration") - @Audited - public static class DurationTestEntity { - @Id - @GeneratedValue - private Integer id; - - private Duration duration; - - DurationTestEntity(){ - - } - - DurationTestEntity(Duration aDuration) { - this.duration = aDuration; - } - - public Integer getId() { - return id; - } - - public Duration getDuration() { - return duration; - } - - public void setDuration(Duration aDuration) { - this.duration = aDuration; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { DurationTestEntity.class }; - } - - private Integer durationId; - - @Test - @Priority(10) - public void initData() { - // Revision 1 - insert - this.durationId = doInJPA( this::entityManagerFactory, entityManager -> { - final DurationTestEntity duration = new DurationTestEntity(Duration.ofHours(2)); - entityManager.persist( duration ); - return duration.getId(); - } ); - - // Revision 2 - update - doInJPA( this::entityManagerFactory, entityManager -> { - final DurationTestEntity duration = entityManager.find( DurationTestEntity.class, this.durationId ); - duration.setDuration(Duration.ofHours(3)); - entityManager.merge(duration); - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java deleted file mode 100644 index e377337e42bc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java +++ /dev/null @@ -1,333 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import jakarta.persistence.Enumerated; -import jakarta.persistence.MapKeyEnumerated; -import org.hibernate.AssertionFailure; -import org.hibernate.HibernateException; -import org.hibernate.annotations.Nationalized; -import org.hibernate.dialect.Dialect; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.internal.util.ReflectHelper; -import org.hibernate.type.SqlTypes; -import org.hibernate.type.descriptor.WrapperOptions; -import org.hibernate.type.descriptor.java.EnumJavaType; -import org.hibernate.type.descriptor.java.JavaType; -import org.hibernate.type.descriptor.jdbc.JdbcType; -import org.hibernate.type.descriptor.jdbc.JdbcTypeIndicators; -import org.hibernate.type.spi.TypeConfiguration; -import org.hibernate.type.spi.TypeConfigurationAware; -import org.hibernate.usertype.DynamicParameterizedType; -import org.hibernate.usertype.EnhancedUserType; -import org.hibernate.usertype.LoggableUserType; - -import java.io.Serializable; -import java.lang.annotation.Annotation; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Properties; - -import static jakarta.persistence.EnumType.ORDINAL; -import static jakarta.persistence.EnumType.STRING; -import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean; - -/** - * Value type mapper for enumerations. - * - * @author Emmanuel Bernard - * @author Hardy Ferentschik - * @author Steve Ebersole - * - * @deprecated Use the built-in support for enums - */ -@Deprecated(since="6.2", forRemoval=true) -public class EnumType> - implements EnhancedUserType, DynamicParameterizedType, LoggableUserType, TypeConfigurationAware, Serializable { - - public static final String ENUM = "enumClass"; - public static final String NAMED = "useNamed"; - public static final String TYPE = "type"; - - private Class enumClass; - - private boolean isOrdinal; - private JdbcType jdbcType; - private EnumJavaType enumJavaType; - - private TypeConfiguration typeConfiguration; - - public EnumType() { - } - - public Class getEnumClass() { - return enumClass; - } - - @Override - public JdbcType getJdbcType(TypeConfiguration typeConfiguration) { - return jdbcType; - } - - /** - *

- * An instance of this class is "configured" by a call to {@link #setParameterValues}, - * where configuration parameters are given as entries in a {@link Properties} object. - * There are two distinct ways an instance may be configured: - *

    - *
  • one for {@code hbm.xml}-based mapping, and - *
  • another for annotation-based or {@code orm.xml}-based mapping. - *
- *

- * In the case of annotations or {@code orm.xml}, a {@link ParameterType} is passed to - * {@link #setParameterValues} under the key {@value #PARAMETER_TYPE}. - *

- * But in the case of {@code hbm.xml}, there are multiple parameters: - *

    - *
  • - * {@value #ENUM}, the name of the Java enumeration class. - *
  • - *
  • - * {@value #NAMED}, specifies if the enum should be mapped by name. - * Default is to map as ordinal. - *
  • - *
  • - * {@value #TYPE}, a JDBC type code (legacy alternative to {@value #NAMED}). - *
  • - *
- */ - @Override - public void setParameterValues(Properties parameters) { - // IMPL NOTE: we handle 2 distinct cases here: - // 1) we are passed a ParameterType instance in the incoming Properties - generally - // speaking this indicates the annotation-binding case, and the passed ParameterType - // represents information about the attribute and annotation - // 2) we are not passed a ParameterType - generally this indicates a hbm.xml binding case. - final ParameterType reader = (ParameterType) parameters.get( PARAMETER_TYPE ); - - if ( parameters.containsKey( ENUM ) ) { - final String enumClassName = (String) parameters.get( ENUM ); - try { - enumClass = (Class) ReflectHelper.classForName( enumClassName, this.getClass() ).asSubclass( Enum.class ); - } - catch ( ClassNotFoundException exception ) { - throw new HibernateException("Enum class not found: " + enumClassName, exception); - } - } - else if ( reader != null ) { - enumClass = (Class) reader.getReturnedClass().asSubclass( Enum.class ); - } - - final JavaType descriptor = typeConfiguration.getJavaTypeRegistry().getDescriptor( enumClass ); - enumJavaType = (EnumJavaType) descriptor; - - if ( parameters.containsKey( TYPE ) ) { - int jdbcTypeCode = Integer.parseInt( (String) parameters.get( TYPE ) ); - jdbcType = typeConfiguration.getJdbcTypeRegistry().getDescriptor( jdbcTypeCode ); - isOrdinal = jdbcType.isInteger() - // Both, ENUM and NAMED_ENUM are treated like ordinal with respect to the ordering - || jdbcType.getDefaultSqlTypeCode() == SqlTypes.ENUM - || jdbcType.getDefaultSqlTypeCode() == SqlTypes.NAMED_ENUM; - } - else { - final LocalJdbcTypeIndicators indicators; - final Long columnLength = reader == null ? null : reader.getColumnLengths()[0]; - if ( parameters.containsKey(NAMED) ) { - indicators = new LocalJdbcTypeIndicators( - // use ORDINAL as default for hbm.xml mappings - getBoolean( NAMED, parameters ) ? STRING : ORDINAL, - false, - columnLength - ); - } - else { - indicators = new LocalJdbcTypeIndicators( - getEnumType( reader ), - isNationalized( reader ), - columnLength - ); - } - jdbcType = descriptor.getRecommendedJdbcType( indicators ); - isOrdinal = indicators.getEnumeratedType() != STRING; - } - } - - private jakarta.persistence.EnumType getEnumType(ParameterType reader) { - if ( reader != null ) { - if ( reader.isPrimaryKey() ) { - final MapKeyEnumerated enumAnn = getAnnotation( reader.getAnnotationsMethod(), MapKeyEnumerated.class ); - if ( enumAnn != null ) { - return enumAnn.value(); - } - } - final Enumerated enumAnn = getAnnotation( reader.getAnnotationsMethod(), Enumerated.class ); - if ( enumAnn != null ) { - return enumAnn.value(); - } - } - return ORDINAL; - } - - private boolean isNationalized(ParameterType reader) { - return typeConfiguration.getCurrentBaseSqlTypeIndicators().isNationalized() - || reader!=null && getAnnotation( reader.getAnnotationsMethod(), Nationalized.class ) != null; - } - - @SuppressWarnings("unchecked") - private A getAnnotation(Annotation[] annotations, Class annotationType) { - for ( Annotation annotation : annotations ) { - if ( annotationType.isInstance( annotation ) ) { - return (A) annotation; - } - } - return null; - } - - @Override - public int getSqlType() { - verifyConfigured(); - return jdbcType.getJdbcTypeCode(); - } - - @Override - public Class returnedClass() { - return enumClass; - } - - @Override - public boolean equals(T x, T y) throws HibernateException { - return x == y; - } - - @Override - public int hashCode(T x) throws HibernateException { - return x == null ? 0 : x.hashCode(); - } - - @Override - public T nullSafeGet(ResultSet rs, int position, WrapperOptions options) - throws SQLException { - verifyConfigured(); - return jdbcType.getExtractor( enumJavaType ).extract( rs, position, options ); - } - - private void verifyConfigured() { - if ( enumJavaType == null ) { - throw new AssertionFailure("EnumType (" + enumClass.getName() + ") not properly, fully configured"); - } - } - - @Override - public void nullSafeSet(PreparedStatement st, T value, int index, WrapperOptions options) - throws SQLException { - verifyConfigured(); - jdbcType.getBinder( enumJavaType ).bind( st, value, index, options ); - } - - @Override - public T deepCopy(T value) throws HibernateException { - return value; - } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public Serializable disassemble(T value) throws HibernateException { - return value; - } - - @Override - public T assemble(Serializable cached, Object owner) throws HibernateException { - return (T) cached; - } - - @Override - public T replace(T original, T target, Object owner) throws HibernateException { - return original; - } - - @Override - public TypeConfiguration getTypeConfiguration() { - return typeConfiguration; - } - - @Override - public void setTypeConfiguration(TypeConfiguration typeConfiguration) { - this.typeConfiguration = typeConfiguration; - } - - @Override - public String toSqlLiteral(T value) { - verifyConfigured(); - return isOrdinal() - ? Integer.toString( value.ordinal() ) - : "'" + value.name() + "'"; - } - - @Override - public String toString(T value) { - verifyConfigured(); - return enumJavaType.toName( value ); - } - - @Override - public T fromStringValue(CharSequence sequence) { - verifyConfigured(); - return enumJavaType.fromName( sequence.toString() ); - } - - @Override @SuppressWarnings("unchecked") - public String toLoggableString(Object value, SessionFactoryImplementor factory) { - verifyConfigured(); - return enumJavaType.extractLoggableRepresentation( (T) value ); - } - - public boolean isOrdinal() { - verifyConfigured(); - return isOrdinal; - } - - private class LocalJdbcTypeIndicators implements JdbcTypeIndicators { - private final jakarta.persistence.EnumType enumType; - private final boolean nationalized; - private final Long columnLength; - - private LocalJdbcTypeIndicators(jakarta.persistence.EnumType enumType, boolean nationalized, Long columnLength) { - this.enumType = enumType; - this.nationalized = nationalized; - this.columnLength = columnLength; - } - - @Override - public TypeConfiguration getTypeConfiguration() { - return typeConfiguration; - } - - @Override - public jakarta.persistence.EnumType getEnumeratedType() { - return enumType != null ? enumType : typeConfiguration.getCurrentBaseSqlTypeIndicators().getEnumeratedType(); - } - - @Override - public boolean isNationalized() { - return nationalized; - } - - - @Override - public long getColumnLength() { - return columnLength == null ? NO_COLUMN_LENGTH : columnLength; - } - - @Override - public Dialect getDialect() { - return typeConfiguration.getCurrentBaseSqlTypeIndicators().getDialect(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ExtendedEnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ExtendedEnumTypeTest.java deleted file mode 100644 index 2437343d3489..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ExtendedEnumTypeTest.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import java.util.List; - -import org.hibernate.annotations.Type; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.Audited; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.type.CustomType; -import org.hibernate.usertype.UserType; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -/** - * Tests that a custom type which extends {@link org.hibernate.envers.test.integration.customtype.EnumType} - * continues to be recognized as an EnumType rather than a basic custom type implementation since the values - * which envers sends to describe the type in HBM differ whether its an Enum or not. - * - * Without the fix, this test would not even bootstrap and would throw a MappingException. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12304") -public class ExtendedEnumTypeTest extends BaseEnversJPAFunctionalTestCase { - - // An extended type to trigger the need for Envers to supply type information in the HBM mappings. - // This should be treated the same as any other property annotated as Enumerated or uses an Enum. - public static class ExtendedEnumType extends org.hibernate.envers.test.integration.customtype.EnumType { - - } - - @Entity(name = "Widget") - @Audited - public static class Widget { - @Id - @GeneratedValue - private Integer id; - - @Type( ExtendedEnumType.class ) - @Enumerated(EnumType.STRING) - private Status status; - - @Enumerated - @Type( ExtendedEnumType.class ) - private Status status2; - - public enum Status { - ARCHIVED, - DRAFT - } - - Widget() { - - } - - Widget(Status status) { - this.status = status; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Status getStatus() { - return status; - } - - public void setStatus(Status status) { - this.status = status; - } - - public Status getStatus2() { - return status2; - } - - public void setStatus2(Status status2) { - this.status2 = status2; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Widget.class }; - } - - private Integer widgetId; - - @Test - @Priority(10) - public void initData() { - // Revision 1 - insert - this.widgetId = doInJPA( this::entityManagerFactory, entityManager -> { - final Widget widget = new Widget( Widget.Status.DRAFT ); - entityManager.persist( widget ); - return widget.getId(); - } ); - - // Revision 2 - update - doInJPA( this::entityManagerFactory, entityManager -> { - final Widget widget = entityManager.find( Widget.class, this.widgetId ); - widget.setStatus( Widget.Status.ARCHIVED ); - entityManager.merge( widget ); - } ); - - // Revision 3 - delete - doInJPA( this::entityManagerFactory, entityManager -> { - final Widget widget = entityManager.find( Widget.class, this.widgetId ); - entityManager.remove( widget ); - } ); - } - - @Test - public void testRevisionHistory() { - List revisions = getAuditReader().getRevisions( Widget.class, this.widgetId ); - assertEquals( Arrays.asList( 1, 2, 3 ), revisions ); - - final Widget rev1 = getAuditReader().find( Widget.class, this.widgetId, 1 ); - assertEquals( Widget.Status.DRAFT, rev1.getStatus() ); - - final Widget rev2 = getAuditReader().find( Widget.class, this.widgetId, 2 ); - assertEquals( Widget.Status.ARCHIVED, rev2.getStatus() ); - - final Widget rev3 = getAuditReader().find( Widget.class, this.widgetId, 3 ); - assertNull( rev3 ); - } - - @Test - public void testEnumPropertyStorageType() { - // test that property 'status' translates to an enum type that is stored by name (e.g. STRING) - assertEnumProperty( Widget.class, ExtendedEnumType.class, "status", EnumType.STRING ); - - // test that property 'status2' translates to an enum type that is stored by position (e.g. ORDINAL) - assertEnumProperty( Widget.class, ExtendedEnumType.class, "status2", EnumType.ORDINAL ); - } - - private void assertEnumProperty(Class entityClass, Class typeClass, String propertyName, EnumType expectedType) { - doInJPA( this::entityManagerFactory, entityManager -> { - final SessionFactoryImplementor sessionFactory = entityManager.unwrap( SessionImplementor.class ).getSessionFactory(); - - final EntityPersister entityPersister = sessionFactory.getMappingMetamodel().getEntityDescriptor( entityClass ); - final EnversService enversService = sessionFactory.getServiceRegistry().getService( EnversService.class ); - - final String entityName = entityPersister.getEntityName(); - final String auditEntityName = enversService.getConfig().getAuditEntityName( entityName ); - - final EntityPersister auditedEntityPersister = sessionFactory.getMappingMetamodel().getEntityDescriptor( auditEntityName ); - - final org.hibernate.type.Type propertyType = auditedEntityPersister.getPropertyType( propertyName ); - assertTyping( CustomType.class, propertyType ); - - final UserType userType = ( (CustomType) propertyType ).getUserType(); - assertTyping( typeClass, userType ); - assertTyping( org.hibernate.envers.test.integration.customtype.EnumType.class, userType ); - - // org,hibernate.type.EnumType used to be special-cased in the Envers code -// switch ( expectedType ) { -// case STRING: -// assertTrue( !( (org.hibernate.envers.test.integration.customtype.EnumType) userType ).isOrdinal() ); -// break; -// default: -// assertTrue( ( (org.hibernate.envers.test.integration.customtype.EnumType) userType ).isOrdinal() ); -// break; -// } - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserType.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserType.java deleted file mode 100644 index b9f6ddb522dc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserType.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.io.Serializable; - -import org.hibernate.HibernateException; -import org.hibernate.metamodel.spi.ValueAccess; -import org.hibernate.usertype.CompositeUserType; - -import jakarta.persistence.Lob; - -/** - * Custom type used to persist binary representation of Java object in the database. - * Spans over two columns - one storing text representation of Java class name and the second one - * containing binary data. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class ObjectUserType implements CompositeUserType { - - @Override - public Object getPropertyValue(Object component, int property) throws HibernateException { - return switch ( property ) { - case 0 -> component; - case 1 -> component.getClass().getName(); - default -> null; - }; - } - - @Override - public Object instantiate(ValueAccess valueAccess) { - return valueAccess.getValue( 0, Object.class ); - } - - @Override - public Class embeddable() { - return TaggedObject.class; - } - - @Override - public Class returnedClass() { - return Object.class; - } - - @Override - public boolean equals(Object x, Object y) throws HibernateException { - if ( x == y ) { - return true; - } - if ( x == null || y == null ) { - return false; - } - return x.equals( y ); - } - - @Override - public int hashCode(Object x) throws HibernateException { - return x.hashCode(); - } - - @Override - public Object deepCopy(Object value) throws HibernateException { - return value; // Persisting only immutable types. - } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public Serializable disassemble(Object value) throws HibernateException { - return (Serializable) value; - } - - @Override - public Object assemble(Serializable cached, Object owner) throws HibernateException { - return cached; - } - - @Override - public Object replace(Object original, Object target, Object owner) throws HibernateException { - return original; - } - - public static class TaggedObject { - String type; - @Lob - Serializable object; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeEntity.java deleted file mode 100644 index 733f36716891..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeEntity.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.io.Serializable; - -import org.hibernate.annotations.CompositeType; -import org.hibernate.envers.Audited; - -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -/** - * Entity encapsulating {@link Object} property which concrete type may change during subsequent updates. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class ObjectUserTypeEntity implements Serializable { - @Id - @GeneratedValue - private int id; - - private String buildInType; - - @Audited - @CompositeType(ObjectUserType.class) - @AttributeOverride( name = "type", column = @Column(name = "OBJ_TYPE")) - @AttributeOverride( name = "object", column = @Column(name = "OBJ_VALUE")) - private Object userType; - - public ObjectUserTypeEntity() { - } - - public ObjectUserTypeEntity(String buildInType, Object userType) { - this.buildInType = buildInType; - this.userType = userType; - } - - public ObjectUserTypeEntity(int id, String buildInType, Object userType) { - this.id = id; - this.buildInType = buildInType; - this.userType = userType; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ObjectUserTypeEntity) ) { - return false; - } - - ObjectUserTypeEntity that = (ObjectUserTypeEntity) o; - - if ( id != that.id ) { - return false; - } - if ( buildInType != null ? !buildInType.equals( that.buildInType ) : that.buildInType != null ) { - return false; - } - if ( userType != null ? !userType.equals( that.userType ) : that.userType != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + (buildInType != null ? buildInType.hashCode() : 0); - result = 31 * result + (userType != null ? userType.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ObjectUserTypeEntity(id = " + id + ", buildInType = " + buildInType + ", userType = " + userType + ")"; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getBuildInType() { - return buildInType; - } - - public void setBuildInType(String buildInType) { - this.buildInType = buildInType; - } - - public Object getUserType() { - return userType; - } - - public void setUserType(Object userType) { - this.userType = userType; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeTest.java deleted file mode 100644 index 11f55499e4d8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7870") -public class ObjectUserTypeTest extends BaseEnversJPAFunctionalTestCase { - private int id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ObjectUserTypeEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - add - em.getTransaction().begin(); - ObjectUserTypeEntity entity = new ObjectUserTypeEntity( "builtInType1", "stringUserType1" ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - modify - em.getTransaction().begin(); - entity = em.find( ObjectUserTypeEntity.class, entity.getId() ); - entity.setUserType( 2 ); - entity = em.merge( entity ); - em.getTransaction().commit(); - - // Revision 3 - remove - em.getTransaction().begin(); - entity = em.find( ObjectUserTypeEntity.class, entity.getId() ); - em.remove( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionCount() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3 ), - getAuditReader().getRevisions( ObjectUserTypeEntity.class, id ) - ); - } - - @Test - public void testHistory() { - ObjectUserTypeEntity ver1 = new ObjectUserTypeEntity( id, "builtInType1", "stringUserType1" ); - ObjectUserTypeEntity ver2 = new ObjectUserTypeEntity( id, "builtInType1", 2 ); - - Assert.assertEquals( ver1, getAuditReader().find( ObjectUserTypeEntity.class, id, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( ObjectUserTypeEntity.class, id, 2 ) ); - Assert.assertEquals( - ver2, - getAuditReader().createQuery() - .forRevisionsOfEntity( ObjectUserTypeEntity.class, true, true ) - .getResultList() - .get( 2 ) - ); // Checking delete state. - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ParametrizedCustom.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ParametrizedCustom.java deleted file mode 100644 index 5845f00b2f4b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ParametrizedCustom.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.customtype.ParametrizedCustomTypeEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ParametrizedCustom extends BaseEnversJPAFunctionalTestCase { - private Integer pcte_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ParametrizedCustomTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ParametrizedCustomTypeEntity pcte = new ParametrizedCustomTypeEntity(); - - // Revision 1 (persisting 1 entity) - em.getTransaction().begin(); - - pcte.setStr( "U" ); - - em.persist( pcte ); - - em.getTransaction().commit(); - - // Revision 2 (changing the value) - em.getTransaction().begin(); - - pcte = em.find( ParametrizedCustomTypeEntity.class, pcte.getId() ); - - pcte.setStr( "V" ); - - em.getTransaction().commit(); - - // - - pcte_id = pcte.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - ParametrizedCustomTypeEntity.class, - pcte_id - ) - ); - } - - @Test - public void testHistoryOfCcte() { - ParametrizedCustomTypeEntity rev1 = getAuditReader().find( ParametrizedCustomTypeEntity.class, pcte_id, 1 ); - ParametrizedCustomTypeEntity rev2 = getAuditReader().find( ParametrizedCustomTypeEntity.class, pcte_id, 2 ); - - assert "xUy".equals( rev1.getStr() ); - assert "xVy".equals( rev2.getStr() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/UnspecifiedEnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/UnspecifiedEnumTypeTest.java deleted file mode 100644 index 1e0795ba813d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/UnspecifiedEnumTypeTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity; -import org.hibernate.type.StandardBasicTypes; - -import org.junit.Assert; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7780") -@RequiresAuditStrategy(DefaultAuditStrategy.class) -public class UnspecifiedEnumTypeTest extends BaseEnversFunctionalTestCase { - private Long id = null; - - @Override - protected String[] getMappings() { - return new String[]{ "mappings/customType/mappings.hbm.xml" }; - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( AvailableSettings.SHOW_SQL, "true" ); - settings.put( AvailableSettings.FORMAT_SQL, "true" ); - settings.put( AvailableSettings.PREFER_NATIVE_ENUM_TYPES, "false" ); - } - - @Test - @Priority(9) - public void initData() { - Session session = getSession(); - - // Revision 1 - session.getTransaction().begin(); - UnspecifiedEnumTypeEntity entity = new UnspecifiedEnumTypeEntity( - UnspecifiedEnumTypeEntity.E1.X, - UnspecifiedEnumTypeEntity.E2.A - ); - session.persist( entity ); - session.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - session.getTransaction().begin(); - entity = session.get( UnspecifiedEnumTypeEntity.class, entity.getId() ); - entity.setEnum1( UnspecifiedEnumTypeEntity.E1.Y ); - entity.setEnum2( UnspecifiedEnumTypeEntity.E2.B ); - session.merge( entity ); - session.getTransaction().commit(); - - session.close(); - } - - @Test - @Priority(8) - public void testRevisionCount() { - Assert.assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - UnspecifiedEnumTypeEntity.class, - id - ) - ); - } - - @Test - @Priority(7) - public void testHistoryOfEnums() { - UnspecifiedEnumTypeEntity ver1 = new UnspecifiedEnumTypeEntity( - UnspecifiedEnumTypeEntity.E1.X, - UnspecifiedEnumTypeEntity.E2.A, - id - ); - UnspecifiedEnumTypeEntity ver2 = new UnspecifiedEnumTypeEntity( - UnspecifiedEnumTypeEntity.E1.Y, - UnspecifiedEnumTypeEntity.E2.B, - id - ); - - Assert.assertEquals( ver1, getAuditReader().find( UnspecifiedEnumTypeEntity.class, id, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( UnspecifiedEnumTypeEntity.class, id, 2 ) ); - } - - @Test - @Priority(6) - public void testEnumRepresentation() { - Session session = getSession(); - - @SuppressWarnings("unchecked") - List values = session - .createNativeQuery( "SELECT enum1 e1, enum2 e2 FROM ENUM_ENTITY_AUD ORDER BY REV ASC" ) - .addScalar( "e1", StandardBasicTypes.INTEGER ) - .addScalar( "e2", StandardBasicTypes.INTEGER ) - .list(); - session.close(); - - Assert.assertNotNull( values ); - Assert.assertEquals( 2, values.size() ); - Assert.assertArrayEquals( new Object[]{ 0, 0 }, values.get( 0 ) ); - Assert.assertArrayEquals( new Object[]{ 1, 1 }, values.get( 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/DateTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/DateTestEntity.java deleted file mode 100644 index 583013b45929..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/DateTestEntity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import java.util.Date; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class DateTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private Date dateValue; - - public DateTestEntity() { - } - - public DateTestEntity(Date dateValue) { - this.dateValue = dateValue; - } - - public DateTestEntity(Integer id, Date date) { - this.id = id; - this.dateValue = date; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Date getDateValue() { - return dateValue; - } - - public void setDateValue(Date dateValue) { - this.dateValue = dateValue; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DateTestEntity) ) { - return false; - } - - DateTestEntity that = (DateTestEntity) o; - - if ( dateValue != null ) { - if ( that.dateValue == null ) { - return false; - } - - if ( dateValue.getTime() != that.dateValue.getTime() ) { - return false; - } - } - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (dateValue != null ? dateValue.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/EnumTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/EnumTestEntity.java deleted file mode 100644 index b110e43fb975..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/EnumTestEntity.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class EnumTestEntity { - @Id - @GeneratedValue - private Integer id; - - public enum E1 {X, Y} - - public enum E2 {A, B} - - @Enumerated(EnumType.STRING) - private E1 enum1; - - @Enumerated(EnumType.ORDINAL) - private E2 enum2; - - public EnumTestEntity() { - } - - public EnumTestEntity(E1 enum1, E2 enum2) { - this.enum1 = enum1; - this.enum2 = enum2; - } - - public EnumTestEntity(Integer id, E1 enum1, E2 enum2) { - this.id = id; - this.enum1 = enum1; - this.enum2 = enum2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public E1 getEnum1() { - return enum1; - } - - public void setEnum1(E1 enum1) { - this.enum1 = enum1; - } - - public E2 getEnum2() { - return enum2; - } - - public void setEnum2(E2 enum2) { - this.enum2 = enum2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EnumTestEntity) ) { - return false; - } - - EnumTestEntity that = (EnumTestEntity) o; - - if ( enum1 != that.enum1 ) { - return false; - } - if ( enum2 != that.enum2 ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (enum1 != null ? enum1.hashCode() : 0); - result = 31 * result + (enum2 != null ? enum2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobSerializableTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobSerializableTestEntity.java deleted file mode 100644 index e98bdea07dcf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobSerializableTestEntity.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Lob; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class LobSerializableTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @Lob - private SerObject obj; - - public LobSerializableTestEntity() { - } - - public LobSerializableTestEntity(SerObject obj) { - this.obj = obj; - } - - public LobSerializableTestEntity(Integer id, SerObject obj) { - this.obj = obj; - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public SerObject getObj() { - return obj; - } - - public void setObj(SerObject obj) { - this.obj = obj; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof LobSerializableTestEntity) ) { - return false; - } - - LobSerializableTestEntity that = (LobSerializableTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( obj != null ? !obj.equals( that.obj ) : that.obj != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (obj != null ? obj.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobTestEntity.java deleted file mode 100644 index b0862d0e5664..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobTestEntity.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import java.util.Arrays; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Lob; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class LobTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Lob - @Audited - private String stringLob; - - @Lob - @Audited - private byte[] byteLob; - - @Lob - @Audited - private char[] charLob; - - @NotAudited - private String data; - - public LobTestEntity() { - } - - public LobTestEntity(String stringLob, byte[] byteLob, char[] charLob) { - this.stringLob = stringLob; - this.byteLob = byteLob; - this.charLob = charLob; - } - - public LobTestEntity(Integer id, String stringLob, byte[] byteLob, char[] charLob) { - this.id = id; - this.stringLob = stringLob; - this.byteLob = byteLob; - this.charLob = charLob; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStringLob() { - return stringLob; - } - - public void setStringLob(String stringLob) { - this.stringLob = stringLob; - } - - public byte[] getByteLob() { - return byteLob; - } - - public void setByteLob(byte[] byteLob) { - this.byteLob = byteLob; - } - - public char[] getCharLob() { - return charLob; - } - - public void setCharLob(char[] charLob) { - this.charLob = charLob; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof LobTestEntity) ) { - return false; - } - - LobTestEntity that = (LobTestEntity) o; - - if ( !Arrays.equals( byteLob, that.byteLob ) ) { - return false; - } - if ( !Arrays.equals( charLob, that.charLob ) ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( stringLob != null ? !stringLob.equals( that.stringLob ) : that.stringLob != null ) { - return false; - } - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (stringLob != null ? stringLob.hashCode() : 0); - result = 31 * result + (byteLob != null ? Arrays.hashCode( byteLob ) : 0); - result = 31 * result + (charLob != null ? Arrays.hashCode( charLob ) : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/Lobs.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/Lobs.java deleted file mode 100644 index eb6d604dea5b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/Lobs.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import java.util.Arrays; -import java.util.Map; - -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -@RequiresDialectFeature(DialectChecks.SupportsExpectedLobUsagePattern.class) -public class Lobs extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ LobTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - if ( getDialect() instanceof PostgreSQLDialect ) { - // In PostgreSQL LOBs cannot be used in auto-commit mode. - options.put( "hibernate.connection.autocommit", "false" ); - } - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - LobTestEntity lte = new LobTestEntity( "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - em.persist( lte ); - id1 = lte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - lte = em.find( LobTestEntity.class, id1 ); - lte.setStringLob( "def" ); - lte.setByteLob( new byte[]{ 3, 4, 5 } ); - lte.setCharLob( new char[]{ 'h', 'i', 'j' } ); - em.getTransaction().commit(); - - // this creates a revision history for a Lob-capable entity but the change is on a non-audited - // field and so it should only generate 1 revision, the initial persist. - em.getTransaction().begin(); - LobTestEntity lte2 = new LobTestEntity( "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - lte2.setData( "Hi" ); - em.persist( lte2 ); - em.getTransaction().commit(); - id2 = lte2.getId(); - - em.getTransaction().begin(); - lte2 = em.find( LobTestEntity.class, id2 ); - lte2.setData( "Hello World" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( LobTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - LobTestEntity ver1 = new LobTestEntity( id1, "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - LobTestEntity ver2 = new LobTestEntity( id1, "def", new byte[]{ 3, 4, 5 }, new char[]{ 'h', 'i', 'j' } ); - assertEquals( getAuditReader().find( LobTestEntity.class, id1, 1 ), ver1 ); - assertEquals( getAuditReader().find( LobTestEntity.class, id1, 2 ), ver2 ); - } - - @Test - @JiraKey(value = "HHH-10734") - public void testRevisionsCountsForAuditedArraysWithNoChanges() { - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( LobTestEntity.class, id2 ) ); - } - - @Test - @JiraKey(value = "HHH-10734") - public void testHistoryOfId2() { - LobTestEntity ver1 = new LobTestEntity( id2, "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - assertEquals( getAuditReader().find( LobTestEntity.class, id2, 3 ), ver1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerObject.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerObject.java deleted file mode 100644 index c4d69ecf2585..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerObject.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import java.io.Serializable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SerObject implements Serializable { - static final long serialVersionUID = 982352321924L; - - private String data; - - public SerObject() { - } - - public SerObject(String data) { - this.data = data; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SerObject) ) { - return false; - } - - SerObject serObject = (SerObject) o; - - if ( data != null ? !data.equals( serObject.data ) : serObject.data != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (data != null ? data.hashCode() : 0); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerializableTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerializableTestEntity.java deleted file mode 100644 index 6f7c51aae3ae..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerializableTestEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SerializableTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private SerObject obj; - - public SerializableTestEntity() { - } - - public SerializableTestEntity(SerObject obj) { - this.obj = obj; - } - - public SerializableTestEntity(Integer id, SerObject obj) { - this.obj = obj; - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public SerObject getObj() { - return obj; - } - - public void setObj(SerObject obj) { - this.obj = obj; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SerializableTestEntity) ) { - return false; - } - - SerializableTestEntity that = (SerializableTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( obj != null ? !obj.equals( that.obj ) : that.obj != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (obj != null ? obj.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java deleted file mode 100644 index bf1d9a57838d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java +++ /dev/null @@ -1,380 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.dynamic; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.components.dynamic.AdvancedEntity; -import org.hibernate.orm.test.envers.integration.components.dynamic.Age; -import org.hibernate.orm.test.envers.integration.components.dynamic.InternalComponent; -import org.hibernate.orm.test.envers.integration.components.dynamic.ManyToManyEntity; -import org.hibernate.orm.test.envers.integration.components.dynamic.ManyToOneEntity; -import org.hibernate.orm.test.envers.integration.components.dynamic.OneToOneEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; - -/** - * @author Lukasz Zuchowski (author at zuchos dot com) - * More advanced tests for dynamic component. - */ -@JiraKey(value = "HHH-8049") -public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctionalTestCase { - - public static final String PROP_BOOLEAN = "propBoolean"; - public static final String PROP_INT = "propInt"; - public static final String PROP_FLOAT = "propFloat"; - public static final String PROP_MANY_TO_ONE = "propManyToOne"; - public static final String PROP_ONE_TO_ONE = "propOneToOne"; - public static final String INTERNAL_COMPONENT = "internalComponent"; - public static final String INTERNAL_LIST = "internalList"; - public static final String INTERNAL_MAP = "internalMap"; - public static final String INTERNAL_MAP_WITH_MANY_TO_MANY = "internalMapWithEntities"; - public static final String INTERNAL_SET = "internalSet"; - public static final String INTERNAL_SET_OF_COMPONENTS = "internalSetOfComponents"; - public static final String AGE_USER_TYPE = "ageUserType"; - public static final String INTERNAL_LIST_OF_USER_TYPES = "internalListOfUserTypes"; - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - settings.put( AvailableSettings.JPA_TRANSACTION_COMPLIANCE, "false" ); - } - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapAdvanced.hbm.xml" }; - } - - private OneToOneEntity getOneToOneEntity() { - return new OneToOneEntity( 1L, "OneToOne" ); - } - - private ManyToManyEntity getManyToManyEntity() { - return new ManyToManyEntity( 1L, "ManyToMany" ); - } - - private ManyToOneEntity getManyToOneEntity() { - return new ManyToOneEntity( 1L, "ManyToOne" ); - } - - - private AdvancedEntity getAdvancedEntity(ManyToOneEntity manyToOne, OneToOneEntity oneToOne, ManyToManyEntity manyToManyEntity) { - AdvancedEntity advancedEntity = new AdvancedEntity(); - advancedEntity.setId( 1L ); - advancedEntity.setNote( "Test note" ); - advancedEntity.getDynamicConfiguration().put( PROP_BOOLEAN, true ); - advancedEntity.getDynamicConfiguration().put( PROP_INT, 19 ); - advancedEntity.getDynamicConfiguration().put( PROP_FLOAT, 15.9f ); - advancedEntity.getDynamicConfiguration().put( PROP_MANY_TO_ONE, manyToOne ); - advancedEntity.getDynamicConfiguration().put( PROP_ONE_TO_ONE, oneToOne ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_COMPONENT, new InternalComponent( "Internal value" ) ); - List list = new ArrayList(); - list.add( "One" ); - list.add( "Two" ); - list.add( "Three" ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_LIST, list ); - Map map = new HashMap(); - map.put( "one", "1" ); - map.put( "two", "2" ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_MAP, map ); - Map mapWithManyToMany = new HashMap(); - mapWithManyToMany.put( "entity1", manyToManyEntity ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_MAP_WITH_MANY_TO_MANY, mapWithManyToMany ); - Set set = new HashSet(); - set.add( "Une" ); - set.add( "Due" ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_SET, set ); - Set componentSet = new HashSet(); - componentSet.add( new InternalComponent( "Ein" ) ); - componentSet.add( new InternalComponent( "Zwei" ) ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_SET_OF_COMPONENTS, componentSet ); - advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 18 ) ); - List ages = new ArrayList(); - ages.add( new Age( 1 ) ); - ages.add( new Age( 2 ) ); - ages.add( new Age( 3 ) ); - - advancedEntity.getDynamicConfiguration().put( INTERNAL_LIST_OF_USER_TYPES, ages ); - return advancedEntity; - } - - @Test - @Priority(10) - //smoke test to make sure that hibernate & envers are working with the entity&mappings - public void shouldInitData() { - //given - ManyToOneEntity manyToOne = getManyToOneEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - ManyToManyEntity manyToManyEntity = getManyToManyEntity(); - AdvancedEntity advancedEntity = getAdvancedEntity( manyToOne, oneToOne, manyToManyEntity ); - - //rev 1 - Session session = openSession(); - session.getTransaction().begin(); - session.persist( manyToOne ); - session.persist( oneToOne ); - session.persist( manyToManyEntity ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 2 - session.getTransaction().begin(); - InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_COMPONENT ); - internalComponent.setProperty( "new value" ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 3 - session.getTransaction().begin(); - List internalList = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST ); - internalList.add( "four" ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 4 - session.getTransaction().begin(); - Map map = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP ); - map.put( "three", "3" ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 5 - session.getTransaction().begin(); - Map mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_MAP_WITH_MANY_TO_MANY ); - ManyToManyEntity manyToManyEntity2 = new ManyToManyEntity( 2L, "new value" ); - mapWithManyToMany.put( "entity2", manyToManyEntity2 ); - session.persist( manyToManyEntity2 ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 6 - session.getTransaction().begin(); - mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP_WITH_MANY_TO_MANY ); - mapWithManyToMany.clear(); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 7 - session.getTransaction().begin(); - Set internalComponentSet = (Set) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_SET_OF_COMPONENTS ); - internalComponentSet.add( new InternalComponent( "drei" ) ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 8 - session.getTransaction().begin(); - advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 19 ) ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 9 - session.getTransaction().begin(); - List ages = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST_OF_USER_TYPES ); - ages.add( new Age( 4 ) ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev this, should not create revision - session.getTransaction().begin(); - session.getTransaction().commit(); - - //sanity check. Loaded entity should be equal to one that we created. - AdvancedEntity advancedEntityActual = (AdvancedEntity) session.getReference( AdvancedEntity.class, 1L ); - - Assert.assertEquals( advancedEntity, advancedEntityActual ); - } - - - @Test - public void shouldMakeRevisions() { - Session session = openSession(); - session.getTransaction().begin(); - //given & when shouldInitData - ManyToOneEntity manyToOne = getManyToOneEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - ManyToManyEntity manyToManyEntity = getManyToManyEntity(); - AdvancedEntity advancedEntity = getAdvancedEntity( manyToOne, oneToOne, manyToManyEntity ); - - //then v1 - AdvancedEntity ver1 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 1 - ); - Assert.assertEquals( advancedEntity, ver1 ); - - //then v2 - InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_COMPONENT ); - internalComponent.setProperty( "new value" ); - - AdvancedEntity ver2 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 2 - ); - Assert.assertEquals( advancedEntity, ver2 ); - - //then v3 - - List internalList = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST ); - internalList.add( "four" ); - - AdvancedEntity ver3 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 3 - ); - Assert.assertEquals( advancedEntity, ver3 ); - - //then v4 - Map map = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP ); - map.put( "three", "3" ); - - AdvancedEntity ver4 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 4 - ); - Assert.assertEquals( advancedEntity, ver4 ); - - //then v5 - Map mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_MAP_WITH_MANY_TO_MANY ); - ManyToManyEntity manyToManyEntity2 = new ManyToManyEntity( 2L, "new value" ); - mapWithManyToMany.put( "entity2", manyToManyEntity2 ); - - AdvancedEntity ver5 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 5 - ); - Assert.assertEquals( advancedEntity, ver5 ); - - //then v6 - mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP_WITH_MANY_TO_MANY ); - mapWithManyToMany.clear(); - - AdvancedEntity ver6 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 6 - ); - Assert.assertEquals( advancedEntity, ver6 ); - - //then v7 - Set internalComponentSet = (Set) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_SET_OF_COMPONENTS ); - internalComponentSet.add( new InternalComponent( "drei" ) ); - - AdvancedEntity ver7 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 7 - ); - Assert.assertEquals( advancedEntity, ver7 ); - - //then v8 - advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 19 ) ); - - - AdvancedEntity ver8 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 8 - ); - Assert.assertEquals( advancedEntity, ver8 ); - - //then v9 - List ages = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST_OF_USER_TYPES ); - ages.add( new Age( 4 ) ); - - AdvancedEntity ver9 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 9 - ); - Assert.assertEquals( advancedEntity, ver9 ); - - session.getTransaction().commit(); - } - - @Test - public void testOfQueryOnDynamicComponent() { - //given (and result of shouldInitData() - AdvancedEntity entity = getAdvancedEntity( getManyToOneEntity(), getOneToOneEntity(), getManyToManyEntity() ); - - //when - ManyToOneEntity manyToOneEntity = (ManyToOneEntity) entity.getDynamicConfiguration().get( PROP_MANY_TO_ONE ); - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AdvancedEntity.class, 1 ) - .add( - AuditEntity.relatedId( "dynamicConfiguration_" + PROP_MANY_TO_ONE ) - .eq( manyToOneEntity.getId() ) - ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - - //when - InternalComponent internalComponent = (InternalComponent) entity.getDynamicConfiguration().get( INTERNAL_COMPONENT ); - resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AdvancedEntity.class, 1 ) - .add( - AuditEntity.property( "dynamicConfiguration_" + INTERNAL_COMPONENT+"_property") - .eq( internalComponent.getProperty() ) - ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - - //when - try { - OneToOneEntity oneToOneEntity = (OneToOneEntity) entity.getDynamicConfiguration().get( PROP_ONE_TO_ONE ); - getAuditReader().createQuery() - .forEntitiesAtRevision( AdvancedEntity.class, 1 ) - .add( AuditEntity.property( "dynamicConfiguration_" + PROP_ONE_TO_ONE ).eq( oneToOneEntity ) ) - .getResultList(); - - //then - Assert.fail(); - } - catch ( Exception e ) { - if ( getSession().getTransaction().isActive() ) { - getSession().getTransaction().rollback(); - } - - assertTyping( IllegalArgumentException.class, e ); - } - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), - getAuditReader().getRevisions( AdvancedEntity.class, 1L ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Address.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Address.java deleted file mode 100644 index 7411ca01292f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Address.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.time.Instant; -import java.util.Collection; -import java.util.LinkedList; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name = "address") -public class Address extends BaseDomainEntity { - private static final long serialVersionUID = 7380477602657080463L; - - @Column(name = "name") - private String name; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "id", cascade = CascadeType.ALL) - Collection versions = new LinkedList<>(); - - Address() { - } - - Address(Instant when, String who, String name) { - super( when, who ); - this.name = name; - } - - public AddressVersion addInitialVersion(String description) { - AddressVersion version = new AddressVersion( getCreatedAt(), getCreatedBy(), this, 0, description ); - versions.add( version ); - return version; - } - - public String getName() { - return name; - } - - public Collection getVersions() { - return versions; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/AddressVersion.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/AddressVersion.java deleted file mode 100644 index e2652af826c0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/AddressVersion.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.time.Instant; -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name = "address_version") -public class AddressVersion extends BaseDomainEntityVersion { - private static final long serialVersionUID = 1100389518057335117L; - - @Id - @ManyToOne(optional = false, fetch = FetchType.LAZY) - @JoinColumn(name = "id", referencedColumnName = "id", updatable = false, nullable = false) - private Address id; - - @Column(name = "description", updatable = false) - private String description; - - AddressVersion() { - } - - AddressVersion(Instant when, String who, Address id, long version, String description) { - setCreatedAt( when ); - setCreatedBy( who ); - setVersion( version ); - this.id = Objects.requireNonNull(id ); - this.description = description; - } - - @Override - public Address getId() { - return id; - } - - public String getDescription() { - return description; - } - - public AddressVersion update(Instant when, String who, String description) { - AddressVersion version = new AddressVersion( when, who, id, getVersion() + 1, description ); - id.versions.add( version ); - return version; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Base.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Base.java deleted file mode 100644 index 3dd70a840762..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Base.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.MappedSuperclass; - -/** - * @author Chris Cranford - */ -@MappedSuperclass -@Access(AccessType.FIELD) -public class Base { -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntity.java deleted file mode 100644 index b460e91cc8ea..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntity.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.time.Instant; -import java.util.Objects; - -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -/** - * @author Chris Cranford - */ -@MappedSuperclass -public abstract class BaseDomainEntity extends BaseDomainEntityMetadata { - private static final long serialVersionUID = 1023010094948580516L; - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - protected long id = 0; - - BaseDomainEntity() { - - } - - BaseDomainEntity(Instant timestamp, String who) { - super( timestamp, who ); - } - - public long getId() { - return id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - BaseDomainEntity that = (BaseDomainEntity) o; - return id == that.id; - } - - @Override - public int hashCode() { - return Objects.hash( id ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityMetadata.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityMetadata.java deleted file mode 100644 index 41c45c228fd4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityMetadata.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.io.Serializable; -import java.time.Instant; - -import jakarta.persistence.Column; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.annotations.CreationTimestamp; - -/** - * @author Chris Cranford - */ -@MappedSuperclass -public abstract class BaseDomainEntityMetadata extends Base implements Serializable { - private static final long serialVersionUID = 2765056578095518489L; - - @Column(name = "created_by", nullable = false, updatable = false) - private String createdBy; - - @CreationTimestamp - @Column(name = "created_at", nullable = false, updatable = false) - private Instant createdAt; - - BaseDomainEntityMetadata() { - - } - - BaseDomainEntityMetadata(Instant timestamp, String who) { - this.createdBy = who; - this.createdAt = timestamp; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Instant getCreatedAt() { - return createdAt; - } - - public void setCreatedAt(Instant createdAt) { - this.createdAt = createdAt; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityVersion.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityVersion.java deleted file mode 100644 index 0d095fa997dd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityVersion.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -/** - * @author Chris Cranford - */ -@MappedSuperclass -public abstract class BaseDomainEntityVersion extends BaseDomainEntityMetadata { - private static final long serialVersionUID = 1564895954324242368L; - - @Id - @Column(name = "version", nullable = false, updatable = false) - private long version; - - public long getVersion() { - return version; - } - - public void setVersion(long version) { - this.version = version; - } - - public abstract Object getId(); - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - BaseDomainEntityVersion that = (BaseDomainEntityVersion) o; - return Objects.equals( getId(), that.getId() ) && version == that.version; - } - - @Override - public int hashCode() { - return Objects.hash( getId(), version ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ChildUser.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ChildUser.java deleted file mode 100644 index 73599dd74fa6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ChildUser.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import org.hibernate.envers.NotAudited; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.OneToMany; -import java.util.List; - -/** - * @author Luke Chen - */ -@Entity -public class ChildUser extends User { - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.REMOVE) - @NotAudited - private List shipmentList; - - ChildUser() { - } - - public long getId() { - return id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java deleted file mode 100644 index 079ab9481f86..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.junit.Test; - -import java.time.Duration; -import java.time.Instant; -import java.util.Map; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; - -/** - * Tests that proxies can still be resolved correctly in ToOneIdMapper even the object is already deleted and can't - * find in cache. This can happen if the deleted object is an inherited object, and when the child object is deleted, - * we cannot find the object with the parent class name anymore. - * - * @author Luke Chen - */ -@JiraKey(value = "HHH-13945") -@RequiresDialectFeature(DialectChecks.SupportsIdentityColumns.class) -public class ManyToOneLazyDeleteTest extends BaseEnversFunctionalTestCase { - private Long shipmentId; - private User user; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Shipment.class, Address.class, AddressVersion.class, User.class, ChildUser.class }; - } - - @Test - @Priority(10) - public void initData() { - - this.shipmentId = doInHibernate( this::sessionFactory, session -> { - final Shipment shipment = new Shipment( Instant.now(), "system", Instant.now().plus( Duration.ofDays( 3 ) ), "abcd123", null, null ); - session.persist( shipment ); - session.flush(); - - final Address origin = new Address( Instant.now(), "system", "Valencia#1" ); - final Address destination = new Address( Instant.now(), "system", "Madrid#3" ); - final AddressVersion originVersion0 = origin.addInitialVersion( "Poligono Manises" ); - final AddressVersion destinationVersion0 = destination.addInitialVersion( "Poligono Alcobendas" ); - user = new ChildUser(); - session.persist( origin ); - session.persist( destination ); - session.persist( user ); - - session.flush(); - shipment.setUser( user ); - shipment.setOrigin( originVersion0 ); - shipment.setDestination( destinationVersion0 ); - - session.merge( shipment ); - session.flush(); - - return shipment.getId(); - } ); - - doInHibernate( this::sessionFactory, session -> { - final Shipment shipment = session.get( Shipment.class, shipmentId ); - session.remove(shipment); - // Cast the User instance to the ChildUser, and delete the child one, so the cache for - // the User instance will not be there, and entityNotFound exception will be thrown while envers processing it - ChildUser childUser = session.get(ChildUser.class, user.getId()); - session.remove(childUser); - - session.flush(); - } ); - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put(EnversSettings.STORE_DATA_AT_DELETE, "true"); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyFetchTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyFetchTest.java deleted file mode 100644 index e258ce0d8700..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyFetchTest.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.time.Duration; -import java.time.Instant; -import java.util.Arrays; - -import org.hibernate.Hibernate; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; - -/** - * Tests that proxies are resolved correctly by the ToOneIdMapper such that when the values - * are inserted for the join columns, they're resolved correclty avoiding ClassCastException - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-13760") -@RequiresDialectFeature(DialectChecks.SupportsIdentityColumns.class) -public class ManyToOneLazyFetchTest extends BaseEnversFunctionalTestCase { - private Long shipmentId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Shipment.class, Address.class, AddressVersion.class, User.class, ChildUser.class }; - } - - @Test - @Priority(10) - public void initData() { - this.shipmentId = doInHibernate( this::sessionFactory, session -> { - final Shipment shipment = new Shipment( Instant.now(), "system", Instant.now().plus( Duration.ofDays( 3 ) ), "abcd123", null, null ); - session.persist( shipment ); - session.flush(); - - final Address origin = new Address( Instant.now(), "system", "Valencia#1" ); - final Address destination = new Address( Instant.now(), "system", "Madrid#3" ); - final AddressVersion originVersion0 = origin.addInitialVersion( "Poligono Manises" ); - final AddressVersion destinationVersion0 = destination.addInitialVersion( "Poligono Alcobendas" ); - session.persist( origin ); - session.persist( destination ); - session.flush(); - - shipment.setOrigin( originVersion0 ); - shipment.setDestination( destinationVersion0 ); - session.merge( shipment ); - session.flush(); - - return shipment.getId(); - } ); - - doInHibernate( this::sessionFactory, session -> { - final Shipment shipment = session.get( Shipment.class, shipmentId ); - - Hibernate.initialize( shipment.getOrigin() ); - Hibernate.initialize( shipment.getDestination() ); - shipment.setClosed( true ); - - session.merge( shipment ); - session.flush(); - } ); - } - - @Test - public void testRevisionHistory() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Shipment.class, shipmentId ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyProxyTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyProxyTest.java deleted file mode 100644 index d5968f040cf0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyProxyTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import jakarta.persistence.Column; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.Audited; - -import org.hibernate.testing.jdbc.SQLStatementInspector; -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.Jpa; -import org.hibernate.testing.orm.junit.Setting; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -/** - * @author Jan Schatteman - */ -@Jpa ( - annotatedClasses = { - ManyToOneLazyProxyTest.OtherEntity.class, ManyToOneLazyProxyTest.MyEntity.class - }, - integrationSettings = { - @Setting( - name = AvailableSettings.STATEMENT_INSPECTOR, - value = "org.hibernate.testing.jdbc.SQLStatementInspector" - ) - } -) -@JiraKey("HHH-14176") -public class ManyToOneLazyProxyTest { - - @AfterEach - public void clearData(EntityManagerFactoryScope scope) { - scope.inTransaction( - entityManager -> { - entityManager.createQuery( "delete from MyEntity" ); - entityManager.createQuery( "delete from OtherEntity" ); - } - ); - } - - @Test - public void testLazyProxy(EntityManagerFactoryScope scope) { - scope.inTransaction( - entityManager -> { - OtherEntity other = new OtherEntity(); - other.setId( 1L ); - other.setDesc( "abc" ); - entityManager.persist( other ); - } - ); - - SQLStatementInspector sqlStatementInspector = scope.getStatementInspector( SQLStatementInspector.class ); - sqlStatementInspector.clear(); - scope.inTransaction( - entityManager -> { - MyEntity me = new MyEntity(); - me.setOther( entityManager.getReference( OtherEntity.class, 1L ) ); - entityManager.persist(me); - } - ); - Assertions.assertEquals( 0, sqlStatementInspector.getSqlQueries().stream().filter( s -> s.startsWith( "select" ) && s.contains( "other_entity" ) ).count() ); - - } - - @Entity(name = "OtherEntity") - @Table(name = "other_entity") - @Audited - @AuditTable(value = "other_entity_aud") - public static class OtherEntity { - @Id - private Long id; - - @Column(name = "description") - private String desc; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getDesc() { - return desc; - } - - public void setDesc(String desc) { - this.desc = desc; - } - } - - @Entity(name = "MyEntity") - @Table(name = "my_entity") - @Audited - @AuditTable(value = "my_entity_aud") - public static class MyEntity { - @Id - @GeneratedValue - private Long id; - - @ManyToOne(optional = false, fetch = FetchType.LAZY) - private OtherEntity other; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public OtherEntity getOther() { - return other; - } - - public void setOther(OtherEntity other) { - this.other = other; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Shipment.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Shipment.java deleted file mode 100644 index cbefd44453d3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Shipment.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import java.time.Instant; -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; -import jakarta.persistence.UniqueConstraint; -import jakarta.persistence.Version; - -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name = "shipment", uniqueConstraints = @UniqueConstraint(columnNames = { "identifier" })) -@Audited -@AuditTable(value = "shipment_audit") -public class Shipment extends BaseDomainEntity { - private static final long serialVersionUID = 5061763935663020703L; - - @Column(name = "due_date", nullable = false, updatable = false) - private Instant dueDate; - - @Column(name = "identifier", nullable = false, updatable = false) - private String identifier; - - @Version - @Column(name = "mvc_version", nullable = false) - private Long mvcVersion; - - @Column(name = "closed") - private Boolean closed; - - @ManyToOne(optional = true, fetch = FetchType.LAZY, targetEntity = AddressVersion.class) - @JoinColumns(value = { - @JoinColumn(name = "origin_address_id", referencedColumnName = "id", nullable = true), - @JoinColumn(name = "origin_address_version", referencedColumnName = "version", nullable = true) - }) - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private AddressVersion origin; - - @ManyToOne(optional = true, fetch = FetchType.LAZY, targetEntity = AddressVersion.class) - @JoinColumns(value = { - @JoinColumn(name = "destination_address_id", referencedColumnName = "id", nullable = true), - @JoinColumn(name = "destination_address_version", referencedColumnName = "version", nullable = true) - }) - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private AddressVersion destination; - - @ManyToOne(optional = true, fetch = FetchType.LAZY) - @JoinColumn(name = "user_id", referencedColumnName = "id", nullable = true) - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private User user; - - Shipment() { - } - - Shipment(Instant when, String who, Instant dueDate, String identifier, AddressVersion origin, AddressVersion dest) { - super( when, who ); - this.dueDate = dueDate; - this.identifier = Objects.requireNonNull( identifier ); - this.origin = origin; - this.destination = dest; - } - - public Instant getDueDate() { - return dueDate; - } - - public String getIdentifier() { - return identifier; - } - - public Boolean getClosed() { - return closed; - } - - public void setClosed(Boolean closed) { - this.closed = closed; - } - - public AddressVersion getOrigin() { - return origin; - } - - public void setOrigin(AddressVersion origin) { - this.origin = origin; - } - - public AddressVersion getDestination() { - return destination; - } - - public void setDestination(AddressVersion destination) { - this.destination = destination; - } - - public void setUser(User user) { - this.user = user; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/User.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/User.java deleted file mode 100644 index f0cda8d62a71..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/User.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import org.hibernate.envers.NotAudited; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; -import java.util.List; - -/** - * @author Luke Chen - */ -@Entity -@Table(name = "user_tbl") -public class User { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - protected long id = 0; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.REMOVE) - @NotAudited - private List shipmentList; - - User() { - } - - public long getId() { - return id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/maytomany/BasicWhereJoinTable.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/maytomany/BasicWhereJoinTable.java deleted file mode 100644 index e40e46209cf6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/maytomany/BasicWhereJoinTable.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.maytomany; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.WhereJoinTableEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicWhereJoinTable extends BaseEnversJPAFunctionalTestCase { - private Integer ite1_1_id; - private Integer ite1_2_id; - private Integer ite2_1_id; - private Integer ite2_2_id; - - private Integer wjte1_id; - private Integer wjte2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {WhereJoinTableEntity.class, IntNoAutoIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - IntNoAutoIdTestEntity ite1_1 = new IntNoAutoIdTestEntity( 1, 10 ); - IntNoAutoIdTestEntity ite1_2 = new IntNoAutoIdTestEntity( 1, 11 ); - IntNoAutoIdTestEntity ite2_1 = new IntNoAutoIdTestEntity( 2, 20 ); - IntNoAutoIdTestEntity ite2_2 = new IntNoAutoIdTestEntity( 2, 21 ); - - WhereJoinTableEntity wjte1 = new WhereJoinTableEntity(); - wjte1.setData( "wjte1" ); - - WhereJoinTableEntity wjte2 = new WhereJoinTableEntity(); - wjte1.setData( "wjte2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ite1_1 ); - em.persist( ite1_2 ); - em.persist( ite2_1 ); - em.persist( ite2_2 ); - em.persist( wjte1 ); - em.persist( wjte2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 (wjte1: 1_1, 2_1) - - em.getTransaction().begin(); - - wjte1 = em.find( WhereJoinTableEntity.class, wjte1.getId() ); - - wjte1.getReferences1().add( ite1_1 ); - wjte1.getReferences2().add( ite2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (wjte1: 1_1, 2_1; wjte2: 1_1, 1_2) - em.getTransaction().begin(); - - wjte2 = em.find( WhereJoinTableEntity.class, wjte2.getId() ); - - wjte2.getReferences1().add( ite1_1 ); - wjte2.getReferences1().add( ite1_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (wjte1: 2_1; wjte2: 1_1, 1_2, 2_2) - em.getTransaction().begin(); - - wjte1 = em.find( WhereJoinTableEntity.class, wjte1.getId() ); - wjte2 = em.find( WhereJoinTableEntity.class, wjte2.getId() ); - - wjte1.getReferences1().remove( ite1_1 ); - wjte2.getReferences2().add( ite2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ite1_1_id = ite1_1.getId(); - ite1_2_id = ite1_2.getId(); - ite2_1_id = ite2_1.getId(); - ite2_2_id = ite2_2.getId(); - - wjte1_id = wjte1.getId(); - wjte2_id = wjte2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( WhereJoinTableEntity.class, wjte1_id ) ); - assertEquals( Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( WhereJoinTableEntity.class, wjte2_id ) ); - - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite1_1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite1_2_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite2_1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite2_2_id ) ); - } - - @Test - public void testHistoryOfWjte1() { - IntNoAutoIdTestEntity ite1_1 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite1_1_id ); - IntNoAutoIdTestEntity ite2_1 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite2_1_id ); - - WhereJoinTableEntity rev1 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 1 ); - WhereJoinTableEntity rev2 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 2 ); - WhereJoinTableEntity rev3 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 3 ); - WhereJoinTableEntity rev4 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 4 ); - - // Checking 1st list - assert TestTools.checkCollection( rev1.getReferences1() ); - assert TestTools.checkCollection( rev2.getReferences1(), ite1_1 ); - assert TestTools.checkCollection( rev3.getReferences1(), ite1_1 ); - assert TestTools.checkCollection( rev4.getReferences1() ); - - // Checking 2nd list - assert TestTools.checkCollection( rev1.getReferences2() ); - assert TestTools.checkCollection( rev2.getReferences2(), ite2_1 ); - assert TestTools.checkCollection( rev3.getReferences2(), ite2_1 ); - assert TestTools.checkCollection( rev4.getReferences2(), ite2_1 ); - } - - @Test - public void testHistoryOfWjte2() { - IntNoAutoIdTestEntity ite1_1 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite1_1_id ); - IntNoAutoIdTestEntity ite1_2 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite1_2_id ); - IntNoAutoIdTestEntity ite2_2 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite2_2_id ); - - WhereJoinTableEntity rev1 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 1 ); - WhereJoinTableEntity rev2 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 2 ); - WhereJoinTableEntity rev3 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 3 ); - WhereJoinTableEntity rev4 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 4 ); - - // Checking 1st list - assert TestTools.checkCollection( rev1.getReferences1() ); - assert TestTools.checkCollection( rev2.getReferences1() ); - assert TestTools.checkCollection( rev3.getReferences1(), ite1_1, ite1_2 ); - assert TestTools.checkCollection( rev4.getReferences1(), ite1_1, ite1_2 ); - - // Checking 2nd list - assert TestTools.checkCollection( rev1.getReferences2() ); - assert TestTools.checkCollection( rev2.getReferences2() ); - assert TestTools.checkCollection( rev3.getReferences2() ); - assert TestTools.checkCollection( rev4.getReferences2(), ite2_2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildAuditing.java deleted file mode 100644 index c9dea374db0d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildAuditing.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ChildEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; -import org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedChildAuditing extends AbstractModifiedFlagsEntityTest { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testChildHasChanged() throws Exception { - List list = queryForPropertyHasChanged( ChildEntity.class, id1, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ChildEntity.class, id1, "numVal" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ChildEntity.class, id1, "data" ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( ChildEntity.class, id1, "numVal" ); - assertEquals( 0, list.size() ); - } - - @Test - public void testParentHasChanged() throws Exception { - List list = queryForPropertyHasChanged( ParentEntity.class, id1, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ParentEntity.class, id1, "data" ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildReferencing.java deleted file mode 100644 index 3613dbd3c9e4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildReferencing.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ChildIngEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ParentNotIngEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ReferencedEntity; -import org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedChildReferencing extends AbstractModifiedFlagsEntityTest { - private Integer re_id1; - private Integer re_id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - re_id1 = 1; - re_id2 = 10; - Integer c_id = 100; - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity( re_id1 ); - em.persist( re1 ); - - ReferencedEntity re2 = new ReferencedEntity( re_id2 ); - em.persist( re2 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); - - em.getTransaction().commit(); - } - - @Test - public void testReferencedEntityHasChanged() throws Exception { - List list = queryForPropertyHasChanged( ReferencedEntity.class, re_id1, "referencing" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ReferencedEntity.class, re_id1, "referencing" ); - assertEquals( 1, list.size() ); // initially referencing collection is null - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ReferencedEntity.class, re_id2, "referencing" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedNotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedNotOwnedBidirectional.java deleted file mode 100644 index f0522833a087..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedNotOwnedBidirectional.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.Address; -import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.Contact; -import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.PersonalContact; -import org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedNotOwnedBidirectional extends AbstractModifiedFlagsEntityTest { - private Long pc_id; - private Long a1_id; - private Long a2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - pc_id = 1l; - a1_id = 10l; - a2_id = 100l; - - // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); - - Address a1 = new Address( a1_id, "a1" ); - a1.setContact( pc ); - - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc_id ); - - Address a2 = new Address( a2_id, "a2" ); - a2.setContact( pc ); - - em.persist( a2 ); - - em.getTransaction().commit(); - } - - @Test - public void testReferencedEntityHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - PersonalContact.class, pc_id, - "addresses" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( Address.class, a1_id, "contact" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( Address.class, a2_id, "contact" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/AuditColumnNameTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/AuditColumnNameTest.java deleted file mode 100644 index 12930e7b351d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/AuditColumnNameTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.naming; - -import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Query; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.naming.NamingTestEntity2; - -import org.junit.Assert; -import org.junit.Test; - -public class AuditColumnNameTest extends BaseEnversJPAFunctionalTestCase { - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { NamingTestEntity2.class}; - } - - @Test - @Priority(10) - public void initData() { - NamingTestEntity2 nte1 = new NamingTestEntity2("data1" ); - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - em.persist( nte1 ); - em.getTransaction().commit(); - this.id = nte1.getId(); - } - - @Test - public void testColumnName() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - Query query = em.createNativeQuery( - "select nte_data, data_MOD_different from naming_test_entity_2_versions where nte_id = :nteId"); - query.setParameter("nteId", this.id); - List resultList = query.getResultList(); - Assert.assertNotNull(resultList); - Assert.assertTrue(resultList.size() > 0); - Object[] result = resultList.get(0); - Assert.assertEquals(result.length, 2); - em.getTransaction().commit(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/VersionsJoinTableRangeComponentNamingTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/VersionsJoinTableRangeComponentNamingTest.java deleted file mode 100644 index ffc79446ee76..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/VersionsJoinTableRangeComponentNamingTest.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.naming; - -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeComponentTestEntity; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeTestAlternateEntity; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeTestEntity; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeTestEntitySuperClass; - -import org.junit.Test; - -/** - * Test class for {@link VersionsJoinTableRangeComponentTestEntity}, to test - * various {@link org.hibernate.envers.AuditOverride} annotations. - * - * @author Erik-Berndt Scheper - */ -public class VersionsJoinTableRangeComponentNamingTest extends - BaseEnversJPAFunctionalTestCase { - private Integer vjrcte_id; - private Integer vjtrte_id; - private Integer vjtrtae_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - VersionsJoinTableRangeComponentTestEntity.class, - VersionsJoinTableRangeTestEntitySuperClass.class, - VersionsJoinTableRangeTestEntity.class, - VersionsJoinTableRangeTestAlternateEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - // create an instance of the test entity - VersionsJoinTableRangeComponentTestEntity vjrcte = new VersionsJoinTableRangeComponentTestEntity(); - em.persist( vjrcte ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - vjrcte = em.find( - VersionsJoinTableRangeComponentTestEntity.class, - vjrcte.getId() - ); - - // create a component containing a list of - // VersionsJoinTableRangeTestEntity-instances - VersionsJoinTableRangeTestEntity vjtrte = new VersionsJoinTableRangeTestEntity(); - vjtrte.setGenericValue( "generic1" ); - vjtrte.setValue( "value1" ); - // and add it to the test entity - vjrcte.getComponent1().getRange().add( vjtrte ); - - // create a second component containing a list of - // VersionsJoinTableRangeTestAlternateEntity-instances - VersionsJoinTableRangeTestAlternateEntity vjtrtae1 = new VersionsJoinTableRangeTestAlternateEntity(); - vjtrtae1.setGenericValue( "generic2" ); - vjtrtae1.setAlternateValue( "alternateValue2" ); - // and add it to the test entity - vjrcte.getComponent2().getRange().add( vjtrtae1 ); - - // create a third component, and add it to the test entity - Component1 simpleComponent = new Component1( "string1", "string2" ); - vjrcte.setComponent3( simpleComponent ); - - em.persist( vjtrte ); - em.persist( vjtrtae1 ); - em.persist( vjrcte ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - vjrcte = em.find( - VersionsJoinTableRangeComponentTestEntity.class, - vjrcte.getId() - ); - vjtrte = em - .find( VersionsJoinTableRangeTestEntity.class, vjtrte.getId() ); - vjtrtae1 = em.find( - VersionsJoinTableRangeTestAlternateEntity.class, - vjtrtae1.getId() - ); - - assert vjrcte != null; - assert vjtrte != null; - assert vjtrtae1 != null; - - List ent1List = vjrcte - .getComponent1().getRange(); - assert ent1List.size() == 1; - assert vjtrte.equals( ent1List.get( 0 ) ); - - List ent2List = vjrcte - .getComponent2().getRange(); - assert ent2List.size() == 1; - assert vjtrtae1.equals( ent2List.get( 0 ) ); - - em.getTransaction().commit(); - - vjrcte_id = vjrcte.getId(); - vjtrte_id = vjtrte.getId(); - vjtrtae_id1 = vjtrtae1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableRangeComponentTestEntity.class, - vjrcte_id - ) - ); - assert Arrays.asList( 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableRangeTestEntity.class, vjtrte_id - ) - ); - assert Arrays.asList( 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableRangeTestAlternateEntity.class, - vjtrtae_id1 - ) - ); - } - - @Test - public void testHistoryOfUniId1() { - VersionsJoinTableRangeTestEntity vjtrte = getEntityManager().find( - VersionsJoinTableRangeTestEntity.class, vjtrte_id - ); - VersionsJoinTableRangeTestAlternateEntity vjtrtae = getEntityManager() - .find( - VersionsJoinTableRangeTestAlternateEntity.class, - vjtrtae_id1 - ); - - VersionsJoinTableRangeComponentTestEntity rev1 = getAuditReader().find( - VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id, 1 - ); - VersionsJoinTableRangeComponentTestEntity rev2 = getAuditReader().find( - VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id, 2 - ); - - assert rev1.getComponent1().getRange().size() == 0; - assert rev1.getComponent2().getRange().size() == 0; - - assert rev2.getComponent1().getRange().size() == 1; - assert rev2.getComponent1().getRange().get( 0 ).equals( vjtrte ); - assert rev2.getComponent2().getRange().size() == 1; - assert rev2.getComponent2().getRange().get( 0 ).equals( vjtrtae ); - } - - /* The Audit join tables we expect */ - private final static String COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_1_AUD"; - private final static String COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_2_AUD"; - - /* The Audit join tables that should NOT be there */ - private final static String UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestEntity_AUD"; - private final static String UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestAlternateEntity_AUD"; - - @Test - public void testExpectedTableNameComponent1() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_1_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - assert COMPONENT_1_AUDIT_JOIN_TABLE_NAME.equals( - auditClass.getTable() - .getName() - ); - } - - @Test - public void testExpectedTableNameComponent2() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_2_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - assert COMPONENT_2_AUDIT_JOIN_TABLE_NAME.equals( - auditClass.getTable() - .getName() - ); - } - - @Test - public void testWrongTableNameComponent1() { - PersistentClass auditClass = metadata().getEntityBinding( - UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass == null; - } - - @Test - public void testWrongTableNameComponent2() { - PersistentClass auditClass = metadata().getEntityBinding( - UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass == null; - } - - @Test - public void testJoinColumnNamesComponent1() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_1_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - - @SuppressWarnings("unchecked") - Iterator columns = auditClass.getTable().getColumns().iterator(); - - boolean id1Found = false; - boolean id2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "VJTRCTE1_ID".equals( column.getName() ) ) { - id1Found = true; - } - - if ( "VJTRTE_ID".equals( column.getName() ) ) { - id2Found = true; - } - } - - assert id1Found && id2Found; - } - - @Test - public void testJoinColumnNamesComponent2() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_2_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - - @SuppressWarnings("unchecked") - Iterator columns = auditClass.getTable().getColumns().iterator(); - - boolean id1Found = false; - boolean id2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "VJTRCTE2_ID".equals( column.getName() ) ) { - id1Found = true; - } - - if ( "VJTRTAE_ID".equals( column.getName() ) ) { - id2Found = true; - } - } - - assert id1Found && id2Found; - } - - /** - * Verify that - * {@link VersionsJoinTableRangeComponentTestEntity#getComponent3()} is - * partially audited. - */ - @Test - public void testOverrideNotAudited() { - PersistentClass auditClass = metadata().getEntityBinding( - VersionsJoinTableRangeComponentTestEntity.class.getName() - + "_AUD" - ); - assert auditClass != null; - - @SuppressWarnings("unchecked") - Iterator columns = auditClass.getTable().getColumns().iterator(); - - boolean auditColumn1Found = false; - boolean auditColumn2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "STR1".equals( column.getName() ) ) { - auditColumn1Found = true; - } - - if ( "STR2".equals( column.getName() ) ) { - auditColumn2Found = true; - } - } - - assert auditColumn1Found && !auditColumn2Found; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java deleted file mode 100644 index 60589e2e36b8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.onetoone.bidirectional; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefedOptionalEntity; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefingOptionalEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8305") -public class BidirectionalOneToOneOptionalTest extends BaseEnversJPAFunctionalTestCase { - private Integer refingWithNoRefedId; - private Integer refingId; - private Integer refedId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - BiRefingOptionalEntity.class, - BiRefedOptionalEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); - - // store refing with null refed entity - BiRefingOptionalEntity refingWithNoRefed = new BiRefingOptionalEntity(); - refingWithNoRefed.setReference( null ); - entityManager.persist( refingWithNoRefed ); - - // store refing with non-null refed entity - BiRefingOptionalEntity refing = new BiRefingOptionalEntity(); - BiRefedOptionalEntity refed = new BiRefedOptionalEntity(); - refed.setReferencing( refing ); - refing.setReference( refed ); - entityManager.persist( refing ); - entityManager.persist( refed ); - - entityManager.getTransaction().commit(); - - this.refingId = refing.getId(); - this.refedId = refed.getId(); - this.refingWithNoRefedId = refingWithNoRefed.getId(); - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingWithNoRefedId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefedOptionalEntity.class, refedId ).size() ); - } - - @Test - public void testRevisionHistoryNullReference() { - BiRefingOptionalEntity rev1 = getAuditReader().find( BiRefingOptionalEntity.class, refingWithNoRefedId, 1 ); - assertNull( rev1.getReference() ); - } - - @Test - public void testRevisionHistoryWithNonNullReference() { - assertNotNull( getAuditReader().find( BiRefingOptionalEntity.class, refingId, 1).getReference() ); - assertNotNull( getAuditReader().find( BiRefedOptionalEntity.class, refedId, 1 ).getReferencing() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AssociationToOneInnerJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AssociationToOneInnerJoinQueryTest.java deleted file mode 100644 index f3b37cb1ac22..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AssociationToOneInnerJoinQueryTest.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.query.entities.Address; -import org.hibernate.orm.test.envers.integration.query.entities.Car; -import org.hibernate.orm.test.envers.integration.query.entities.Person; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@SuppressWarnings("unchecked") -public class AssociationToOneInnerJoinQueryTest extends BaseEnversJPAFunctionalTestCase { - - private Car vw; - private Car ford; - private Car toyota; - private Address address1; - private Address address2; - private Person vwOwner; - private Person fordOwner; - private Person toyotaOwner; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Car.class, Person.class, Address.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // revision 1 - em.getTransaction().begin(); - address1 = new Address( "Freiburgerstrasse", 5 ); - em.persist( address1 ); - address2 = new Address( "Hindenburgstrasse", 30 ); - em.persist( address2 ); - vwOwner = new Person( "VW owner", 20, address1 ); - em.persist( vwOwner ); - fordOwner = new Person( "Ford owner", 30, address1 ); - em.persist( fordOwner ); - toyotaOwner = new Person( "Toyota owner", 30, address2 ); - em.persist( toyotaOwner ); - final Person nonOwner = new Person( "NonOwner", 30, address1 ); - em.persist( nonOwner ); - vw = new Car( "VW" ); - vw.setOwner( vwOwner ); - em.persist( vw ); - ford = new Car( "Ford" ); - ford.setOwner( fordOwner ); - em.persist( ford ); - toyota = new Car( "Toyota" ); - toyota.setOwner( toyotaOwner ); - em.persist( toyota ); - em.getTransaction().commit(); - - // revision 2 - em.getTransaction().begin(); - toyotaOwner.setAge( 40 ); - em.getTransaction().commit(); - } - - @Test - public void testAssociationQuery() { - - final AuditReader auditReader = getAuditReader(); - final Car result1 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) - .add( AuditEntity.property( "name" ).like( "Ford%" ) ).getSingleResult(); - assertEquals( "Unexpected single car at revision 1", ford.getId(), result1.getId() ); - - Car result2 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .add( AuditEntity.property( "number" ).eq( 30 ) ).getSingleResult(); - assertEquals( "Unexpected single car at revision 1", toyota.getId(), result2.getId() ); - - List resultList1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) - .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() - .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); - assertEquals( "Unexpected number of cars for query in revision 1", 2, resultList1.size() ); - assertEquals( "Unexpected car at index 0 in revision 1", ford.getId(), resultList1.get( 0 ).getId() ); - assertEquals( "Unexpected car at index 1 in revision 2", toyota.getId(), resultList1.get( 1 ).getId() ); - - Car result3 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() - .addOrder( AuditEntity.property( "make" ).asc() ).getSingleResult(); - assertEquals( "Unexpected car at revision 2", ford.getId(), result3.getId() ); - } - - @Test - public void testAssociationQueryWithOrdering() { - - AuditReader auditReader = getAuditReader(); - - List cars1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .addOrder( AuditEntity.property( "number" ).asc() ).up().addOrder( AuditEntity.property( "age" ).desc() ).getResultList(); - assertEquals( "Unexpected number of results", 3, cars1.size() ); - assertEquals( "Unexpected car at index 0", ford.getId(), cars1.get( 0 ).getId() ); - assertEquals( "Unexpected car at index 1", vw.getId(), cars1.get( 1 ).getId() ); - assertEquals( "Unexpected car at index 2", toyota.getId(), cars1.get( 2 ).getId() ); - - List cars2 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .addOrder( AuditEntity.property( "number" ).asc() ).up().addOrder( AuditEntity.property( "age" ).asc() ).getResultList(); - assertEquals( "Unexpected number of results", 3, cars2.size() ); - assertEquals( "Unexpected car at index 0", vw.getId(), cars2.get( 0 ).getId() ); - assertEquals( "Unexpected car at index 1", ford.getId(), cars2.get( 1 ).getId() ); - assertEquals( "Unexpected car at index 2", toyota.getId(), cars2.get( 2 ).getId() ); - - } - - @Test - public void testAssociationQueryWithProjection() { - - AuditReader auditReader = getAuditReader(); - - List list1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .addProjection( AuditEntity.property( "age" ) ).addOrder( AuditEntity.property( "age" ).asc() ).getResultList(); - assertEquals( "Unexpected number of results", 3, list1.size() ); - assertEquals( "Unexpected age at index 0", Integer.valueOf( 20 ), list1.get( 0 ) ); - assertEquals( "Unexpected age at index 0", Integer.valueOf( 30 ), list1.get( 1 ) ); - assertEquals( "Unexpected age at index 0", Integer.valueOf( 40 ), list1.get( 2 ) ); - - List
list2 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .addOrder( AuditEntity.property( "age" ).asc() ).traverseRelation( "address", JoinType.INNER ).addProjection( AuditEntity.selectEntity( false ) ).getResultList(); - assertEquals( "Unexpected number of results", 2, list2.size() ); - assertEquals( "Unexpected address at index 0", address1.getId(), list2.get( 0 ).getId() ); - assertEquals( "Unexpected address at index 1", address2.getId(), list2.get( 1 ).getId() ); - - List
list3 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .addProjection( AuditEntity.selectEntity( true ) ).addOrder( AuditEntity.property( "number" ).asc() ).getResultList(); - assertEquals( "Unexpected number of results", 2, list3.size() ); - assertEquals( "Unexpected address at index 0", address1.getId(), list3.get( 0 ).getId() ); - assertEquals( "Unexpected address at index 1", address2.getId(), list3.get( 1 ).getId() ); - - List list4 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .addOrder( AuditEntity.property( "age" ).asc() ).addProjection( AuditEntity.selectEntity( false ) ).traverseRelation( "address", JoinType.INNER ) - .addProjection( AuditEntity.property( "number" ) ).getResultList(); - assertEquals( "Unexpected number of results", 3, list4.size() ); - final Object[] index0 = list4.get( 0 ); - assertEquals( "Unexpected owner at index 0", vwOwner.getId(), ( (Person) index0[0] ).getId() ); - assertEquals( "Unexpected number at index 0", Integer.valueOf( 5 ), index0[1] ); - final Object[] index1 = list4.get( 1 ); - assertEquals( "Unexpected owner at index 1", fordOwner.getId(), ( (Person) index1[0] ).getId() ); - assertEquals( "Unexpected number at index 1", Integer.valueOf( 5 ), index1[1] ); - final Object[] index2 = list4.get( 2 ); - assertEquals( "Unexpected owner at index 2", toyotaOwner.getId(), ( (Person) index2[0] ).getId() ); - assertEquals( "Unexpected number at index 2", Integer.valueOf( 30 ), index2[1] ); - } - - @Test - public void testDisjunctionOfPropertiesFromDifferentEntities() { - AuditReader auditReader = getAuditReader(); - // all cars where the owner has an age of 20 or lives in an address with number 30. - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.INNER, "p" ) - .traverseRelation( "address", JoinType.INNER, "a" ) - .up().up().add( AuditEntity.disjunction().add(AuditEntity.property( "p", "age" ) - .eq( 20 ) ).add( AuditEntity.property( "a", "number" ).eq( 30 ) ) ) - .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); - assertEquals( "Expected two cars to be returned, Toyota and VW", 2, resultList.size() ); - assertEquals( "Unexpected car at index 0", toyota.getId(), resultList.get(0).getId() ); - assertEquals( "Unexpected car at index 1", vw.getId(), resultList.get(1).getId() ); - } - - @Test - public void testComparisonOfTwoPropertiesFromDifferentEntities() { - AuditReader auditReader = getAuditReader(); - // the car where the owner age is equal to the owner address number. - Car result = (Car) auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.INNER, "p" ) - .traverseRelation( "address", JoinType.INNER, "a" ) - .up().up().add(AuditEntity.property( "p", "age" ) - .eqProperty( "a", "number" ) ).getSingleResult(); - assertEquals( "Unexpected car returned", toyota.getId(), result.getId() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AuditFunctionQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AuditFunctionQueryTest.java deleted file mode 100644 index eccbccef5422..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AuditFunctionQueryTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class AuditFunctionQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - - @Id - private Long id; - private String string1; - private String string2; - private Integer integer1; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getString1() { - return string1; - } - - public void setString1(String string1) { - this.string1 = string1; - } - - public String getString2() { - return string2; - } - - public Integer getInteger1() { - return integer1; - } - - public void setInteger1(Integer integer1) { - this.integer1 = integer1; - } - - public void setString2(String string2) { - this.string2 = string2; - } - - } - - private TestEntity testEntity1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - testEntity1 = new TestEntity(); - testEntity1.setId( 1L ); - testEntity1.setString1( "abcdef" ); - testEntity1.setString2( "42 - the truth" ); - testEntity1.setInteger1(42 ); - em.persist( testEntity1 ); - em.getTransaction().commit(); - } - - @Test - public void testProjectionWithPropertyArgument() { - Object actual = getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .addProjection( AuditEntity.function( "upper", AuditEntity.property( "string1" ) ) ).getSingleResult(); - String expected = testEntity1.getString1().toUpperCase(); - assertEquals( "Expected the property string1 to be upper case", expected, actual ); - } - - @Test - public void testProjectionWithPropertyAndSimpleArguments() { - Object actual = getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .addProjection( AuditEntity.function( "substring", AuditEntity.property( "string1" ), 3, 2 ) ).getSingleResult(); - // the sql substring indices are 1 based while java substring indices are 0 based - // the sql substring second parameter denotes the length of the substring - // while in java the scond argument denotes the end index - String expected = testEntity1.getString1().substring( 2, 4 ); - assertEquals( "Expected the substring of the property string1", expected, actual ); - } - - @Test - public void testProjectionWithNestedFunction() { - Object actual = getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .addProjection( AuditEntity.function( "concat", - AuditEntity.function( "upper", AuditEntity.property( "string1" ) ), - AuditEntity.function( "substring", AuditEntity.property( "string2" ), 1, 2 ) ) ) - .getSingleResult(); - final String expected = testEntity1.getString1().toUpperCase().concat( testEntity1.getString2().substring( 0, 2 ) ); - assertEquals( "Expected the upper cased string1 to be concat with the first two characters of string2", expected, actual ); - } - - @Test - public void testComparisonFunctionWithValue() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "substring", AuditEntity.property( "string1" ), 3, 2 ).eq( "cd" ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testComparionFunctionWithProperty() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "length", AuditEntity.property( "string2" ) ).ltProperty( "integer1" ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testComparisonFunctionWithFunction() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "substring", AuditEntity.property( "string2" ), 1, 2 ) - .eqFunction( AuditEntity.function( "str", AuditEntity.property( "integer1" ) ) ) ) - .getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testComparisonPropertyWithFunction() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.property( "integer1" ).gtFunction( AuditEntity.function( "length", AuditEntity.property( "string2" ) ) ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testFunctionOnIdProperty() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "str", AuditEntity.id() ).like( "%1%" ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/InheritanceAssociationToOneInnerJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/InheritanceAssociationToOneInnerJoinTest.java deleted file mode 100644 index cf1337dedc93..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/InheritanceAssociationToOneInnerJoinTest.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.hibernate.envers.query.AuditEntity.disjunction; -import static org.hibernate.envers.query.AuditEntity.property; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11383") -public class InheritanceAssociationToOneInnerJoinTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityA.class, EntityB.class, EntityC.class, EntityD.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityC c = new EntityC(); - c.setId( 1 ); - c.setFoo( "bar" ); - entityManager.persist( c ); - - final EntityD d = new EntityD(); - d.setId( 1 ); - d.setFoo( "bar" ); - entityManager.persist( d ); - - final EntityB b1 = new EntityB(); - b1.setId( 1 ); - b1.setName( "b1" ); - b1.setRelationToC( c ); - b1.setRelationToD( d ); - entityManager.persist( b1 ); - - final EntityB b2 = new EntityB(); - b2.setId( 2 ); - b2.setName( "b2" ); - b2.setRelationToC( c ); - b2.setRelationToD( d ); - entityManager.persist( b2 ); - } ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsManyToOne() { - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .add( - disjunction() - .add( property( "name" ).like( "b1" ) ) - .add( property( "name" ).like( "b2" ) ) ) - .traverseRelation( "relationToC", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsOneToOne() { - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .add( - disjunction() - .add( property( "name" ).like( "b1" ) ) - .add( property( "name" ).like( "b2" ) ) ) - .traverseRelation( "relationToD", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsToOne() { - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .add( - disjunction() - .add( property( "name" ).like( "b1" ) ) - .add( property( "name" ).like( "b2" ) ) ) - .traverseRelation( "relationToC", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .up() - .traverseRelation( "relationToD", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceSubclassPropertyProjectionWithRelationTraversal() { - // HHH-11383 - // This test was requested by the reporter so that we have a test that shows Hibernate is - // automatically adding "INNER JOIN EntityA_AUD" despite the fact whether the query uses - // the traverseRelation API or not. This test makes sure that if the SQL generation is - // changed in the future, Envers would properly fail if so. - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .addProjection( property( "name" ) ) - .traverseRelation( "relationToC", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Entity(name = "EntityA") - @Audited - @Inheritance(strategy = InheritanceType.JOINED) - public static class EntityA { - @Id - private Integer id; - @ManyToOne - private EntityD relationToD; - @ManyToOne - private EntityC relationToC; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public EntityC getRelationToC() { - return relationToC; - } - - public void setRelationToC(EntityC relationToC) { - this.relationToC = relationToC; - } - - public EntityD getRelationToD() { - return relationToD; - } - - public void setRelationToD(EntityD relationToD) { - this.relationToD = relationToD; - } - } - - @Entity(name = "EntityB") - @Audited - public static class EntityB extends EntityA { - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityC") - @Audited - public static class EntityC { - @Id - private Integer id; - private String foo; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFoo() { - return foo; - } - - public void setFoo(String foo) { - this.foo = foo; - } - } - - @Entity(name = "EntityD") - @Audited - public static class EntityD { - @Id - private Integer id; - private String foo; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFoo() { - return foo; - } - - public void setFoo(String foo) { - this.foo = foo; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByLimitQuery.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByLimitQuery.java deleted file mode 100644 index fb79316cc7dd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByLimitQuery.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class OrderByLimitQuery extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - private Integer id4; - private Integer id5; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - IntTestEntity ite1 = new IntTestEntity( 12 ); - IntTestEntity ite2 = new IntTestEntity( 5 ); - IntTestEntity ite3 = new IntTestEntity( 8 ); - IntTestEntity ite4 = new IntTestEntity( 1 ); - - em.persist( ite1 ); - em.persist( ite2 ); - em.persist( ite3 ); - em.persist( ite4 ); - - id1 = ite1.getId(); - id2 = ite2.getId(); - id3 = ite3.getId(); - id4 = ite4.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - IntTestEntity ite5 = new IntTestEntity( 3 ); - em.persist( ite5 ); - id5 = ite5.getId(); - - ite1 = em.find( IntTestEntity.class, id1 ); - ite1.setNumber( 0 ); - - ite4 = em.find( IntTestEntity.class, id4 ); - ite4.setNumber( 15 ); - - em.getTransaction().commit(); - } - - @Test - public void testEntitiesOrderLimitByQueryRev1() { - List res_0_to_1 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 0 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_2_to_3 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 2 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_empty = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 4 ) - .setMaxResults( 2 ) - .getResultList(); - - assert Arrays.asList( new IntTestEntity( 12, id1 ), new IntTestEntity( 8, id3 ) ).equals( res_0_to_1 ); - assert Arrays.asList( new IntTestEntity( 5, id2 ), new IntTestEntity( 1, id4 ) ).equals( res_2_to_3 ); - assert Arrays.asList().equals( res_empty ); - } - - @Test - public void testEntitiesOrderLimitByQueryRev2() { - List res_0_to_1 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 0 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_2_to_3 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 2 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_4 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 4 ) - .setMaxResults( 2 ) - .getResultList(); - - assert Arrays.asList( new IntTestEntity( 15, id4 ), new IntTestEntity( 8, id3 ) ).equals( res_0_to_1 ); - assert Arrays.asList( new IntTestEntity( 5, id2 ), new IntTestEntity( 3, id5 ) ).equals( res_2_to_3 ); - assert Arrays.asList( new IntTestEntity( 0, id1 ) ).equals( res_4 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByOneAuditEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByOneAuditEntityTest.java deleted file mode 100644 index da308780bed7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByOneAuditEntityTest.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderBy; - -import org.hibernate.annotations.BatchSize; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * Test the use of the {@link OrderBy} annotation on a one-to-many collection where - * both sides of the association are audited. - * - * This mapping invokes the use of the OneAuditEntityQueryGenerator which we want to - * verify orders the collection results properly. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12992") -public class OrderByOneAuditEntityTest extends BaseEnversJPAFunctionalTestCase { - @Entity(name = "Parent") - @Audited - public static class Parent { - @Id - @GeneratedValue - private Integer id; - - @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) - @OrderBy("index1, index2 desc") - @AuditMappedBy(mappedBy = "parent", positionMappedBy = "index1") - @Fetch(FetchMode.SELECT) - @BatchSize(size = 100) - private List children = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - } - - @Entity(name = "Child") - @Audited - public static class Child { - @Id - private Integer id; - - private Integer index1; - private Integer index2; - - @ManyToOne - private Parent parent; - - public Child() { - - } - - public Child(Integer id, Integer index1) { - this.id = id; - this.index1 = index1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getIndex1() { - return index1; - } - - public void setIndex1(Integer index1) { - this.index1 = index1; - } - - public Integer getIndex2() { - return index2; - } - - public void setIndex2(Integer index2) { - this.index2 = index2; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Child child = (Child) o; - return Objects.equals( id, child.id ) && - Objects.equals( index1, child.index1 ); - } - - @Override - public int hashCode() { - return Objects.hash( id, index1 ); - } - - @Override - public String toString() { - return "Child{" + - "id=" + id + - ", index1=" + index1 + - '}'; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - private Integer parentId; - - @Test - public void initData() { - // Rev 1 - this.parentId = doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = new Parent(); - - final Child child1 = new Child(); - child1.setId( 1 ); - child1.setIndex1( 1 ); - child1.setIndex2( 1 ); - child1.setParent( parent ); - parent.getChildren().add( child1 ); - - final Child child2 = new Child(); - child2.setId( 2 ); - child2.setIndex1( 2 ); - child2.setIndex2( 2 ); - child2.setParent( parent ); - parent.getChildren().add( child2 ); - - entityManager.persist( parent ); - - return parent.getId(); - } ); - - // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - - final Child child = new Child(); - child.setId( 3 ); - child.setIndex1( 3 ); - child.setIndex2( 3 ); - child.setParent( parent ); - parent.getChildren().add( child ); - - entityManager.merge( parent ); - } ); - - // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - parent.getChildren().removeIf( c -> c.getIndex1() == 2 ); - entityManager.merge( parent ); - } ); - - // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - parent.getChildren().clear(); - entityManager.merge( parent ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, this.parentId ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testRevision1History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 1 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); - } - - @Test - public void testRevision2History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 2 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 3, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); - } - - @Test - public void testRevision3History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 3 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); - } - - @Test - public void testRevision4History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 4 ); - assertNotNull( parent ); - assertTrue( parent.getChildren().isEmpty() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByThreeEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByThreeEntityTest.java deleted file mode 100644 index 5a56a4ac5c65..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByThreeEntityTest.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OrderBy; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * Test the use of the {@link OrderBy} annotation on a map-based element-collection - * that uses entities for the key and value. - * - * This mapping and association invokes the use of the ThreeEntityQueryGenerator which - * we want to verify orders the collection results properly. - * - * It's worth noting that a mapping like this orders the collection based on the value - * and not the key. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12992") -public class OrderByThreeEntityTest extends BaseEnversJPAFunctionalTestCase { - @Entity(name = "Container") - @Audited - public static class Container { - @Id - @GeneratedValue - private Integer id; - @ElementCollection - @OrderBy("value desc") - private Map data = new HashMap<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getData() { - return data; - } - - public void setData(Map data) { - this.data = data; - } - } - - @Entity(name = "MapKey") - @Audited - public static class Key { - @Id - private Integer id; - @Column(name = "val") - private String value; - - public Key() { - - } - - public Key(Integer id, String value) { - this.id = id; - this.value = value; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Key key = (Key) o; - return Objects.equals( id, key.id ) && - Objects.equals( value, key.value ); - } - - @Override - public int hashCode() { - return Objects.hash( id, value ); - } - - @Override - public String toString() { - return "Key{" + - "id=" + id + - ", value='" + value + '\'' + - '}'; - } - } - - @Entity(name = "Item") - @Audited - public static class Item { - @Id - private Integer id; - @Column(name = "val") - private String value; - - public Item() { - - } - - public Item(Integer id, String value) { - this.id = id; - this.value = value; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Item item = (Item) o; - return Objects.equals( id, item.id ) && - Objects.equals( value, item.value ); - } - - @Override - public int hashCode() { - return Objects.hash( id, value ); - } - - @Override - public String toString() { - return "Item{" + - "id=" + id + - ", value='" + value + '\'' + - '}'; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Container.class, Key.class, Item.class }; - } - - private Integer containerId; - - @Test - public void initData() { - // Rev 1 - this.containerId = doInJPA( this::entityManagerFactory, entityManager -> { - final Container container = new Container(); - - final Key key1 = new Key( 1, "A" ); - final Key key2 = new Key( 2, "B" ); - - final Item item1 = new Item( 1, "I1" ); - final Item item2 = new Item( 2, "I2" ); - - entityManager.persist( item1 ); - entityManager.persist( item2 ); - entityManager.persist( key1 ); - entityManager.persist( key2 ); - - container.getData().put( key1, item2 ); - container.getData().put( key2, item1 ); - entityManager.persist( container ); - - return container.getId(); - } ); - - // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Container container = entityManager.find( Container.class, containerId ); - - final Key key = new Key( 3, "C" ); - final Item item = new Item( 3, "I3" ); - - entityManager.persist( key ); - entityManager.persist( item ); - - container.getData().put( key, item ); - entityManager.merge( container ); - } ); - - // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Container container = entityManager.find( Container.class, containerId ); - container.getData().keySet().forEach( - key -> { - if ( "B".equals( key.getValue() ) ) { - final Item item = container.getData().get( key ); - container.getData().remove( key ); - entityManager.remove( key ); - entityManager.remove( item ); - } - } - ); - entityManager.merge( container ); - } ); - - // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Container container = entityManager.find( Container.class, containerId ); - container.getData().entrySet().forEach( - entry -> { - entityManager.remove( entry.getKey() ); - entityManager.remove( entry.getValue() ); - } - ); - container.getData().clear(); - entityManager.merge( container ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Container.class, this.containerId ) ); - - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Key.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Key.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Key.class, 3 ) ); - - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Item.class, 1 ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Item.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Item.class, 3 ) ); - } - - @Test - public void testRevision1History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 1 ); - assertNotNull( container ); - assertTrue( !container.getData().isEmpty() ); - assertEquals( 2, container.getData().size() ); - - final Iterator> iterator = container.getData().entrySet().iterator(); - - final Map.Entry first = iterator.next(); - assertEquals( new Key( 1, "A" ), first.getKey() ); - assertEquals( new Item( 2, "I2" ), first.getValue() ); - - final Map.Entry second = iterator.next(); - assertEquals( new Key( 2, "B" ), second.getKey() ); - assertEquals( new Item( 1, "I1" ), second.getValue() ); - } - - @Test - public void testRevision2History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 2 ); - assertNotNull( container ); - assertTrue( !container.getData().isEmpty() ); - assertEquals( 3, container.getData().size() ); - - final Iterator> iterator = container.getData().entrySet().iterator(); - - final Map.Entry first = iterator.next(); - assertEquals( new Key( 3, "C" ), first.getKey() ); - assertEquals( new Item( 3, "I3" ), first.getValue() ); - - final Map.Entry second = iterator.next(); - assertEquals( new Key( 1, "A" ), second.getKey() ); - assertEquals( new Item( 2, "I2" ), second.getValue() ); - - final Map.Entry third = iterator.next(); - assertEquals( new Key( 2, "B" ), third.getKey() ); - assertEquals( new Item( 1, "I1" ), third.getValue() ); - } - - @Test - public void testRevision3History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 3 ); - assertNotNull( container ); - assertTrue( !container.getData().isEmpty() ); - assertEquals( 2, container.getData().size() ); - - final Iterator> iterator = container.getData().entrySet().iterator(); - - final Map.Entry first = iterator.next(); - assertEquals( new Key( 3, "C" ), first.getKey() ); - assertEquals( new Item( 3, "I3" ), first.getValue() ); - - final Map.Entry second = iterator.next(); - assertEquals( new Key( 1, "A" ), second.getKey() ); - assertEquals( new Item( 2, "I2" ), second.getValue() ); - } - - @Test - public void testRevision4History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 4 ); - assertNotNull( container ); - assertTrue( container.getData().isEmpty() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityOneAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityOneAuditedTest.java deleted file mode 100644 index 2715f78fc90c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityOneAuditedTest.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OrderBy; - -import org.hibernate.annotations.BatchSize; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * Test the use of the {@link OrderBy} annotation on a many-to-many collection - * where the two entities are audited but the association is not. - * - * The double audited entity but no association audited mapping invokes the use - * of the TwoEntityOneAuditedGenerator which we want to verify orders the - * collection results properly. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12992") -public class OrderByTwoEntityOneAuditedTest extends BaseEnversJPAFunctionalTestCase { - @Entity(name = "Parent") - @Audited - public static class Parent { - @Id - @GeneratedValue - private Integer id; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToMany(mappedBy = "parents", cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @OrderBy("index1, index2 desc") - @Fetch(FetchMode.SELECT) - @BatchSize(size = 100) - private List children = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - } - - @Entity(name = "Child") - @Audited - public static class Child { - @Id - private Integer id; - - private Integer index1; - private Integer index2; - - @ManyToMany - private List parents = new ArrayList<>(); - - public Child() { - - } - - public Child(Integer id, Integer index1) { - this.id = id; - this.index1 = index1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getIndex1() { - return index1; - } - - public void setIndex1(Integer index1) { - this.index1 = index1; - } - - public Integer getIndex2() { - return index2; - } - - public void setIndex2(Integer index2) { - this.index2 = index2; - } - - public List getParents() { - return parents; - } - - public void setParents(List parents) { - this.parents = parents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Child child = (Child) o; - return Objects.equals( id, child.id ) && - Objects.equals( index1, child.index1 ); - } - - @Override - public int hashCode() { - return Objects.hash( id, index1 ); - } - - @Override - public String toString() { - return "Child{" + - "id=" + id + - ", index1=" + index1 + - '}'; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - private Integer parentId; - - @Test - public void initData() { - // Rev 1 - this.parentId = doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = new Parent(); - - final Child child1 = new Child(); - child1.setId( 1 ); - child1.setIndex1( 1 ); - child1.setIndex2( 1 ); - child1.getParents().add( parent ); - parent.getChildren().add( child1 ); - - final Child child2 = new Child(); - child2.setId( 2 ); - child2.setIndex1( 2 ); - child2.setIndex2( 2 ); - child2.getParents().add( parent ); - parent.getChildren().add( child2 ); - - entityManager.persist( parent ); - - return parent.getId(); - } ); - - // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - - final Child child = new Child(); - child.setId( 3 ); - child.setIndex1( 3 ); - child.setIndex2( 3 ); - child.getParents().add( parent ); - parent.getChildren().add( child ); - - entityManager.merge( parent ); - } ); - - // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - parent.getChildren().removeIf( c -> { - if ( c.getIndex1() == 2 ) { - c.getParents().remove( parent ); - return true; - } - return false; - } ); - entityManager.merge( parent ); - } ); - - // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - parent.getChildren().forEach( c -> c.getParents().clear() ); - parent.getChildren().clear(); - entityManager.merge( parent ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, this.parentId ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testRevision1History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 1 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); - } - - @Test - public void testRevision2History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 2 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 3, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); - } - - @Test - public void testRevision3History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 3 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); - } - - @Test - public void testRevision4History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 4 ); - assertNotNull( parent ); - assertTrue( parent.getChildren().isEmpty() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityTest.java deleted file mode 100644 index 515a4ea922a5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityTest.java +++ /dev/null @@ -1,267 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OrderBy; - -import org.hibernate.annotations.BatchSize; -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * Test the use of the {@link OrderBy} annotation on a many-to-many collection - * where the two entities and the association are audited. - * - * The double auditd entity and association mapping invokes the use of the - * TwoEntityQueryGenerator which we want to verify orders the collection - * results properly. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12992") -public class OrderByTwoEntityTest extends BaseEnversJPAFunctionalTestCase { - @Entity(name = "Parent") - @Audited - public static class Parent { - @Id - @GeneratedValue - private Integer id; - - @ManyToMany(mappedBy = "parents", cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @OrderBy("index1, index2 desc") - @AuditMappedBy(mappedBy = "parents", positionMappedBy = "index1") - @Fetch(FetchMode.SELECT) - @BatchSize(size = 100) - private List children = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - } - - @Entity(name = "Child") - @Audited - public static class Child { - @Id - private Integer id; - - private Integer index1; - private Integer index2; - - @ManyToMany - private List parents = new ArrayList<>(); - - public Child() { - - } - - public Child(Integer id, Integer index1) { - this.id = id; - this.index1 = index1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getIndex1() { - return index1; - } - - public void setIndex1(Integer index1) { - this.index1 = index1; - } - - public Integer getIndex2() { - return index2; - } - - public void setIndex2(Integer index2) { - this.index2 = index2; - } - - public List getParents() { - return parents; - } - - public void setParents(List parents) { - this.parents = parents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Child child = (Child) o; - return Objects.equals( id, child.id ) && - Objects.equals( index1, child.index1 ); - } - - @Override - public int hashCode() { - return Objects.hash( id, index1 ); - } - - @Override - public String toString() { - return "Child{" + - "id=" + id + - ", index1=" + index1 + - '}'; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - private Integer parentId; - - @Test - public void initData() { - // Rev 1 - this.parentId = doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = new Parent(); - - final Child child1 = new Child(); - child1.setId( 1 ); - child1.setIndex1( 1 ); - child1.setIndex2( 1 ); - child1.getParents().add( parent ); - parent.getChildren().add( child1 ); - - final Child child2 = new Child(); - child2.setId( 2 ); - child2.setIndex1( 2 ); - child2.setIndex2( 2 ); - child2.getParents().add( parent ); - parent.getChildren().add( child2 ); - - entityManager.persist( parent ); - - return parent.getId(); - } ); - - // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - - final Child child = new Child(); - child.setId( 3 ); - child.setIndex1( 3 ); - child.setIndex2( 3 ); - child.getParents().add( parent ); - parent.getChildren().add( child ); - - entityManager.merge( parent ); - } ); - - // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - parent.getChildren().removeIf( c -> { - if ( c.getIndex1() == 2 ) { - c.getParents().remove( parent ); - return true; - } - return false; - } ); - entityManager.merge( parent ); - } ); - - // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); - parent.getChildren().forEach( c -> c.getParents().clear() ); - parent.getChildren().clear(); - entityManager.merge( parent ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, this.parentId ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testRevision1History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 1 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); - } - - @Test - public void testRevision2History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 2 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 3, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); - } - - @Test - public void testRevision3History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 3 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); - } - - @Test - public void testRevision4History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 4 ); - assertNotNull( parent ); - assertTrue( parent.getChildren().isEmpty() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/StrictJpaComplianceTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/StrictJpaComplianceTest.java deleted file mode 100644 index 49d725ebb804..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/StrictJpaComplianceTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.Map; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; - -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -@SuppressWarnings("unchecked") -public class StrictJpaComplianceTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.JPA_QUERY_COMPLIANCE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Organization.class - }; - } - - @Test - public void testIt() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - AuditReaderFactory.get( entityManager ).getRevisions( Organization.class, 1 ); - } ); - - } - - /** - * @author Madhumita Sadhukhan - */ - @Entity - @Table(name = "ORG") - public static class Organization { - - @Id - @GeneratedValue - @Audited - private int id; - - @Audited - @Column(name = "ORG_NAME") - private String name; - - public Organization() { - } - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java deleted file mode 100644 index ed83c0811fdd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query.ids; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11748") -public class EmbeddedIdRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = new Person( 1, "Chris" ); - final Document document = new Document( 1, "DL" ); - final PersonDocument pd = new PersonDocument( person, document ); - entityManager.persist( person ); - entityManager.persist( document ); - entityManager.persist( pd ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = entityManager.find( Person.class, 1 ); - final Document document = new Document( 2, "Passport" ); - final PersonDocument pd = new PersonDocument( person, document ); - entityManager.persist( document ); - entityManager.persist( pd ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = entityManager.find( Person.class, 1 ); - final Document document = entityManager.find( Document.class, 1 ); - final PersonDocument pd = entityManager - .createQuery( "FROM PersonDocument WHERE id.person.id = :person AND id.document.id = :document", PersonDocument.class ) - .setParameter( "person", person.getId() ) - .setParameter( "document", document.getId() ) - .getSingleResult(); - - entityManager.remove( pd ); - entityManager.remove( document ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); - } - - @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 1 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getId().getDocument(); - assertEquals( "DL", document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 2 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getId().getDocument(); - assertEquals( "Passport", document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 3 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getId().getDocument(); - assertNull( document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "id.document" ).eq( 1 ) ) - .getResultList(); - assertEquals( 2, results.size() ); - for ( Object result : results ) { - Object[] row = (Object[]) result; - final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getId().getDocument(); - if ( RevisionType.ADD.equals( revisionType ) ) { - assertEquals( "DL", document.getName() ); - } - else if ( RevisionType.DEL.equals( revisionType ) ) { - assertNull( document.getName() ); - } - } - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "id.document" ).eq( 2 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - for ( Object result : results ) { - Object[] row = (Object[]) result; - final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getId().getDocument(); - assertEquals( RevisionType.ADD, revisionType ); - assertEquals( "Passport", document.getName() ); - } - } ); - } - - @Embeddable - public static class PersonDocumentId implements Serializable { - @ManyToOne(optional = false) - private Document document; - - @ManyToOne(optional = false) - private Person person; - - PersonDocumentId() { - - } - - PersonDocumentId(Person person, Document document) { - this.person = person; - this.document = document; - } - - public Document getDocument() { - return document; - } - - public void setDocument(Document document) { - this.document = document; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } - } - - @Audited - @Entity(name = "PersonDocument") - public static class PersonDocument implements Serializable { - @EmbeddedId - private PersonDocumentId id; - - PersonDocument() { - - } - - PersonDocument(Person person, Document document) { - this.id = new PersonDocumentId( person, document ); - } - - public PersonDocumentId getId() { - return id; - } - - public void setId(PersonDocumentId id) { - this.id = id; - } - } - - @Audited - @Entity(name = "Document") - public static class Document { - @Id - private Integer id; - private String name; - - Document() { - - } - - Document(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "Person") - @Audited - public static class Person { - @Id - private Integer id; - private String name; - - Person() { - - } - - Person(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/IdClassRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/IdClassRelatedIdQueryTest.java deleted file mode 100644 index b56f9a716b45..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/IdClassRelatedIdQueryTest.java +++ /dev/null @@ -1,269 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query.ids; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11748") -public class IdClassRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = new Person( 1, "Chris" ); - final Document document = new Document( 1, "DL" ); - final PersonDocument pd = new PersonDocument( person, document ); - entityManager.persist( person ); - entityManager.persist( document ); - entityManager.persist( pd ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = entityManager.find( Person.class, 1 ); - final Document document = new Document( 2, "Passport" ); - final PersonDocument pd = new PersonDocument( person, document ); - entityManager.persist( document ); - entityManager.persist( pd ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = entityManager.find( Person.class, 1 ); - final Document document = entityManager.find( Document.class, 1 ); - final PersonDocument pd = entityManager - .createQuery( "FROM PersonDocument WHERE person.id = :person AND document.id = :document", PersonDocument.class ) - .setParameter( "person", person.getId() ) - .setParameter( "document", document.getId() ) - .getSingleResult(); - - entityManager.remove( pd ); - entityManager.remove( document ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); - } - - @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 1 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getDocument(); - assertEquals( "DL", document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 2 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getDocument(); - assertEquals( "Passport", document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 3 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getDocument(); - assertNull( document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) - .getResultList(); - assertEquals( 2, results.size() ); - for ( Object result : results ) { - Object[] row = (Object[]) result; - final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getDocument(); - if ( RevisionType.ADD.equals( revisionType ) ) { - assertEquals( "DL", document.getName() ); - } - else if ( RevisionType.DEL.equals( revisionType ) ) { - assertNull( document.getName() ); - } - } - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - for ( Object result : results ) { - Object[] row = (Object[]) result; - final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getDocument(); - assertEquals( RevisionType.ADD, revisionType ); - assertEquals( "Passport", document.getName() ); - } - } ); - } - - public static class PersonDocumentId implements Serializable { - private Document document; - private Person person; - - public Document getDocument() { - return document; - } - - public void setDocument(Document document) { - this.document = document; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } - } - - @Audited - @Entity(name = "PersonDocument") - @IdClass( PersonDocumentId.class ) - public static class PersonDocument implements Serializable { - @Id - @ManyToOne(optional = false) - private Document document; - - @Id - @ManyToOne(optional = false) - private Person person; - - PersonDocument() { - - } - - PersonDocument(Person person, Document document) { - this.document = document; - this.person = person; - } - - public Document getDocument() { - return document; - } - - public void setDocument(Document document) { - this.document = document; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } - } - - @Audited - @Entity(name = "Document") - public static class Document { - @Id - private Integer id; - private String name; - - Document() { - - } - - Document(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "Person") - @Audited - public static class Person { - @Id - private Integer id; - private String name; - - Person() { - - } - - Person(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/MultipleIdRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/MultipleIdRelatedIdQueryTest.java deleted file mode 100644 index a3aedd4aaf26..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/MultipleIdRelatedIdQueryTest.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query.ids; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11748") -public class MultipleIdRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = new Person( 1, "Chris" ); - final Document document = new Document( 1, "DL" ); - final PersonDocument pd = new PersonDocument( person, document ); - entityManager.persist( person ); - entityManager.persist( document ); - entityManager.persist( pd ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = entityManager.find( Person.class, 1 ); - final Document document = new Document( 2, "Passport" ); - final PersonDocument pd = new PersonDocument( person, document ); - entityManager.persist( document ); - entityManager.persist( pd ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Person person = entityManager.find( Person.class, 1 ); - final Document document = entityManager.find( Document.class, 1 ); - final PersonDocument pd = entityManager - .createQuery( "FROM PersonDocument WHERE person.id = :person AND document.id = :document", PersonDocument.class ) - .setParameter( "person", person.getId() ) - .setParameter( "document", document.getId() ) - .getSingleResult(); - - entityManager.remove( pd ); - entityManager.remove( document ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); - } - - @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 1 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getDocument(); - assertEquals( "DL", document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 2 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getDocument(); - assertEquals( "Passport", document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) - .add( AuditEntity.revisionNumber().eq( 3 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getDocument(); - assertNull( document.getName() ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) - .getResultList(); - assertEquals( 2, results.size() ); - for ( Object result : results ) { - Object[] row = (Object[]) result; - final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getDocument(); - if ( RevisionType.ADD.equals( revisionType ) ) { - assertEquals( "DL", document.getName() ); - } - else if ( RevisionType.DEL.equals( revisionType ) ) { - assertNull( document.getName() ); - } - } - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) - .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) - .getResultList(); - assertEquals( 1, results.size() ); - for ( Object result : results ) { - Object[] row = (Object[]) result; - final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getDocument(); - assertEquals( RevisionType.ADD, revisionType ); - assertEquals( "Passport", document.getName() ); - } - } ); - } - - @Audited - @Entity(name = "PersonDocument") - public static class PersonDocument implements Serializable { - @Id - @ManyToOne(optional = false) - private Document document; - - @Id - @ManyToOne(optional = false) - private Person person; - - PersonDocument() { - - } - - PersonDocument(Person person, Document document) { - this.document = document; - this.person = person; - } - - public Document getDocument() { - return document; - } - - public void setDocument(Document document) { - this.document = document; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } - } - - @Audited - @Entity(name = "Document") - public static class Document { - @Id - private Integer id; - private String name; - - Document() { - - } - - Document(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "Person") - @Audited - public static class Person { - @Id - private Integer id; - private String name; - - Person() { - - } - - Person(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/ReadWriteExpressionChange.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/ReadWriteExpressionChange.java deleted file mode 100644 index 044d575654c2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/ReadWriteExpressionChange.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.readwriteexpression; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -public class ReadWriteExpressionChange extends BaseEnversJPAFunctionalTestCase { - - private static final Double HEIGHT_INCHES = 73.0d; - private static final Double HEIGHT_CENTIMETERS = HEIGHT_INCHES * 2.54d; - - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Staff.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - Staff staff = new Staff( HEIGHT_INCHES, 1 ); - em.persist( staff ); - em.getTransaction().commit(); - id = staff.getId(); - } - - @Test - public void shouldRespectWriteExpression() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - List resultList = em.createNativeQuery( "select size_in_cm from t_staff_AUD where id =" + id ).getResultList(); - Assert.assertEquals( 1, resultList.size() ); - Double sizeInCm = (Double) resultList.get( 0 ); - em.getTransaction().commit(); - Assert.assertEquals( HEIGHT_CENTIMETERS, sizeInCm.doubleValue(), 0.00000001 ); - } - - @Test - public void shouldRespectReadExpression() { - List revisions = getAuditReader().getRevisions( Staff.class, id ); - Assert.assertEquals( 1, revisions.size() ); - Number number = revisions.get( 0 ); - Staff staffRev = getAuditReader().find( Staff.class, id, number ); - Assert.assertEquals( HEIGHT_INCHES, staffRev.getSizeInInches(), 0.00000001 ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/Staff.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/Staff.java deleted file mode 100644 index 53e09a28d795..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/Staff.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.readwriteexpression; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.annotations.ColumnTransformer; -import org.hibernate.envers.Audited; - -@Entity -@Table(name = "t_staff") -public class Staff { - - public Staff() { - } - - public Staff(double sizeInInches, Integer id) { - this.sizeInInches = sizeInInches; - this.id = id; - } - - @Id - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - private Integer id; - - @Audited - @Column(name = "size_in_cm") - @ColumnTransformer( - forColumn = "size_in_cm", - read = "size_in_cm / 2.54E0", - write = "? * 2.54E0") - public double getSizeInInches() { - return sizeInInches; - } - - public void setSizeInInches(double sizeInInches) { - this.sizeInInches = sizeInInches; - } - - private double sizeInInches; - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/LongRevEntityInheritanceChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/LongRevEntityInheritanceChildAuditing.java deleted file mode 100644 index cbb03a87b24a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/LongRevEntityInheritanceChildAuditing.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.reventity; - -import java.util.List; - -import org.hibernate.mapping.Selectable; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ChildEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; -import org.hibernate.mapping.Column; -import org.hibernate.orm.test.envers.integration.reventity.LongRevNumberRevEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * A join-inheritance test using a custom revision entity where the revision number is a long, mapped in the database - * as an int. - * - * @author Adam Warski (adam at warski dot org) - */ -public class LongRevEntityInheritanceChildAuditing extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class, LongRevNumberRevEntity.class}; - } - - @Test - public void testChildRevColumnType() { - // Hibernate now sorts columns that are part of the key and therefore this test needs to test - // for the existence of the specific key column rather than the expectation that is exists at - // a specific order. - List childEntityKeyColumns = metadata() - .getEntityBinding( ChildEntity.class.getName() + "_AUD" ) - .getKey() - .getSelectables(); - - final String revisionColumnName = getConfiguration().getRevisionFieldName(); - Column column = getColumnFromIteratorByName( childEntityKeyColumns, revisionColumnName ); - assertNotNull( column ); - assertEquals( column.getSqlType(), "int" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionFactoryInterceptorTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionFactoryInterceptorTransactionTest.java deleted file mode 100644 index 5df6fd3b1ab8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionFactoryInterceptorTransactionTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.tm; - -import static org.junit.Assert.assertEquals; - -import java.util.Map; - -import jakarta.persistence.EntityManager; -import jakarta.transaction.TransactionManager; - -import org.hibernate.FlushMode; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.internal.SessionImpl; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -/** - * @author Chris Cranford - */ -public class SessionFactoryInterceptorTransactionTest extends BaseEnversJPAFunctionalTestCase { - - private TestInterceptor interceptor; - private TransactionManager tm; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - TestInterceptor.reset(); - - this.interceptor = new TestInterceptor(); - options.put( AvailableSettings.INTERCEPTOR, interceptor ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, true ); - - TestingJtaBootstrap.prepare( options ); - tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); - } - - @Test - @Priority(10) - public void initData() throws Exception { - // Revision 1 - EntityManager em = getEntityManager(); - // Explicitly use manual flush to trigger separate temporary session write via Envers - em.unwrap( SessionImpl.class ).setHibernateFlushMode( FlushMode.MANUAL ); - tm.begin(); - StrTestEntity entity = new StrTestEntity( "Test" ); - em.persist( entity ); - em.flush(); - tm.commit(); - } - - @Test - public void testInterceptorInvocations() throws Exception { - // Expect the interceptor to have been created once and invoked twice, once for the original session - // and follow-up for the Envers temporary session. - final Map invocationMap = TestInterceptor.getBeforeCompletionCallbacks(); - assertEquals( 1, invocationMap.size() ); - assertEquals( invocationMap.values().stream().filter( v -> v == 2 ).count(), 1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionInterceptorTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionInterceptorTransactionTest.java deleted file mode 100644 index c37a4a8bee74..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionInterceptorTransactionTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.tm; - -import static org.junit.Assert.assertEquals; - -import java.util.Map; - -import jakarta.persistence.EntityManager; -import jakarta.transaction.TransactionManager; - -import org.hibernate.FlushMode; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.internal.SessionImpl; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -/** - * @author Chris Cranford - */ -public class SessionInterceptorTransactionTest extends BaseEnversJPAFunctionalTestCase { - - private TransactionManager tm; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - TestInterceptor.reset(); - - options.put( AvailableSettings.SESSION_SCOPED_INTERCEPTOR, TestInterceptor.class.getName() ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - - TestingJtaBootstrap.prepare( options ); - tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); - } - - @Test - @Priority(10) - public void initData() throws Exception { - // Revision 1 - EntityManager em = getEntityManager(); - // Explicitly use manual flush to trigger separate temporary session write via Envers - em.unwrap( SessionImpl.class ).setHibernateFlushMode( FlushMode.MANUAL ); - tm.begin(); - StrTestEntity entity = new StrTestEntity( "Test" ); - em.persist( entity ); - em.flush(); - tm.commit(); - } - - @Test - public void testInterceptorInvocations() throws Exception { - // The interceptor should only be created once and should only be invoked once. - final Map invocationMap = TestInterceptor.getBeforeCompletionCallbacks(); - assertEquals( 1, invocationMap.size() ); - assertEquals( invocationMap.values().stream().filter( v -> v == 1 ).count(), 1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/TestInterceptor.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/TestInterceptor.java deleted file mode 100644 index d3db705a3110..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/TestInterceptor.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.tm; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.Interceptor; -import org.hibernate.Transaction; - -import org.jboss.logging.Logger; - -/** - * @author Chris Cranford - */ -public class TestInterceptor implements Interceptor { - - private static final Logger LOGGER = Logger.getLogger( TestInterceptor.class ); - private static Map interceptorInvocations = new HashMap<>(); - - public TestInterceptor() { - interceptorInvocations.put( this, 0 ); - } - - @Override - public void beforeTransactionCompletion(Transaction tx) { - interceptorInvocations.put( this, interceptorInvocations.get( this ) + 1 ); - LOGGER.info( "Interceptor beforeTransactionCompletion invoked" ); - } - - public static Map getBeforeCompletionCallbacks() { - return interceptorInvocations; - } - - public static void reset() { - interceptorInvocations.clear(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java deleted file mode 100644 index be698561ad4a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractEnversTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.List; - - -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Selectable; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -import org.jboss.logging.Logger; - -/** - * An abstract Envers test which runs the tests using two audit strategies. - * - * @author Adam Warski (adam at warski dot org) - */ -@RunWith(EnversRunner.class) -public abstract class AbstractEnversTest { - - protected final Logger log = Logger.getLogger( getClass() ); - - private String auditStrategy; - - @Parameterized.Parameters - public static List data() { - return Arrays.asList( - new Object[] {null}, - new Object[] {"org.hibernate.envers.strategy.ValidityAuditStrategy"} - ); - } - - public void setTestData(Object[] data) { - auditStrategy = (String) data[0]; - } - - public String getAuditStrategy() { - return auditStrategy; - } - - protected Column getColumnFromIteratorByName(List selectables, String columnName) { - for ( Selectable s : selectables ) { - Column column = (Column) s; - if ( column.getName().equals( columnName) ) { - return column; - } - } - return null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java deleted file mode 100644 index 1667ea12dfdf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/AbstractOneSessionTest.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.cfg.Configuration; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.service.ServiceRegistry; - -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.hibernate.testing.ServiceRegistryBuilder; -import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Before; - -/** - * Base class for testing envers with Session when the same session and - * auditReader must be used for the hole test. - * - * @author Hernán Chanfreau - */ -public abstract class AbstractOneSessionTest extends AbstractEnversTest { - protected Configuration config; - private ServiceRegistry serviceRegistry; - private SessionFactory sessionFactory; - private Session session; - private AuditReader auditReader; - - @BeforeClassOnce - public void init() throws URISyntaxException { - config = new Configuration(); - URL url = Thread.currentThread().getContextClassLoader().getResource( getHibernateConfigurationFileName() ); - config.configure( new File( url.toURI() ) ); - // Envers tests expect sequences to not skip values... - config.setProperty( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); - - String auditStrategy = getAuditStrategy(); - if ( auditStrategy != null && !"".equals( auditStrategy ) ) { - config.setProperty( EnversSettings.AUDIT_STRATEGY, auditStrategy ); - } - config.setProperty( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - // These tests always use H2, so we reset the init_sql config here - config.setProperty( "hibernate.connection.init_sql", "" ); - addProperties( config ); - - this.initMappings(); - - ServiceRegistryUtil.applySettings( config.getProperties() ); - - serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() ); - sessionFactory = config.buildSessionFactory( serviceRegistry ); - } - - protected abstract void initMappings() throws MappingException, URISyntaxException; - - protected void addProperties(Configuration configuration) { - } - - protected String getHibernateConfigurationFileName() { - return "hibernate.test.session-cfg.xml"; - } - - private SessionFactory getSessionFactory() { - return sessionFactory; - } - - @AfterClassOnce - public void closeSessionFactory() { - try { - sessionFactory.close(); - } - finally { - if ( serviceRegistry != null ) { - ServiceRegistryBuilder.destroy( serviceRegistry ); - serviceRegistry = null; - } - } - } - - /** - * Creates a new session and auditReader only if there is nothing created - * before - */ - @Before - public void initializeSession() { - if ( getSession() == null ) { - session = getSessionFactory().openSession(); - auditReader = AuditReaderFactory.get( session ); - } - } - - /** - * Creates a new session and auditReader. - */ - public void forceNewSession() { - session = getSessionFactory().openSession(); - auditReader = AuditReaderFactory.get( session ); - } - - protected Session getSession() { - return session; - } - - - protected AuditReader getAuditReader() { - return auditReader; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java deleted file mode 100644 index 2c16342e9aaa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversFunctionalTestCase.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.internal.SessionImpl; -import org.hibernate.resource.transaction.spi.TransactionStatus; - -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; - -import org.hibernate.service.ServiceRegistry; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; - -/** - * @author Strong Liu (stliu@hibernate.org) - */ -@RunWith(EnversRunner.class) -public abstract class BaseEnversFunctionalTestCase extends BaseNonConfigCoreFunctionalTestCase { - private String auditStrategy; - - @Parameterized.Parameters - public static List data() { - return Arrays.asList( - new Object[]{ null }, - new Object[]{ "org.hibernate.envers.strategy.ValidityAuditStrategy" } - ); - } - - public void setTestData(Object[] data) { - auditStrategy = (String) data[0]; - } - - public String getAuditStrategy() { - return auditStrategy; - } - - @Override - protected Session getSession() { - Session session = super.getSession(); - if ( session == null || !session.isOpen() ) { - return openSession(); - } - return session; - } - - protected AuditReader getAuditReader() { - Session session = getSession(); - if(session.getTransaction().getStatus() != TransactionStatus.ACTIVE ){ - session.getTransaction().begin(); - } - - return AuditReaderFactory.get( getSession() ); - } - - protected Configuration getConfiguration() { - ServiceRegistry registry = getSession().unwrap(SessionImpl.class ).getSessionFactory().getServiceRegistry(); - return registry.getService( EnversService.class ).getConfig(); - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - // Envers tests expect sequences to not skip values... - settings.put( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); - - if ( getAuditStrategy() != null ) { - settings.put( EnversSettings.AUDIT_STRATEGY, getAuditStrategy() ); - } - } - - @Override - protected String getBaseForMappings() { - return ""; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java deleted file mode 100644 index 6bf99c1d4755..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/BaseEnversJPAFunctionalTestCase.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.H2Dialect; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.boot.internal.EnversIntegrator; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.internal.util.StringHelper; -import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; -import org.hibernate.jpa.boot.spi.Bootstrap; -import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor; -import org.hibernate.query.sqm.mutation.internal.temptable.GlobalTemporaryTableMutationStrategy; -import org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableMutationStrategy; - -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.hibernate.testing.junit4.Helper; -import org.hibernate.testing.orm.jpa.PersistenceUnitDescriptorAdapter; -import org.hibernate.testing.orm.junit.DialectContext; -import org.hibernate.testing.util.ServiceRegistryUtil; - -import org.hibernate.query.sqm.mutation.internal.temptable.PersistentTableStrategy; -import org.hibernate.service.ServiceRegistry; -import org.junit.After; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.transaction.SystemException; - -/** - * @author Strong Liu (stliu@hibernate.org) - */ -public abstract class BaseEnversJPAFunctionalTestCase extends AbstractEnversTest { - - private static final Dialect dialect = DialectContext.getDialect(); - - private EntityManagerFactoryBuilderImpl entityManagerFactoryBuilder; - private StandardServiceRegistryImpl serviceRegistry; - private SessionFactoryImplementor entityManagerFactory; - - private EntityManager em; - private AuditReader auditReader; - private ArrayList isolatedEms = new ArrayList(); - - protected Dialect getDialect() { - return dialect; - } - - protected EntityManagerFactory entityManagerFactory() { - return entityManagerFactory; - } - - protected StandardServiceRegistryImpl serviceRegistry() { - return serviceRegistry; - } - - protected MetadataImplementor metadata() { - return entityManagerFactoryBuilder.getMetadata(); - } - - @BeforeClassOnce - @SuppressWarnings("unused") - public void buildEntityManagerFactory() throws Exception { - log.trace( "Building EntityManagerFactory" ); - - entityManagerFactoryBuilder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( - buildPersistenceUnitDescriptor(), - buildSettings() - ); - entityManagerFactory = entityManagerFactoryBuilder.build().unwrap( SessionFactoryImplementor.class ); - - serviceRegistry = (StandardServiceRegistryImpl) entityManagerFactory.getServiceRegistry() - .getParentServiceRegistry(); - - afterEntityManagerFactoryBuilt(); - } - - private PersistenceUnitDescriptor buildPersistenceUnitDescriptor() { - return new PersistenceUnitDescriptorAdapter(); - } - - private Map buildSettings() { - Map settings = getConfig(); - addMappings( settings ); - - if ( createSchema() ) { - settings.put( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); - final String secondSchemaName = createSecondSchema(); - if ( StringHelper.isNotEmpty( secondSchemaName ) ) { - if ( !(getDialect() instanceof H2Dialect) ) { - throw new UnsupportedOperationException( "Only H2 dialect supports creation of second schema." ); - } - Helper.createH2Schema( secondSchemaName, settings ); - } - } - - if ( StringHelper.isNotEmpty( getAuditStrategy() ) ) { - settings.put( EnversSettings.AUDIT_STRATEGY, getAuditStrategy() ); - } - - if ( !autoRegisterListeners() ) { - settings.put( EnversIntegrator.AUTO_REGISTER, "false" ); - } - - settings.put( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - - settings.put( AvailableSettings.DIALECT, getDialect().getClass().getName() ); - return settings; - } - - protected Map getConfig() { - Map config = new HashMap(); - - config.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( getAnnotatedClasses() ) ); - - for ( Map.Entry entry : getCachedClasses().entrySet() ) { - config.put( AvailableSettings.CLASS_CACHE_PREFIX + "." + entry.getKey().getName(), entry.getValue() ); - } - - for ( Map.Entry entry : getCachedCollections().entrySet() ) { - config.put( AvailableSettings.COLLECTION_CACHE_PREFIX + "." + entry.getKey(), entry.getValue() ); - } - - if ( getEjb3DD().length > 0 ) { - ArrayList dds = new ArrayList<>(); - dds.addAll( Arrays.asList( getEjb3DD() ) ); - config.put( AvailableSettings.ORM_XML_FILES, dds ); - } - - config.put( PersistentTableStrategy.DROP_ID_TABLES, "true" ); - config.put( GlobalTemporaryTableMutationStrategy.DROP_ID_TABLES, "true" ); - config.put( LocalTemporaryTableMutationStrategy.DROP_ID_TABLES, "true" ); - ServiceRegistryUtil.applySettings( config ); - // Envers tests expect sequences to not skip values... - config.put( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); - addConfigOptions( config ); - - return config; - } - - @SuppressWarnings("unchecked") - protected void addMappings(Map settings) { - String[] mappings = getMappings(); - if ( mappings != null ) { - settings.put( AvailableSettings.HBM_XML_FILES, String.join( ",", mappings ) ); - } - } - - protected static final String[] NO_MAPPINGS = new String[0]; - - protected String[] getMappings() { - return NO_MAPPINGS; - } - - protected void addConfigOptions(Map options) { - } - - protected static final Class[] NO_CLASSES = new Class[0]; - - protected Class[] getAnnotatedClasses() { - return NO_CLASSES; - } - - public Map getCachedClasses() { - return new HashMap(); - } - - public Map getCachedCollections() { - return new HashMap(); - } - - public String[] getEjb3DD() { - return new String[] {}; - } - - protected void afterEntityManagerFactoryBuilt() { - } - - protected boolean createSchema() { - return true; - } - - /** - * Feature supported only by H2 dialect. - * - * @return Provide not empty name to create second schema. - */ - protected String createSecondSchema() { - return null; - } - - protected boolean autoRegisterListeners() { - return true; - } - - @AfterClassOnce - public void releaseEntityManagerFactory() { - if ( entityManagerFactory != null && entityManagerFactory.isOpen() ) { - entityManagerFactory.close(); - } - } - - @After - @SuppressWarnings("unused") - public void releaseUnclosedEntityManagers() { - releaseUnclosedEntityManager( this.em ); - auditReader = null; - for ( EntityManager isolatedEm : isolatedEms ) { - releaseUnclosedEntityManager( isolatedEm ); - } - } - - private void releaseUnclosedEntityManager(EntityManager em) { - if ( em == null ) { - return; - } - if ( !em.isOpen() ) { - em = null; - return; - } - if ( JtaStatusHelper.isActive( TestingJtaPlatformImpl.INSTANCE.getTransactionManager() ) ) { - log.warn( "Cleaning up unfinished transaction" ); - try { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().rollback(); - } - catch (SystemException ignored) { - } - } - try { - if ( em.getTransaction().isActive() ) { - em.getTransaction().rollback(); - log.warn( "You left an open transaction! Fix your test case. For now, we are closing it for you." ); - } - } - catch (IllegalStateException e) { - } - if ( em.isOpen() ) { - // as we open an EM before the test runs, it will still be open if the test uses a custom EM. - // or, the person may have forgotten to close. So, do not raise a "fail", but log the fact. - em.close(); - log.warn( "The EntityManager is not closed. Closing it." ); - } - } - - protected EntityManager getEntityManager() { - return getOrCreateEntityManager(); - } - - protected EntityManager getOrCreateEntityManager() { - if ( em == null || !em.isOpen() ) { - em = entityManagerFactory.createEntityManager(); - } - return em; - } - - protected AuditReader getAuditReader() { - if ( auditReader != null ) { - return auditReader; - } - return auditReader = AuditReaderFactory.get( getOrCreateEntityManager() ); - } - - protected EntityManager createIsolatedEntityManager() { - EntityManager isolatedEm = entityManagerFactory.createEntityManager(); - isolatedEms.add( isolatedEm ); - return isolatedEm; - } - - protected EntityManager createIsolatedEntityManager(Map props) { - EntityManager isolatedEm = entityManagerFactory.createEntityManager( props ); - isolatedEms.add( isolatedEm ); - return isolatedEm; - } - - protected EntityManager createEntityManager(Map properties) { - // always reopen a new EM and close the existing one - if ( em != null && em.isOpen() ) { - em.close(); - } - em = entityManagerFactory.createEntityManager( properties ); - return em; - } - - public Configuration getConfiguration() { - final ServiceRegistry serviceRegistry = metadata().getMetadataBuildingOptions().getServiceRegistry(); - return serviceRegistry.getService( EnversService.class ).getConfig(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/CustomRevisionEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/CustomRevisionEntityTest.java deleted file mode 100644 index 561a551a7c8f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/CustomRevisionEntityTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Date; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionMapping; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionListener; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; - -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -/** - * @author Vlad Mihalcea - */ -@Jpa(annotatedClasses = { - CustomRevisionEntityTest.Customer.class, - CustomRevisionEntityTest.CustomRevisionEntity.class -}) -public class CustomRevisionEntityTest { - @Test - public void test(EntityManagerFactoryScope scope) { - //tag::envers-revisionlog-RevisionEntity-persist-example[] - CurrentUser.INSTANCE.logIn("Vlad Mihalcea"); - - scope.inTransaction( entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - CurrentUser.INSTANCE.logOut(); - //end::envers-revisionlog-RevisionEntity-persist-example[] - } - - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - } - - //tag::envers-revisionlog-CurrentUser-example[] - public static class CurrentUser { - - public static final CurrentUser INSTANCE = new CurrentUser(); - - private static final ThreadLocal storage = new ThreadLocal<>(); - - public void logIn(String user) { - storage.set(user); - } - - public void logOut() { - storage.remove(); - } - - public String get() { - return storage.get(); - } - } - //end::envers-revisionlog-CurrentUser-example[] - - //tag::envers-revisionlog-RevisionEntity-example[] - @Entity(name = "CustomRevisionEntity") - @Table(name = "CUSTOM_REV_INFO") - @RevisionEntity(CustomRevisionEntityListener.class) - public static class CustomRevisionEntity extends RevisionMapping { - - private String username; - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - } - //end::envers-revisionlog-RevisionEntity-example[] - - //tag::envers-revisionlog-RevisionListener-example[] - public static class CustomRevisionEntityListener implements RevisionListener { - - public void newRevision(Object revisionEntity) { - CustomRevisionEntity customRevisionEntity = - (CustomRevisionEntity) revisionEntity; - - customRevisionEntity.setUsername( - CurrentUser.INSTANCE.get() - ); - } - } - //end::envers-revisionlog-RevisionListener-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/DefaultAuditTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/DefaultAuditTest.java deleted file mode 100644 index e52415d4f649..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/DefaultAuditTest.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Date; -import java.util.List; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; - -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.NoResultException; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; - -/** - * @author Vlad Mihalcea - */ -@Jpa(annotatedClasses = DefaultAuditTest.Customer.class) -public class DefaultAuditTest { - @Test - public void test(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { - //tag::envers-audited-insert-example[] - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - //end::envers-audited-insert-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::envers-audited-update-example[] - Customer customer = entityManager.find(Customer.class, 1L); - customer.setLastName("Doe Jr."); - //end::envers-audited-update-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::envers-audited-delete-example[] - Customer customer = entityManager.getReference(Customer.class, 1L); - entityManager.remove(customer); - //end::envers-audited-delete-example[] - }); - - //tag::envers-audited-revisions-example[] - List revisions = scope.fromTransaction( entityManager -> { - return AuditReaderFactory.get(entityManager).getRevisions( - Customer.class, - 1L - ); - }); - //end::envers-audited-revisions-example[] - - scope.inTransaction( entityManager -> { - //tag::envers-audited-rev1-example[] - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(0)) - .getSingleResult(); - - assertEquals("Doe", customer.getLastName()); - //end::envers-audited-rev1-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::envers-audited-rev2-example[] - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(1)) - .getSingleResult(); - - assertEquals("Doe Jr.", customer.getLastName()); - //end::envers-audited-rev2-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::envers-audited-rev3-example[] - try { - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(2)) - .getSingleResult(); - - fail("The Customer was deleted at this revision: " + revisions.get(2)); - } - catch (NoResultException expected) { - } - //end::envers-audited-rev3-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::envers-audited-rev4-example[] - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision( - Customer.class, - Customer.class.getName(), - revisions.get(2), - true) - .getSingleResult(); - - assertEquals(Long.valueOf(1L), customer.getId()); - assertNull(customer.getFirstName()); - assertNull(customer.getLastName()); - assertNull(customer.getCreatedOn()); - //end::envers-audited-rev4-example[] - }); - } - - //tag::envers-audited-mapping-example[] - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - //Getters and setters are omitted for brevity - - //end::envers-audited-mapping-example[] - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - //tag::envers-audited-mapping-example[] - } - //end::envers-audited-mapping-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java deleted file mode 100644 index 1f856e7d1f5c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditDefaultTrackingTest.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.Date; -import java.util.Map; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.Audited; -import org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.jpa.boot.spi.Bootstrap; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; - -/** - * @author Vlad Mihalcea - */ -public class EntityTypeChangeAuditDefaultTrackingTest extends EntityManagerFactoryBasedFunctionalTest { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Customer.class, - CustomTrackingRevisionEntity.class - }; - } - - @Test - public void testLifecycle() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - - TransactionUtil.doInJPA( () -> testEmf, entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - EntityManagerFactory entityManagerFactory = null; - try { - Map settings = buildSettings(); - settings.put( - AvailableSettings.LOADED_CLASSES, - Arrays.asList( - ApplicationCustomer.class, - CustomTrackingRevisionEntity.class - ) - ); - settings.put( - AvailableSettings.HBM2DDL_AUTO, - "update" - ); - entityManagerFactory = Bootstrap - .getEntityManagerFactoryBuilder( - new TestingPersistenceUnitDescriptorImpl(getClass().getSimpleName()), - settings) - .build() - .unwrap(SessionFactoryImplementor.class); - - final EntityManagerFactory emf = entityManagerFactory; - - doInJPA(() -> emf, entityManager -> { - ApplicationCustomer customer = new ApplicationCustomer(); - customer.setId(2L); - customer.setFirstName("John"); - customer.setLastName("Doe Jr."); - - entityManager.persist(customer); - }); - } - finally { - if ( entityManagerFactory != null ) { - entityManagerFactory.close(); - } - testEmf.close(); - } - } - - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - } - - @Audited - @Entity(name = "Customer") - public static class ApplicationCustomer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - } - - //tag::envers-tracking-modified-entities-revchanges-example[] - @Entity(name = "CustomTrackingRevisionEntity") - @Table(name = "TRACKING_REV_INFO") - @RevisionEntity - public static class CustomTrackingRevisionEntity - extends TrackingModifiedEntitiesRevisionMapping { - - } - //end::envers-tracking-modified-entities-revchanges-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java deleted file mode 100644 index b43288e739e3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTest.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionMapping; -import org.hibernate.envers.ModifiedEntityNames; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.jpa.boot.spi.Bootstrap; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; -import org.junit.Test; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Vlad Mihalcea - */ -public class EntityTypeChangeAuditTest extends EntityManagerFactoryBasedFunctionalTest { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Customer.class, - CustomTrackingRevisionEntity.class - }; - } - - @Test - public void test() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - - doInJPA( () -> testEmf, entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - doInJPA( () -> testEmf, entityManager -> { - //tag::envers-tracking-modified-entities-queries-example1[] - assertEquals( - "org.hibernate.orm.test.envers.EntityTypeChangeAuditTest$Customer", - AuditReaderFactory - .get(entityManager) - .getCrossTypeRevisionChangesReader() - .findEntityTypes(1) - .iterator().next() - .getFirst() - ); - //end::envers-tracking-modified-entities-queries-example1[] - }); - - EntityManagerFactory entityManagerFactory = null; - try { - Map settings = buildSettings(); - settings.put( - AvailableSettings.LOADED_CLASSES, - Arrays.asList( - ApplicationCustomer.class, - CustomTrackingRevisionEntity.class - ) - ); - settings.put( - AvailableSettings.HBM2DDL_AUTO, - "update" - ); - entityManagerFactory = Bootstrap.getEntityManagerFactoryBuilder( - new TestingPersistenceUnitDescriptorImpl(getClass().getSimpleName()), - settings - ).build().unwrap(SessionFactoryImplementor.class); - - final EntityManagerFactory emf = entityManagerFactory; - - doInJPA(() -> emf, entityManager -> { - ApplicationCustomer customer = entityManager.find(ApplicationCustomer.class, 1L); - customer.setLastName("Doe Jr."); - }); - - doInJPA(() -> emf, entityManager -> { - //tag::envers-tracking-modified-entities-queries-example2[] - assertEquals( - "org.hibernate.orm.test.envers.EntityTypeChangeAuditTest$ApplicationCustomer", - AuditReaderFactory - .get(entityManager) - .getCrossTypeRevisionChangesReader() - .findEntityTypes(2) - .iterator().next() - .getFirst() - ); - //end::envers-tracking-modified-entities-queries-example2[] - }); - } - finally { - if (entityManagerFactory != null) { - entityManagerFactory.close(); - } - testEmf.close(); - } - } - - //tag::envers-tracking-modified-entities-revchanges-before-rename-example[] - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - //Getters and setters are omitted for brevity - //end::envers-tracking-modified-entities-revchanges-before-rename-example[] - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - //tag::envers-tracking-modified-entities-revchanges-before-rename-example[] - } - //end::envers-tracking-modified-entities-revchanges-before-rename-example[] - - //tag::envers-tracking-modified-entities-revchanges-after-rename-example[] - @Audited - @Entity(name = "Customer") - public static class ApplicationCustomer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - //Getters and setters are omitted for brevity - //end::envers-tracking-modified-entities-revchanges-after-rename-example[] - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - //tag::envers-tracking-modified-entities-revchanges-after-rename-example[] - } - //end::envers-tracking-modified-entities-revchanges-after-rename-example[] - - //tag::envers-tracking-modified-entities-revchanges-example[] - @Entity(name = "CustomTrackingRevisionEntity") - @Table(name = "TRACKING_REV_INFO") - @RevisionEntity - public static class CustomTrackingRevisionEntity extends RevisionMapping { - - @ElementCollection - @JoinTable( - name = "REVCHANGES", - joinColumns = @JoinColumn(name = "REV") - ) - @Column(name = "ENTITYNAME") - @ModifiedEntityNames - private Set modifiedEntityNames = new HashSet<>(); - - public Set getModifiedEntityNames() { - return modifiedEntityNames; - } - } - //end::envers-tracking-modified-entities-revchanges-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java deleted file mode 100644 index a54cff70a4ec..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EntityTypeChangeAuditTrackingRevisionListenerTest.java +++ /dev/null @@ -1,336 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.EntityTrackingRevisionListener; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; -import org.hibernate.envers.RevisionType; -import org.hibernate.jpa.boot.spi.Bootstrap; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; -import org.junit.Test; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Vlad Mihalcea - */ -public class EntityTypeChangeAuditTrackingRevisionListenerTest extends EntityManagerFactoryBasedFunctionalTest { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Customer.class, - CustomTrackingRevisionEntity.class, - EntityType.class - }; - } - - @Test - public void testLifecycle() { - final EntityManagerFactory testEmf = produceEntityManagerFactory(); - - doInJPA( () -> testEmf, entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - EntityManagerFactory entityManagerFactory = null; - try { - Map settings = buildSettings(); - settings.put( - AvailableSettings.LOADED_CLASSES, - Arrays.asList( - ApplicationCustomer.class, - CustomTrackingRevisionEntity.class, - EntityType.class - ) - ); - settings.put( - AvailableSettings.HBM2DDL_AUTO, - "update" - ); - entityManagerFactory = Bootstrap.getEntityManagerFactoryBuilder( - new TestingPersistenceUnitDescriptorImpl(getClass().getSimpleName()), - settings - ).build().unwrap(SessionFactoryImplementor.class); - - final EntityManagerFactory emf = entityManagerFactory; - - doInJPA(() -> emf, entityManager -> { - ApplicationCustomer customer = new ApplicationCustomer(); - customer.setId(2L); - customer.setFirstName("John"); - customer.setLastName("Doe Jr."); - - entityManager.persist(customer); - }); - - doInJPA(() -> emf, entityManager -> { - //tag::envers-tracking-modified-entities-revchanges-query-example[] - AuditReader auditReader = AuditReaderFactory.get(entityManager); - - List revisions = auditReader.getRevisions( - ApplicationCustomer.class, - 1L - ); - - CustomTrackingRevisionEntity revEntity = auditReader.findRevision( - CustomTrackingRevisionEntity.class, - revisions.get(0) - ); - - Set modifiedEntityTypes = revEntity.getModifiedEntityTypes(); - assertEquals(1, modifiedEntityTypes.size()); - - EntityType entityType = modifiedEntityTypes.iterator().next(); - assertEquals( - Customer.class.getName(), - entityType.getEntityClassName() - ); - //end::envers-tracking-modified-entities-revchanges-query-example[] - }); - } - finally { - if (entityManagerFactory != null) { - entityManagerFactory.close(); - } - testEmf.close(); - } - } - - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - } - - @Audited - @Entity(name = "Customer") - public static class ApplicationCustomer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - } - - //tag::envers-tracking-modified-entities-revchanges-EntityTrackingRevisionListener-example[] - public static class CustomTrackingRevisionListener implements EntityTrackingRevisionListener { - - @Override - public void entityChanged(Class entityClass, - String entityName, - Object entityId, - RevisionType revisionType, - Object revisionEntity) { - String type = entityClass.getName(); - ((CustomTrackingRevisionEntity) revisionEntity).addModifiedEntityType(type); - } - - @Override - public void newRevision(Object revisionEntity) { - } - } - //end::envers-tracking-modified-entities-revchanges-EntityTrackingRevisionListener-example[] - - //tag::envers-tracking-modified-entities-revchanges-RevisionEntity-example[] - @Entity(name = "CustomTrackingRevisionEntity") - @Table(name = "TRACKING_REV_INFO") - @RevisionEntity(CustomTrackingRevisionListener.class) - public static class CustomTrackingRevisionEntity { - - @Id - @GeneratedValue - @RevisionNumber - private int customId; - - @RevisionTimestamp - private long customTimestamp; - - @OneToMany( - mappedBy="revision", - cascade={ - CascadeType.PERSIST, - CascadeType.REMOVE - } - ) - private Set modifiedEntityTypes = new HashSet<>(); - - public Set getModifiedEntityTypes() { - return modifiedEntityTypes; - } - - public void addModifiedEntityType(String entityClassName) { - modifiedEntityTypes.add(new EntityType(this, entityClassName)); - } - } - //end::envers-tracking-modified-entities-revchanges-RevisionEntity-example[] - - //tag::envers-tracking-modified-entities-revchanges-EntityType-example[] - @Entity(name = "EntityType") - public static class EntityType { - - @Id - @GeneratedValue - private Integer id; - - @ManyToOne - private CustomTrackingRevisionEntity revision; - - private String entityClassName; - - private EntityType() { - } - - public EntityType(CustomTrackingRevisionEntity revision, String entityClassName) { - this.revision = revision; - this.entityClassName = entityClassName; - } - - //Getters and setters are omitted for brevity - //end::envers-tracking-modified-entities-revchanges-EntityType-example[] - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public CustomTrackingRevisionEntity getRevision() { - return revision; - } - - public void setRevision(CustomTrackingRevisionEntity revision) { - this.revision = revision; - } - - public String getEntityClassName() { - return entityClassName; - } - - public void setEntityClassName(String entityClassName) { - this.entityClassName = entityClassName; - } - //tag::envers-tracking-modified-entities-revchanges-EntityType-example[] - } - //end::envers-tracking-modified-entities-revchanges-EntityType-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java deleted file mode 100644 index 933e3bfd606b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/EnversRunner.java +++ /dev/null @@ -1,221 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.hibernate.testing.envers.RequiresAuditStrategy; -import org.hibernate.testing.junit4.CustomRunner; -import org.hibernate.testing.junit4.Helper; - -import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; -import org.hibernate.envers.strategy.spi.AuditStrategy; -import org.junit.runner.Runner; -import org.junit.runner.manipulation.NoTestsRemainException; -import org.junit.runner.notification.RunNotifier; -import org.junit.runners.Parameterized; -import org.junit.runners.Suite; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.InitializationError; -import org.junit.runners.model.Statement; -import org.junit.runners.model.TestClass; - -import org.jboss.logging.Logger; - -/** - * Copied & modified from {@link Parameterized}. - *

- * The modification is that the generated runners extend {@link CustomRunner} instead of the default - * {@code TestClassRunnerForParameters}. - *

- * The runner itself sets the data using a setter instead of a constructor, and creates only one test instance. Moreover - * it doesn't override {@code classBlock} which causes the custom {@code @BeforeClassOnce} and {@code @AfterClassOnce} - * annotations to work. - * - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -public class EnversRunner extends Suite { - - private static final Logger LOG = Logger.getLogger( EnversRunner.class ); - - private class TestClassCustomRunnerForParameters extends CustomRunner { - private final int fParameterSetNumber; - - private final List fParameterList; - - private boolean ignoreAllTests; - - TestClassCustomRunnerForParameters(Class type, List parameterList, int i) - throws InitializationError, NoTestsRemainException { - super( type ); - fParameterList = parameterList; - fParameterSetNumber = i; - } - - @Override - protected Object getTestInstance() throws Exception { - Object testInstance = super.getTestInstance(); - if ( AbstractEnversTest.class.isInstance( testInstance ) ) { - ((AbstractEnversTest) testInstance).setTestData( computeParams() ); - } - else if ( BaseEnversFunctionalTestCase.class.isInstance( testInstance ) ) { - ((BaseEnversFunctionalTestCase) testInstance).setTestData( computeParams() ); - } - return testInstance; - } - - @Override - protected Statement withBeforeClasses(Statement statement) { - if ( !isAuditStrategyAllowed( getTestClass().getAnnotation( RequiresAuditStrategy.class ) ) ) { - LOG.infof( "Required audit strategy not available, test class '%s' skipped.", getTestClass().getName() ); - ignoreAllTests = true; - return statement; - } - return super.withBeforeClasses( statement ); - } - - @Override - protected void runChild(FrameworkMethod method, RunNotifier notifier) { - if ( !isAuditStrategyAllowed( method ) ) { - if ( !ignoreAllTests ) { - LOG.infof( "Required audit strategy not available, test '%s' skipped.", method.getName() ); - } - notifier.fireTestIgnored( describeChild( method ) ); - return; - } - super.runChild( method, notifier ); - } - - private boolean isAuditStrategyAllowed(FrameworkMethod method) { - return isAuditStrategyAllowed( Helper.locateAnnotation( RequiresAuditStrategy.class, method, getTestClass() ) ); - } - - private boolean isAuditStrategyAllowed(RequiresAuditStrategy auditStrategyAnn) { - if ( auditStrategyAnn == null ) { - // if there is no annotation, then execution is permissible - return true; - } - - // if an annotation exists, verify its allowed - final String strategyNameInUse = getStrategyClassSimpleName(); - for ( Class strategy : auditStrategyAnn.value() ) { - if ( strategy.getSimpleName().equals( strategyNameInUse ) ) { - return true; - } - } - return false; - } - - private Object[] computeParams() throws Exception { - try { - return fParameterList.get( fParameterSetNumber ); - } - catch (ClassCastException e) { - throw new Exception( - String.format( - "%s.%s() must return a Collection of arrays.", - getTestClass().getName(), getParametersMethod( - getTestClass() - ).getName() - ) - ); - } - } - - @Override - protected String getName() { - return String.format( "[%s]", fParameterSetNumber ); - } - - @Override - protected String testName(final FrameworkMethod method) { - return String.format( - "%s[%s]", method.getName(), - fParameterSetNumber - ); - } - - private String getStrategyClassSimpleName() { - Object name = fParameterList.get( fParameterSetNumber )[ 0 ]; - if ( name != null ) { - String strategyName = (String) name; - name = strategyName.substring( strategyName.lastIndexOf( "." ) + 1 ); - } - return ( name != null ? name.toString() : DefaultAuditStrategy.class.getSimpleName() ); - } - - @Override - protected void sortMethods(List computedTestMethods) { - super.sortMethods( computedTestMethods ); - Collections.sort( - computedTestMethods, new Comparator() { - private int getPriority(FrameworkMethod fm) { - Priority p = fm.getAnnotation( Priority.class ); - return p == null ? 0 : p.value(); - } - - @Override - public int compare(FrameworkMethod fm1, FrameworkMethod fm2) { - return getPriority( fm2 ) - getPriority( fm1 ); - } - } - ); - } - } - - private final ArrayList runners = new ArrayList(); - - /** - * Only called reflectively. Do not use programmatically. - */ - public EnversRunner(Class klass) throws Throwable { - super( klass, Collections.emptyList() ); - List parametersList = getParametersList( getTestClass() ); - for ( int i = 0; i < parametersList.size(); i++ ) { - runners.add( - new TestClassCustomRunnerForParameters( - getTestClass().getJavaClass(), - parametersList, i - ) - ); - } - } - - @Override - protected List getChildren() { - return runners; - } - - @SuppressWarnings("unchecked") - private List getParametersList(TestClass klass) - throws Throwable { - return (List) getParametersMethod( klass ).invokeExplosively( - null - ); - } - - private FrameworkMethod getParametersMethod(TestClass testClass) - throws Exception { - List methods = testClass.getAnnotatedMethods( Parameterized.Parameters.class ); - - for ( FrameworkMethod each : methods ) { - int modifiers = each.getMethod().getModifiers(); - if ( Modifier.isStatic( modifiers ) && Modifier.isPublic( modifiers ) ) { - return each; - } - } - - throw new Exception( - "No public static parameters method on class " - + testClass.getName() - ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/JpaStaticMetamodelTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/JpaStaticMetamodelTest.java deleted file mode 100644 index 4c65f0ea4b37..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/JpaStaticMetamodelTest.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import org.hibernate.envers.DefaultRevisionEntity_; -import org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity_; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity_; -import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionEntity_; - -import org.hibernate.testing.junit4.BaseUnitTestCase; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -/** - * Just a test to make sure that the generated "JPA static metamodel" classes continue to be generated. - * - * @author Steve Ebersole - */ -public class JpaStaticMetamodelTest extends BaseUnitTestCase { - @Test - public void testStaticMetamodelGenerationHappened() { - // Really in a regression scenario, this class wont even compile... - assertNotNull( DefaultRevisionEntity_.class ); - assertNotNull( DefaultTrackingModifiedEntitiesRevisionEntity_.class ); - assertNotNull( SequenceIdRevisionEntity_.class ); - assertNotNull( SequenceIdTrackingModifiedEntitiesRevisionEntity_.class ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ModelContributorSmokeTests.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ModelContributorSmokeTests.java deleted file mode 100644 index 04a9e3bf4aca..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ModelContributorSmokeTests.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.envers.Audited; -import org.hibernate.envers.DefaultRevisionEntity; -import org.hibernate.mapping.PersistentClass; - -import org.hibernate.testing.orm.junit.DomainModel; -import org.hibernate.testing.orm.junit.DomainModelScope; - -import org.junit.jupiter.api.Test; - - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; - -/** - * @author Steve Ebersole - */ -@DomainModel( - annotatedClasses = ModelContributorSmokeTests.SimpleEntity.class -) -public class ModelContributorSmokeTests { - @Test - public void simpleModelContributorTest(DomainModelScope scope) { - final MetadataImplementor domainModel = scope.getDomainModel(); - // Should be 3 - // 1) SimpleEntity - // 2) Enver's DefaultRevisionEntity - // 3) Enver's "shadow" of the domain entity (SimpleEntity_AUD) - assertThat( domainModel.getEntityBindings().size(), is( 3 ) ); - - checkModel( - domainModel.getEntityBinding( SimpleEntity.class.getName() ), - "orm" - ); - - checkModel( - domainModel.getEntityBinding( DefaultRevisionEntity.class.getName() ), - "envers" - ); - - checkModel( - domainModel.getEntityBinding( SimpleEntity.class.getName() + "_AUD" ), - "envers" - ); - } - - private void checkModel(PersistentClass entityBinding, String expectedContributor) { - assertThat( entityBinding.getContributor(), is( expectedContributor ) ); - assertThat( entityBinding.getRootTable().getContributor(), is( expectedContributor ) ); - } - - @Entity( name = "SimpleEntity" ) - @Table( name = "simple" ) - @Audited - public static class SimpleEntity { - @Id - private Integer id; - String name; - - public SimpleEntity() { - } - - public SimpleEntity(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - private void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ModifiedFlagsAuditTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ModifiedFlagsAuditTest.java deleted file mode 100644 index 34adb2848a91..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ModifiedFlagsAuditTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Date; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.envers.Audited; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -/** - * @author Vlad Mihalcea - */ -@Jpa(annotatedClasses = ModifiedFlagsAuditTest.Customer.class) -public class ModifiedFlagsAuditTest { - @Test - public void test(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-tracking-properties-changes-example[] - Customer customer = entityManager.find(Customer.class, 1L); - customer.setLastName("Doe Jr."); - //end::envers-tracking-properties-changes-example[] - }); - } - - //tag::envers-tracking-properties-changes-mapping-example[] - @Audited(withModifiedFlag = true) - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - //Getters and setters are omitted for brevity - //end::envers-tracking-properties-changes-mapping-example[] - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - //tag::envers-tracking-properties-changes-mapping-example[] - } - //end::envers-tracking-properties-changes-mapping-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java deleted file mode 100644 index 21967a9bfe0f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * An annotation for specifyfing test method priority. Methods with higher priorities execute earlier. - * If the annotation is not present priority 0 is assumed. - * - * @author Adam Warski (adam at warski dot org) - */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.TYPE}) -public @interface Priority { - int value(); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditAdressCountryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditAdressCountryTest.java deleted file mode 100644 index 7a1ad968d2f3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditAdressCountryTest.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Date; -import java.util.List; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.dialect.HSQLDialect; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.query.AuditEntity; - -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; -import org.hibernate.testing.orm.junit.Setting; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; -import jakarta.persistence.criteria.JoinType; - -import static org.junit.Assert.assertEquals; - -/** - * @author Vlad Mihalcea - */ -@Jpa(annotatedClasses = { - QueryAuditAdressCountryTest.Customer.class, - QueryAuditAdressCountryTest.Address.class, - QueryAuditAdressCountryTest.Country.class -}, integrationSettings = { - @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy") -}) -public class QueryAuditAdressCountryTest { - @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void test(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { - Country country = new Country(); - country.setId(1L); - country.setName("România"); - entityManager.persist(country); - - Address address = new Address(); - address.setId(1L); - address.setCountry(country); - address.setCity("Cluj-Napoca"); - address.setStreet("Bulevardul Eroilor"); - address.setStreetNumber("1 A"); - entityManager.persist(address); - - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - customer.setAddress(address); - - entityManager.persist(customer); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-querying-entity-relation-nested-join-restriction[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, 1) - .traverseRelation("address", JoinType.INNER) - .traverseRelation("country", JoinType.INNER) - .add(AuditEntity.property("name").eq("România")) - .getResultList(); - - assertEquals(1, customers.size()); - //end::envers-querying-entity-relation-nested-join-restriction[] - }); - - scope.inTransaction( entityManager -> { - //tag::envers-querying-entity-relation-join-multiple-restrictions[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, 1) - .traverseRelation("address", JoinType.LEFT, "a") - .add( - AuditEntity.or( - AuditEntity.property("a", "city").eq("Cluj-Napoca"), - AuditEntity.relatedId("country").eq(null) - ) - ) - .getResultList(); - //end::envers-querying-entity-relation-join-multiple-restrictions[] - - assertEquals(1, customers.size()); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-querying-entity-relation-nested-join-multiple-restrictions[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, 1) - .traverseRelation("address", JoinType.INNER, "a") - .traverseRelation("country", JoinType.INNER, "cn") - .up() - .up() - .add( - AuditEntity.disjunction() - .add(AuditEntity.property("a", "city").eq("Cluj-Napoca")) - .add(AuditEntity.property("cn", "name").eq("România")) - ) - .addOrder(AuditEntity.property("createdOn").asc()) - .getResultList(); - //end::envers-querying-entity-relation-nested-join-multiple-restrictions[] - - assertEquals(1, customers.size()); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-querying-entity-relation-nested-join-multiple-restrictions-combined-entities[] - Customer customer = entityManager.createQuery( - "select c " + - "from Customer c " + - "join fetch c.address a " + - "join fetch a.country " + - "where c.id = :id", Customer.class) - .setParameter("id", 1L) - .getSingleResult(); - - customer.setLastName("Doe Sr."); - - customer.getAddress().setCity( - customer.getAddress().getCountry().getName() - ); - //end::envers-querying-entity-relation-nested-join-multiple-restrictions-combined-entities[] - }); - - scope.inTransaction( entityManager -> { - - - //tag::envers-querying-entity-relation-nested-join-multiple-restrictions-combined[] - List revisions = AuditReaderFactory.get(entityManager).getRevisions( - Customer.class, - 1L - ); - - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(revisions.size() - 1)) - .traverseRelation("address", JoinType.INNER, "a") - .traverseRelation("country", JoinType.INNER, "cn") - .up() - .up() - .add(AuditEntity.property("a", "city").eqProperty("cn", "name")) - .getResultList(); - //end::envers-querying-entity-relation-nested-join-multiple-restrictions-combined[] - - assertEquals(1, customers.size()); - }); - - } - - //tag::envers-generateschema-example[] - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - @ManyToOne(fetch = FetchType.LAZY) - private Address address; - - //Getters and setters omitted for brevity - //end::envers-generateschema-example[] - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - //tag::envers-generateschema-example[] - } - - @Audited - @Entity(name = "Address") - public static class Address { - - @Id - private Long id; - - @ManyToOne(fetch = FetchType.LAZY) - private Country country; - - private String city; - - private String street; - - private String streetNumber; - - //Getters and setters omitted for brevity - //end::envers-generateschema-example[] - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Country getCountry() { - return country; - } - - public void setCountry(Country country) { - this.country = country; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getStreetNumber() { - return streetNumber; - } - - public void setStreetNumber(String streetNumber) { - this.streetNumber = streetNumber; - } - //tag::envers-generateschema-example[] - } - - @Audited - @Entity(name = "Country") - public static class Country { - - @Id - private Long id; - - private String name; - - //Getters and setters omitted for brevity - //end::envers-generateschema-example[] - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - //tag::envers-generateschema-example[] - } - //end::envers-generateschema-example[] -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditTest.java deleted file mode 100644 index 7e7fb795800f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditTest.java +++ /dev/null @@ -1,380 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.sql.Timestamp; -import java.time.LocalDateTime; -import java.time.ZoneOffset; -import java.util.Date; -import java.util.List; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.AuditQuery; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; -import org.hibernate.testing.orm.junit.Setting; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; -import jakarta.persistence.criteria.JoinType; - -import static org.junit.Assert.assertEquals; - -/** - * @author Vlad Mihalcea - * @author Chris Cranford - */ -@Jpa(annotatedClasses = { - QueryAuditTest.Customer.class, - QueryAuditTest.Address.class -}, integrationSettings = { - @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy") -}) -public class QueryAuditTest { - @Test - public void test(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { - Address address = new Address(); - address.setId(1L); - address.setCountry("România"); - address.setCity("Cluj-Napoca"); - address.setStreet("Bulevardul Eroilor"); - address.setStreetNumber("1 A"); - entityManager.persist(address); - - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - customer.setAddress(address); - - entityManager.persist(customer); - }); - - scope.inTransaction( entityManager -> { - Customer customer = entityManager.find(Customer.class, 1L); - customer.setLastName("Doe Jr."); - }); - - scope.inTransaction( entityManager -> { - Customer customer = entityManager.getReference(Customer.class, 1L); - entityManager.remove(customer); - }); - - List revisions = scope.fromTransaction( entityManager -> { - return AuditReaderFactory.get(entityManager).getRevisions( - Customer.class, - 1L - ); - }); - - scope.inTransaction( entityManager -> { - //tag::entities-at-revision-example[] - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(0)) - .getSingleResult(); - - assertEquals("Doe", customer.getLastName()); - //end::entities-at-revision-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::entities-filtering-example[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, true, true) - .add(AuditEntity.property("firstName").eq("John")) - .getResultList(); - - assertEquals(2, customers.size()); - assertEquals("Doe", customers.get(0).getLastName()); - assertEquals("Doe Jr.", customers.get(1).getLastName()); - //end::entities-filtering-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::entities-filtering-by-entity-example[] - Address address = entityManager.getReference(Address.class, 1L); - - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, true, true) - .add(AuditEntity.property("address").eq(address)) - .getResultList(); - - assertEquals(2, customers.size()); - //end::entities-filtering-by-entity-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::entities-filtering-by-entity-identifier-example[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, true, true) - .add(AuditEntity.relatedId("address").eq(1L)) - .getResultList(); - - assertEquals(2, customers.size()); - //end::entities-filtering-by-entity-identifier-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::entities-in-clause-filtering-by-entity-identifier-example[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, true, true) - .add(AuditEntity.relatedId("address").in(new Object[] { 1L, 2L })) - .getResultList(); - - assertEquals(2, customers.size()); - //end::entities-in-clause-filtering-by-entity-identifier-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::entities-filtering-and-pagination[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, true, true) - .addOrder(AuditEntity.property("lastName").desc()) - .add(AuditEntity.relatedId("address").eq(1L)) - .setFirstResult(1) - .setMaxResults(2) - .getResultList(); - - assertEquals(1, customers.size()); - //end::entities-filtering-and-pagination[] - }); - - scope.inTransaction( entityManager -> { - //tag::revisions-of-entity-query-example[] - AuditQuery query = AuditReaderFactory.get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, false, true); - //end::revisions-of-entity-query-example[] - }); - - scope.inTransaction( entityManager -> { - //tag::revisions-of-entity-query-by-revision-number-example[] - Number revision = (Number) AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, false, true) - .addProjection(AuditEntity.revisionNumber().min()) - .add(AuditEntity.id().eq(1L)) - .add(AuditEntity.revisionNumber().gt(2)) - .getSingleResult(); - //end::revisions-of-entity-query-by-revision-number-example[] - - assertEquals(3, revision); - }); - - scope.inTransaction( entityManager -> { - //tag::revisions-of-entity-query-minimize-example[] - Number revision = (Number) AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, false, true) - .addProjection(AuditEntity.revisionNumber().min()) - .add(AuditEntity.id().eq(1L)) - .add( - AuditEntity.property("createdOn") - .minimize() - .add(AuditEntity.property("createdOn") - .ge( - Timestamp.from( - LocalDateTime.now() - .minusDays(1) - .toInstant(ZoneOffset.UTC) - ) - ) - ) - ) - .getSingleResult(); - //end::revisions-of-entity-query-minimize-example[] - - assertEquals(1, revision); - }); - - scope.inTransaction( entityManager -> { - { - //tag::envers-querying-entity-relation-inner-join[] - AuditQuery innerJoinAuditQuery = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, 1) - .traverseRelation("address", JoinType.INNER); - //end::envers-querying-entity-relation-inner-join[] - } - { - //tag::envers-querying-entity-relation-left-join[] - AuditQuery innerJoinAuditQuery = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, 1) - .traverseRelation("address", JoinType.LEFT); - //end::envers-querying-entity-relation-left-join[] - } - }); - - scope.inTransaction( entityManager -> { - //tag::envers-querying-entity-relation-join-restriction[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, 1) - .traverseRelation("address", JoinType.INNER) - .add(AuditEntity.property("country").eq("România")) - .getResultList(); - //end::envers-querying-entity-relation-join-restriction[] - - assertEquals(1, customers.size()); - }); - - scope.inTransaction( entityManager -> { - //tag::aggregate-max-revision-with-entity-example[] - List results = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, true, false) - .add(AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext()) - .getResultList(); - //end::aggregate-max-revision-with-entity-example[] - }); - } - - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - @ManyToOne(fetch = FetchType.LAZY) - private Address address; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - } - - @Audited - @Entity(name = "Address") - public static class Address { - - @Id - private Long id; - - private String country; - - private String city; - - private String street; - - private String streetNumber; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getStreetNumber() { - return streetNumber; - } - - public void setStreetNumber(String streetNumber) { - this.streetNumber = streetNumber; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditWithModifiedFlagTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditWithModifiedFlagTest.java deleted file mode 100644 index b67c2aa3aea5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/QueryAuditWithModifiedFlagTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Date; -import java.util.List; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.query.AuditEntity; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; -import org.hibernate.testing.orm.junit.Setting; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author Vlad Mihalcea - */ -@Jpa(annotatedClasses = { - QueryAuditWithModifiedFlagTest.Customer.class, - QueryAuditWithModifiedFlagTest.Address.class -}, integrationSettings = { - @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy") -}) -public class QueryAuditWithModifiedFlagTest { - @Test - public void test(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { - Address address = new Address(); - address.setId(1L); - address.setCountry("România"); - address.setCity("Cluj-Napoca"); - address.setStreet("Bulevardul Eroilor"); - address.setStreetNumber("1 A"); - entityManager.persist(address); - - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - customer.setAddress(address); - - entityManager.persist(customer); - }); - - scope.inTransaction( entityManager -> { - Customer customer = entityManager.find(Customer.class, 1L); - customer.setLastName("Doe Jr."); - }); - - scope.inTransaction( entityManager -> { - Customer customer = entityManager.getReference(Customer.class, 1L); - entityManager.remove(customer); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-tracking-properties-changes-queries-hasChanged-example[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, false, true) - .add(AuditEntity.id().eq(1L)) - .add(AuditEntity.property("lastName").hasChanged()) - .getResultList(); - //end::envers-tracking-properties-changes-queries-hasChanged-example[] - - assertEquals(3, customers.size()); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example[] - List customers = AuditReaderFactory - .get(entityManager) - .createQuery() - .forRevisionsOfEntity(Customer.class, false, true) - .add(AuditEntity.id().eq(1L)) - .add(AuditEntity.property("lastName").hasChanged()) - .add(AuditEntity.property("firstName").hasNotChanged()) - .getResultList(); - //end::envers-tracking-properties-changes-queries-hasChanged-and-hasNotChanged-example[] - - assertEquals(1, customers.size()); - }); - - scope.inTransaction( entityManager -> { - //tag::envers-tracking-properties-changes-queries-at-revision-example[] - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesModifiedAtRevision(Customer.class, 2) - .add(AuditEntity.id().eq(1L)) - .add(AuditEntity.property("lastName").hasChanged()) - .add(AuditEntity.property("firstName").hasNotChanged()) - .getSingleResult(); - //end::envers-tracking-properties-changes-queries-at-revision-example[] - - assertNotNull(customer); - }); - } - - //tag::envers-tracking-properties-changes-queries-entity-example[] - @Audited(withModifiedFlag = true) - //end::envers-tracking-properties-changes-queries-entity-example[] - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - @ManyToOne(fetch = FetchType.LAZY) - private Address address; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - } - - @Audited - @Entity(name = "Address") - public static class Address { - - @Id - private Long id; - - private String country; - - private String city; - - private String street; - - private String streetNumber; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getStreetNumber() { - return streetNumber; - } - - public void setStreetNumber(String streetNumber) { - this.streetNumber = streetNumber; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/RuntimeModelSmokeTests.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/RuntimeModelSmokeTests.java deleted file mode 100644 index 92e6bb3ec8e8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/RuntimeModelSmokeTests.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.Audited; -import org.hibernate.metamodel.RuntimeMetamodels; -import org.hibernate.persister.entity.EntityPersister; - -import org.hibernate.testing.orm.junit.DomainModel; -import org.hibernate.testing.orm.junit.ServiceRegistry; -import org.hibernate.testing.orm.junit.SessionFactory; -import org.hibernate.testing.orm.junit.SessionFactoryScope; -import org.hibernate.testing.orm.junit.Setting; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.notNullValue; - -/** - * @author Steve Ebersole - */ -@ServiceRegistry( - settings = @Setting( - name = AvailableSettings.JPA_METAMODEL_POPULATION, - value = "ignoreUnsupported" - ) -) -@DomainModel( - annotatedClasses = RuntimeModelSmokeTests.SimpleEntity.class -) -@SessionFactory -public class RuntimeModelSmokeTests { - public static final String FULL_NAME = "org.hibernate.orm.test.envers.RuntimeModelSmokeTests$SimpleEntity_AUD"; - public static final String SIMPLE_NAME = "SimpleEntity_AUD"; - - @Test - public void basicTest(SessionFactoryScope scope) { - final RuntimeMetamodels runtimeMetamodels = scope.getSessionFactory().getRuntimeMetamodels(); - - final EntityPersister mappingType = runtimeMetamodels.getMappingMetamodel().findEntityDescriptor( FULL_NAME ); - assertThat( mappingType, notNullValue() ); - } - - @Entity( name = "SimpleEntity" ) - @Table( name = "simple" ) - @Audited - public static class SimpleEntity { - @Id - private Integer id; - String name; - - public SimpleEntity() { - } - - public SimpleEntity(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - private void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ValidityStrategyAuditTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ValidityStrategyAuditTest.java deleted file mode 100644 index a060a7669f1b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/ValidityStrategyAuditTest.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; - -import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.hibernate.testing.orm.junit.Jpa; -import org.hibernate.testing.orm.junit.Setting; -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.NoResultException; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; - -/** - * @author Vlad Mihalcea - */ -@Jpa(annotatedClasses = { - ValidityStrategyAuditTest.Customer.class -}, integrationSettings = { - @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy") -}) -public class ValidityStrategyAuditTest { - protected void addConfigOptions(Map options) { - //tag::envers-audited-validity-configuration-example[] - options.put( - EnversSettings.AUDIT_STRATEGY, - ValidityAuditStrategy.class.getName() - ); - //end::envers-audited-validity-configuration-example[] - } - - @Test - public void test(EntityManagerFactoryScope scope) { - scope.inTransaction( entityManager -> { - Customer customer = new Customer(); - customer.setId(1L); - customer.setFirstName("John"); - customer.setLastName("Doe"); - - entityManager.persist(customer); - }); - - scope.inTransaction( entityManager -> { - Customer customer = entityManager.find(Customer.class, 1L); - customer.setLastName("Doe Jr."); - }); - - scope.inTransaction( entityManager -> { - Customer customer = entityManager.getReference(Customer.class, 1L); - entityManager.remove(customer); - }); - - List revisions = scope.fromTransaction( entityManager -> { - return AuditReaderFactory.get(entityManager).getRevisions( - Customer.class, - 1L - ); - }); - - scope.inTransaction( entityManager -> { - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(0)) - .getSingleResult(); - - assertEquals("Doe", customer.getLastName()); - }); - - scope.inTransaction( entityManager -> { - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(1)) - .getSingleResult(); - - assertEquals("Doe Jr.", customer.getLastName()); - }); - - scope.inTransaction( entityManager -> { - try { - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision(Customer.class, revisions.get(2)) - .getSingleResult(); - - fail("The Customer was deleted at this revision: " + revisions.get(2)); - } - catch (NoResultException expected) { - } - }); - - scope.inTransaction( entityManager -> { - Customer customer = (Customer) AuditReaderFactory - .get(entityManager) - .createQuery() - .forEntitiesAtRevision( - Customer.class, - Customer.class.getName(), - revisions.get(2), - true) - .getSingleResult(); - - assertEquals(Long.valueOf(1L), customer.getId()); - assertNull(customer.getFirstName()); - assertNull(customer.getLastName()); - assertNull(customer.getCreatedOn()); - }); - } - - @Audited - @Entity(name = "Customer") - public static class Customer { - - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Temporal(TemporalType.TIMESTAMP) - @Column(name = "created_on") - @CreationTimestamp - private Date createdOn; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Date getCreatedOn() { - return createdOn; - } - - public void setCreatedOn(Date createdOn) { - this.createdOn = createdOn; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntNoAutoIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntNoAutoIdTestEntity.java deleted file mode 100644 index dfa451963297..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntNoAutoIdTestEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class IntNoAutoIdTestEntity { - @Id - private Integer id; - - @Audited - private Integer numVal; - - public IntNoAutoIdTestEntity() { - } - - public IntNoAutoIdTestEntity(Integer numVal, Integer id) { - this.id = id; - this.numVal = numVal; - } - - public IntNoAutoIdTestEntity(Integer numVal) { - this.numVal = numVal; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getNumVal() { - return numVal; - } - - public void setNumVal(Integer numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof IntNoAutoIdTestEntity) ) { - return false; - } - - IntNoAutoIdTestEntity that = (IntNoAutoIdTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( numVal != null ? !numVal.equals( that.numVal ) : that.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "INATE(id = " + id + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestEntity.java deleted file mode 100644 index 1ff26b1cfee2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class IntTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @Column(name = "NUMERIC_VALUE") - private Integer number; - - public IntTestEntity() { - } - - public IntTestEntity(Integer number, Integer id) { - this.id = id; - this.number = number; - } - - public IntTestEntity(Integer number) { - this.number = number; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof IntTestEntity) ) { - return false; - } - - IntTestEntity that = (IntTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = (id != null ? id.hashCode() : 0); - result = 31 * result + (number != null ? number.hashCode() : 0); - return result; - } - - public String toString() { - return "ITE(id = " + id + ", number = " + number + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java deleted file mode 100644 index 5083245a51b9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.SequenceGenerator; - -import org.hibernate.envers.Audited; - -/** - * Duplicate of {@link IntTestEntity} but with private sequence generator. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class IntTestPrivSeqEntity { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IntTestPrivSeq") - @SequenceGenerator(name = "IntTestPrivSeq", sequenceName = "INTTESTPRIV_SEQ", - allocationSize = 1, initialValue = 1) - private Integer id; - - @Audited - @Column(name = "NUMERIC_VALUE") - private Integer number; - - public IntTestPrivSeqEntity() { - } - - public IntTestPrivSeqEntity(Integer number, Integer id) { - this.id = id; - this.number = number; - } - - public IntTestPrivSeqEntity(Integer number) { - this.number = number; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof IntTestPrivSeqEntity) ) { - return false; - } - - IntTestPrivSeqEntity that = (IntTestPrivSeqEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = (id != null ? id.hashCode() : 0); - result = 31 * result + (number != null ? number.hashCode() : 0); - return result; - } - - public String toString() { - return "ITPSE(id = " + id + ", number = " + number + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/PrimitiveTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/PrimitiveTestEntity.java deleted file mode 100644 index 623bb98f5355..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/PrimitiveTestEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class PrimitiveTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private int numVal1; - - private int numVal2; - - public PrimitiveTestEntity() { - } - - public PrimitiveTestEntity(int numVal1, int numVal2) { - this.numVal1 = numVal1; - this.numVal2 = numVal2; - } - - public PrimitiveTestEntity(Integer id, int numVal1, int number2) { - this.id = id; - this.numVal1 = numVal1; - this.numVal2 = number2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getNumVal1() { - return numVal1; - } - - public void setNumVal1(Integer numVal1) { - this.numVal1 = numVal1; - } - - public int getNumVal2() { - return numVal2; - } - - public void setNumVal2(int numVal2) { - this.numVal2 = numVal2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PrimitiveTestEntity) ) { - return false; - } - - PrimitiveTestEntity that = (PrimitiveTestEntity) o; - - if ( numVal1 != that.numVal1 ) { - return false; - } - if ( numVal2 != that.numVal2 ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + numVal1; - result = 31 * result + numVal2; - return result; - } - - public String toString() { - return "PTE(id = " + id + ", numVal1 = " + numVal1 + ", numVal2 = " + numVal2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java deleted file mode 100644 index 47758f03e7a6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class StrIntTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str1; - - @Audited - @Column(name = "NUM_VAL") - private Integer number; - - public StrIntTestEntity() { - } - - public StrIntTestEntity(String str1, Integer number, Integer id) { - this.id = id; - this.str1 = str1; - this.number = number; - } - - public StrIntTestEntity(String str1, Integer number) { - this.str1 = str1; - this.number = number; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StrIntTestEntity) ) { - return false; - } - - StrIntTestEntity that = (StrIntTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (number != null ? number.hashCode() : 0); - return result; - } - - public String toString() { - return "SITE(id = " + id + ", str1 = " + str1 + ", number = " + number + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java deleted file mode 100644 index eaac9bc0f4b5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "STR_TEST") -public class StrTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str; - - public StrTestEntity() { - } - - public StrTestEntity(String str, Integer id) { - this.str = str; - this.id = id; - } - - public StrTestEntity(String str) { - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StrTestEntity) ) { - return false; - } - - StrTestEntity that = (StrTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } - - public String toString() { - return "STE(id = " + id + ", str = " + str + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntityComparator.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntityComparator.java deleted file mode 100644 index 03ae0fbaa0ee..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntityComparator.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import java.util.Comparator; - -public class StrTestEntityComparator implements Comparator { - public static final StrTestEntityComparator INSTANCE = new StrTestEntityComparator(); - - @Override - public int compare(StrTestEntity o1, StrTestEntity o2) { - return o1.getStr().compareTo( o2.getStr() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestNoProxyEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestNoProxyEntity.java deleted file mode 100644 index 16dd99255a27..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestNoProxyEntity.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import java.io.Serializable; - -import org.hibernate.envers.Audited; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "STR_TEST_NP") -public class StrTestNoProxyEntity implements Serializable { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str; - - public StrTestNoProxyEntity() { - } - - public StrTestNoProxyEntity(String str, Integer id) { - this.str = str; - this.id = id; - } - - public StrTestNoProxyEntity(String str) { - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StrTestNoProxyEntity) ) { - return false; - } - - StrTestNoProxyEntity that = (StrTestNoProxyEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } - - public String toString() { - return "STNPE(id = " + id + ", str = " + str + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java deleted file mode 100644 index 9294986bb8cd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.SequenceGenerator; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Duplicate of {@link StrTestEntity} but with private sequence generator. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "STRSEQ") -public class StrTestPrivSeqEntity { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "StrTestPrivSeq") - @SequenceGenerator(name = "StrTestPrivSeq", sequenceName = "STRTESTPRIV_SEQ", - allocationSize = 1, initialValue = 1) - private Integer id; - - @Audited - private String str; - - public StrTestPrivSeqEntity() { - } - - public StrTestPrivSeqEntity(String str, Integer id) { - this.str = str; - this.id = id; - } - - public StrTestPrivSeqEntity(String str) { - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StrTestPrivSeqEntity) ) { - return false; - } - - StrTestPrivSeqEntity that = (StrTestPrivSeqEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } - - public String toString() { - return "STPSE(id = " + id + ", str = " + str + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/UnversionedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/UnversionedEntity.java deleted file mode 100644 index 3e761915b0e7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/UnversionedEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class UnversionedEntity { - @Id - @GeneratedValue - private Integer id; - - @Basic - private String data1; - - @Basic - @NotAudited - private String data2; - - public UnversionedEntity() { - } - - public UnversionedEntity(String data1, String data2) { - this.data1 = data1; - this.data2 = data2; - } - - public UnversionedEntity(Integer id, String data1, String data2) { - this.id = id; - this.data1 = data1; - this.data2 = data2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UnversionedEntity) ) { - return false; - } - - UnversionedEntity that = (UnversionedEntity) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/UnversionedStrTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/UnversionedStrTestEntity.java deleted file mode 100644 index 489c97261d64..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/UnversionedStrTestEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "UNVER_DATA") -public class UnversionedStrTestEntity { - @Id - @GeneratedValue - private Integer id; - - private String str; - - public UnversionedStrTestEntity() { - } - - public UnversionedStrTestEntity(String str, Integer id) { - this.str = str; - this.id = id; - } - - public UnversionedStrTestEntity(String str) { - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UnversionedStrTestEntity) ) { - return false; - } - - UnversionedStrTestEntity that = (UnversionedStrTestEntity) o; - - if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { - return false; - } - if ( str != null ? !str.equals( that.getStr() ) : that.getStr() != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } - - public String toString() { - return "USTE(id = " + id + ", str = " + str + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity1.java deleted file mode 100644 index c04c9eece539..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity1.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.components.Component3; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@Entity -@Table(name = "EmbListEnt1") -@Audited -public class EmbeddableListEntity1 { - @Id - @GeneratedValue - private Integer id; - - private String otherData; - - @ElementCollection - @OrderColumn - @CollectionTable(name = "EmbListEnt1_list") - private List componentList = new ArrayList(); - - public EmbeddableListEntity1() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getComponentList() { - return componentList; - } - - public void setComponentList(List componentList) { - this.componentList = componentList; - } - - public String getOtherData() { - return otherData; - } - - public void setOtherData(String otherData) { - this.otherData = otherData; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbeddableListEntity1) ) { - return false; - } - - EmbeddableListEntity1 that = (EmbeddableListEntity1) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "ELE1(id = " + id + ", otherData = " + otherData + ", componentList = " + componentList + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity2.java deleted file mode 100644 index 6296983693d0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity2.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneEagerComponent; - -/** - * Embeddable list with components encapsulating many-to-one relation (referencing some entity). - * - * @author thiagolrc - */ -@Entity -@Table(name = "EmbListEnt2") -@Audited -public class EmbeddableListEntity2 { - @Id - @GeneratedValue - private Integer id; - - @ElementCollection - @OrderColumn - @CollectionTable(name = "EmbListEnt2_list") - private List componentList = new ArrayList(); - - public EmbeddableListEntity2() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getComponentList() { - return componentList; - } - - public void setComponentList(List componentList) { - this.componentList = componentList; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbeddableListEntity2) ) { - return false; - } - - EmbeddableListEntity2 that = (EmbeddableListEntity2) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "ELE2(id = " + id + ", componentList = " + componentList + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity3.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity3.java deleted file mode 100644 index 7a24a3b85868..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableListEntity3.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneEagerComponent; - -import jakarta.persistence.*; -import java.util.ArrayList; -import java.util.List; - -/** - * Entity with a List of Embeddable Components that have ManyToOne relationships - * - * @author Cankut Guven - */ -@Entity -@Table(name = "EmbListEnt3") -@Audited -public class EmbeddableListEntity3 { - @Id - @GeneratedValue - private Integer id; - - @ElementCollection - @OrderColumn - @CollectionTable(name = "EmbListEnt3_list") - private List componentList = new ArrayList(); - - public EmbeddableListEntity3() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getComponentList() { - return componentList; - } - - public void setComponentList(List componentList) { - this.componentList = componentList; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbeddableListEntity3) ) { - return false; - } - - EmbeddableListEntity3 that = (EmbeddableListEntity3) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "ELE3(id = " + id + ", componentList = " + componentList + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableMapEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableMapEntity.java deleted file mode 100644 index f92d0e02da6f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableMapEntity.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MapKeyColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.components.Component3; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@Entity -@Table(name = "EmbMapEnt") -public class EmbeddableMapEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ElementCollection - @CollectionTable(name = "EmbMapEnt_map") - @MapKeyColumn(nullable = false) // NOT NULL for Sybase - private Map componentMap; - - public EmbeddableMapEntity() { - componentMap = new HashMap(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getComponentMap() { - return componentMap; - } - - public void setComponentMap(Map strings) { - this.componentMap = strings; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbeddableMapEntity) ) { - return false; - } - - EmbeddableMapEntity that = (EmbeddableMapEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "EME(id = " + id + ", componentMap = " + componentMap + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableSetEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableSetEntity.java deleted file mode 100644 index d8698ad7d326..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EmbeddableSetEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.components.Component3; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@Entity -@Table(name = "EmbSetEnt") -@Audited -public class EmbeddableSetEntity { - @Id - @GeneratedValue - private Integer id; - - @ElementCollection - @CollectionTable(name = "EmbSetEnt_set") - private Set componentSet = new HashSet(); - - public EmbeddableSetEntity() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getComponentSet() { - return componentSet; - } - - public void setComponentSet(Set componentSet) { - this.componentSet = componentSet; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbeddableSetEntity) ) { - return false; - } - - EmbeddableSetEntity that = (EmbeddableSetEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "ESE(id = " + id + ", componentSet = " + componentSet + ')'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumMapEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumMapEntity.java deleted file mode 100644 index 83d151864c81..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumMapEntity.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.EnumMap; -import java.util.Map; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class EnumMapEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToMany(cascade = CascadeType.ALL) - private Map types = new EnumMap<>(EnumType.class); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getTypes() { - return types; - } - - public void setTypes(Map types) { - this.types = types; - } - - public enum EnumType { - TYPE_A, - TYPE_B, - TYPE_C - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumMapType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumMapType.java deleted file mode 100644 index 2104b544c709..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumMapType.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class EnumMapType { - @Id - @GeneratedValue - private Integer id; - private String type; - - EnumMapType() { - - } - - public EnumMapType(String type) { - this.type = type; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumSetEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumSetEntity.java deleted file mode 100644 index 251e5911d483..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/EnumSetEntity.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class EnumSetEntity { - public static enum E1 {X, Y} - - public static enum E2 {A, B} - - @Id - @GeneratedValue - private Integer id; - - @Audited - @ElementCollection - @Enumerated(EnumType.STRING) - private Set enums1; - - @Audited - @ElementCollection - @Enumerated(EnumType.ORDINAL) - private Set enums2; - - public EnumSetEntity() { - enums1 = new HashSet(); - enums2 = new HashSet(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getEnums1() { - return enums1; - } - - public void setEnums1(Set enums1) { - this.enums1 = enums1; - } - - public Set getEnums2() { - return enums2; - } - - public void setEnums2(Set enums2) { - this.enums2 = enums2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EnumSetEntity) ) { - return false; - } - - EnumSetEntity that = (EnumSetEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "ESE(id = " + id + ", enums1 = " + enums1 + ", enums2 = " + enums2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionEntity.java deleted file mode 100644 index 3141573a5b78..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionEntity.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Version; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class MultipleCollectionEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "ID", length = 10) - private Long id; - - @Version - @Column(name = "VERSION", nullable = false) - private Integer version; - - @Column(name = "TEXT", length = 50, nullable = false) - private String text; - - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) - @JoinColumn(name = "MCE_ID", nullable = false) - @AuditJoinTable(name = "MCE_RE1_AUD", inverseJoinColumns = @JoinColumn(name = "RE1_ID")) - private List refEntities1 = new ArrayList(); - - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) - @JoinColumn(name = "MCE_ID", nullable = false) - @AuditJoinTable(name = "MCE_RE2_AUD", inverseJoinColumns = @JoinColumn(name = "RE2_ID")) - private List refEntities2 = new ArrayList(); - - public Long getId() { - return id; - } - - public Integer getVersion() { - return version; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public List getRefEntities1() { - return refEntities1; - } - - public void addRefEntity1(MultipleCollectionRefEntity1 refEntity1) { - refEntities1.add( refEntity1 ); - } - - public void removeRefEntity1(MultipleCollectionRefEntity1 refEntity1) { - refEntities1.remove( refEntity1 ); - } - - public List getRefEntities2() { - return refEntities2; - } - - public void addRefEntity2(MultipleCollectionRefEntity2 refEntity2) { - refEntities2.add( refEntity2 ); - } - - public void removeRefEntity2(MultipleCollectionRefEntity2 refEntity2) { - refEntities2.remove( refEntity2 ); - } - - /** - * For test purpose only. - */ - public void setRefEntities1(List refEntities1) { - this.refEntities1 = refEntities1; - } - - /** - * For test purpose only. - */ - public void setRefEntities2(List refEntities2) { - this.refEntities2 = refEntities2; - } - - @Override - public String toString() { - return "MultipleCollectionEntity [id=" + id + ", text=" + text - + ", refEntities1=" + refEntities1 + ", refEntities2=" - + refEntities2 + "]"; - } - - @Override - public int hashCode() { - return Objects.hash( id ); - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) - return true; - if ( obj == null ) - return false; - if ( getClass() != obj.getClass() ) - return false; - MultipleCollectionEntity other = (MultipleCollectionEntity) obj; - return Objects.equals( id, other.id ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionRefEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionRefEntity1.java deleted file mode 100644 index 035a43eae131..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionRefEntity1.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.ForeignKey; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Version; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -@Entity -@Audited -public class MultipleCollectionRefEntity1 { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "ID", length = 10) - private Long id; - - @Version - @Column(name = "VERSION", nullable = false) - private Integer version; - - @Column(name = "TEXT", length = 50, nullable = false) - private String text; - - @ManyToOne - @JoinColumn(name = "MCE_ID", nullable = false, insertable = false, updatable = false, - foreignKey = @ForeignKey(name = "FK_RE1_MCE")) - @NotAudited - private MultipleCollectionEntity multipleCollectionEntity; - - @Column(name = "MCE_ID", insertable = false, updatable = false) - @NotAudited - private Long multipleCollectionEntityId; - - public Long getId() { - return id; - } - - public Integer getVersion() { - return version; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public MultipleCollectionEntity getMultipleCollectionEntity() { - return multipleCollectionEntity; - } - - public void setMultipleCollectionEntity(MultipleCollectionEntity multipleCollectionEntity) { - this.multipleCollectionEntity = multipleCollectionEntity; - } - - public Long getMultipleCollectionEntityId() { - return multipleCollectionEntityId; - } - - public void setMultipleCollectionEntityId(Long multipleCollectionEntityId) { - this.multipleCollectionEntityId = multipleCollectionEntityId; - } - - @Override - public String toString() { - return "MultipleCollectionRefEntity1 [id=" + id + ", text=" + text - + ", multipleCollectionEntityId=" + multipleCollectionEntityId - + "]"; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MultipleCollectionRefEntity1) ) { - return false; - } - - MultipleCollectionRefEntity1 that = (MultipleCollectionRefEntity1) o; - - if ( text != null ? !text.equals( that.text ) : that.text != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return text != null ? text.hashCode() : 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionRefEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionRefEntity2.java deleted file mode 100644 index 802a895dba54..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/MultipleCollectionRefEntity2.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.ForeignKey; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Version; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -@Entity -@Audited -public class MultipleCollectionRefEntity2 { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "ID", length = 10) - private Long id; - - @Version - @Column(name = "VERSION", nullable = false) - private Integer version; - - @Column(name = "TEXT", length = 50, nullable = false) - private String text; - - @ManyToOne - @JoinColumn(name = "MCE_ID", nullable = false, insertable = false, updatable = false, - foreignKey = @ForeignKey(name = "FK_RE2_MCE")) - @NotAudited - private MultipleCollectionEntity multipleCollectionEntity; - - @Column(name = "MCE_ID", insertable = false, updatable = false) - @NotAudited - private Long multipleCollectionEntityId; - - public Long getId() { - return id; - } - - public Integer getVersion() { - return version; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public MultipleCollectionEntity getMultipleCollectionEntity() { - return multipleCollectionEntity; - } - - public void setMultipleCollectionEntity(MultipleCollectionEntity multipleCollectionEntity) { - this.multipleCollectionEntity = multipleCollectionEntity; - } - - public Long getMultipleCollectionEntityId() { - return multipleCollectionEntityId; - } - - public void setMultipleCollectionEntityId(Long multipleCollectionEntityId) { - this.multipleCollectionEntityId = multipleCollectionEntityId; - } - - @Override - public String toString() { - return "MultipleCollectionRefEntity2 [id=" + id + ", text=" + text - + ", multipleCollectionEntityId=" + multipleCollectionEntityId - + "]"; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MultipleCollectionRefEntity2) ) { - return false; - } - - MultipleCollectionRefEntity2 that = (MultipleCollectionRefEntity2) o; - - if ( text != null ? !text.equals( that.text ) : that.text != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return text != null ? text.hashCode() : 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringListEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringListEntity.java deleted file mode 100644 index 0a1d9b15cfc4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringListEntity.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.envers.Audited; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class StringListEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ElementCollection - @OrderColumn(name = "list_index") - private List strings; - - public StringListEntity() { - strings = new ArrayList(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getStrings() { - return strings; - } - - public void setStrings(List strings) { - this.strings = strings; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StringListEntity) ) { - return false; - } - - StringListEntity that = (StringListEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "SLE(id = " + id + ", strings = " + strings + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringMapEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringMapEntity.java deleted file mode 100644 index ba4b3cc7f082..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringMapEntity.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MapKeyColumn; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class StringMapEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ElementCollection - @MapKeyColumn(nullable = false) - private Map strings; - - public StringMapEntity() { - strings = new HashMap(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getStrings() { - return strings; - } - - public void setStrings(Map strings) { - this.strings = strings; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StringMapEntity) ) { - return false; - } - - StringMapEntity that = (StringMapEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "SME(id = " + id + ", strings = " + strings + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringSetEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringSetEntity.java deleted file mode 100644 index a1cac7a7018a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/collection/StringSetEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.collection; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class StringSetEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ElementCollection - private Set strings; - - public StringSetEntity() { - strings = new HashSet(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getStrings() { - return strings; - } - - public void setStrings(Set strings) { - this.strings = strings; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof StringSetEntity) ) { - return false; - } - - StringSetEntity that = (StringSetEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "SSE(id = " + id + ", strings = " + strings + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component1.java deleted file mode 100644 index 734c7616d99a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component1.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.Embeddable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class Component1 { - private String str1; - - private String str2; - - public Component1(String str1, String str2) { - this.str1 = str1; - this.str2 = str2; - } - - public Component1() { - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Component1) ) { - return false; - } - - Component1 that = (Component1) o; - - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - public String toString() { - return "Comp1(str1 = " + str1 + ", " + str2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component2.java deleted file mode 100644 index 5f06d5ef2470..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component2.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.Embeddable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class Component2 { - private String str5; - - private String str6; - - public Component2(String str5, String str6) { - this.str5 = str5; - this.str6 = str6; - } - - public Component2() { - } - - public String getStr5() { - return str5; - } - - public void setStr5(String str5) { - this.str5 = str5; - } - - public String getStr6() { - return str6; - } - - public void setStr6(String str6) { - this.str6 = str6; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Component2) ) { - return false; - } - - Component2 that = (Component2) o; - - if ( str5 != null ? !str5.equals( that.str5 ) : that.str5 != null ) { - return false; - } - if ( str6 != null ? !str6.equals( that.str6 ) : that.str6 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (str5 != null ? str5.hashCode() : 0); - result = 31 * result + (str6 != null ? str6.hashCode() : 0); - return result; - } - - public String toString() { - return "Comp2(str1 = " + str5 + ", " + str6 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component3.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component3.java deleted file mode 100644 index 5d62487a7518..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component3.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.AttributeOverrides; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * The {@link #nonAuditedComponent} is ignored in {@link #hashCode()} - * and {@link #equals(Object)} since it's not audited. - * - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@Embeddable -@Audited -public class Component3 { - private String str1; - - @AttributeOverrides({ - @AttributeOverride(name = "key", column = @Column(name = "audComp_key")), - @AttributeOverride(name = "value", column = @Column(name = "audComp_value")), - @AttributeOverride(name = "description", column = @Column(name = "audComp_description")) - }) - private Component4 auditedComponent; - - @NotAudited - @AttributeOverrides({ - @AttributeOverride(name = "key", column = @Column(name = "notAudComp_key")), - @AttributeOverride(name = "value", column = @Column(name = "notAudComp_value")), - @AttributeOverride(name = "description", - column = @Column(name = "notAudComp_description")) - }) - private Component4 nonAuditedComponent; - - public Component3() { - } - - public Component3(String str1, Component4 auditedComponent, Component4 nonAuditedComponent) { - this.str1 = str1; - this.auditedComponent = auditedComponent; - this.nonAuditedComponent = nonAuditedComponent; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public Component4 getAuditedComponent() { - return auditedComponent; - } - - public void setAuditedComponent(Component4 auditedComponent) { - this.auditedComponent = auditedComponent; - } - - public Component4 getNonAuditedComponent() { - return nonAuditedComponent; - } - - public void setNonAuditedComponent(Component4 nonAuditedComponent) { - this.nonAuditedComponent = nonAuditedComponent; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((auditedComponent == null) ? 0 : auditedComponent.hashCode()); - result = prime * result + ((str1 == null) ? 0 : str1.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !(obj instanceof Component3) ) { - return false; - } - - Component3 other = (Component3) obj; - - if ( auditedComponent != null ? - !auditedComponent.equals( other.auditedComponent ) : - other.auditedComponent != null ) { - return false; - } - if ( str1 != null ? !str1.equals( other.str1 ) : other.str1 != null ) { - return false; - } - - return true; - } - - @Override - public String toString() { - return "Component3[str1 = " + str1 + ", auditedComponent = " - + auditedComponent + ", nonAuditedComponent = " - + nonAuditedComponent + "]"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component4.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component4.java deleted file mode 100644 index fc776453f831..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/Component4.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@Embeddable -@Audited -public class Component4 { - @Column(name = "the_key") - private String key; - @Column(name = "val") - private String value; - - @NotAudited - private String description; - - public Component4() { - } - - public Component4(String key, String value, String description) { - this.key = key; - this.value = value; - this.description = description; - } - - public String getKey() { - return key; - } - - public void setKey(String key) { - this.key = key; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((key == null) ? 0 : key.hashCode()); - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !(obj instanceof Component4) ) { - return false; - } - - Component4 other = (Component4) obj; - - if ( key != null ? !key.equals( other.key ) : other.key != null ) { - return false; - } - if ( value != null ? !value.equals( other.value ) : other.value != null ) { - return false; - } - - return true; - } - - @Override - public String toString() { - return "Component4[key = " + key + ", value = " + value + ", description = " + description + "]"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/ComponentSetTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/ComponentSetTestEntity.java deleted file mode 100644 index df4e99235f41..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/ComponentSetTestEntity.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ComponentSetTestEntity { - @Id - @GeneratedValue - private Integer id; - - @ElementCollection - @CollectionTable(name = "CompTestEntityComps", joinColumns = @JoinColumn(name = "entity_id")) - private Set comps = new HashSet(); - - public ComponentSetTestEntity() { - } - - public ComponentSetTestEntity(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getComps() { - return comps; - } - - public void setComps(Set comps) { - this.comps = comps; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ComponentSetTestEntity) ) { - return false; - } - - ComponentSetTestEntity that = (ComponentSetTestEntity) o; - - if ( comps != null ? !comps.equals( that.comps ) : that.comps != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (comps != null ? comps.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ComponentSetTestEntity{" + - "id=" + id + - ", comps=" + comps + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/ComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/ComponentTestEntity.java deleted file mode 100644 index 53a19b108703..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/ComponentTestEntity.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "CompTest") -public class ComponentTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Embedded - @Audited - private Component1 comp1; - - @Embedded - private Component2 comp2; - - public ComponentTestEntity() { - } - - public ComponentTestEntity(Integer id, Component1 comp1, Component2 comp2) { - this.id = id; - this.comp1 = comp1; - this.comp2 = comp2; - } - - public ComponentTestEntity(Component1 comp1, Component2 comp2) { - this.comp1 = comp1; - this.comp2 = comp2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Component1 getComp1() { - return comp1; - } - - public void setComp1(Component1 comp1) { - this.comp1 = comp1; - } - - public Component2 getComp2() { - return comp2; - } - - public void setComp2(Component2 comp2) { - this.comp2 = comp2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ComponentTestEntity) ) { - return false; - } - - ComponentTestEntity that = (ComponentTestEntity) o; - - if ( comp1 != null ? !comp1.equals( that.comp1 ) : that.comp1 != null ) { - return false; - } - if ( comp2 != null ? !comp2.equals( that.comp2 ) : that.comp2 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (comp1 != null ? comp1.hashCode() : 0); - result = 31 * result + (comp2 != null ? comp2.hashCode() : 0); - return result; - } - - public String toString() { - return "CTE(id = " + id + ", comp1 = " + comp1 + ", comp2 = " + comp2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponent1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponent1.java deleted file mode 100644 index c23f98ae0159..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponent1.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.Embedded; - -/** - * @author Erik-Berndt Scheper - */ -public class DefaultValueComponent1 { - - private String str1; - - @Embedded - private DefaultValueComponent2 comp2 = new DefaultValueComponent2(); - - public static final DefaultValueComponent1 of( - String str1, - DefaultValueComponent2 comp2) { - DefaultValueComponent1 instance = new DefaultValueComponent1(); - instance.setStr1( str1 ); - instance.setComp2( comp2 ); - return instance; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public DefaultValueComponent2 getComp2() { - return comp2; - } - - public void setComp2(DefaultValueComponent2 comp2) { - this.comp2 = comp2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DefaultValueComponent1) ) { - return false; - } - - DefaultValueComponent1 that = (DefaultValueComponent1) o; - - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - if ( comp2 != null ? !comp2.equals( that.comp2 ) : that.comp2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (comp2 != null ? comp2.hashCode() : 0); - return result; - } - - public String toString() { - return "Comp1(str1 = " + str1 + ", comp2 = " + comp2 + ")"; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponent2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponent2.java deleted file mode 100644 index 532a3bc3fabe..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponent2.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - - -/** - * @author Erik-Berndt Scheper - */ -public class DefaultValueComponent2 { - - private String str1 = "defaultValue"; - - private String str2; - - public static final DefaultValueComponent2 of(String str1, String str2) { - DefaultValueComponent2 instance = new DefaultValueComponent2(); - instance.setStr1( str1 ); - instance.setStr2( str2 ); - return instance; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DefaultValueComponent2) ) { - return false; - } - - DefaultValueComponent2 that = (DefaultValueComponent2) o; - - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - public String toString() { - return "Comp2(str1 = " + str1 + ", str2 = " + str2 + ")"; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponentTestEntity.java deleted file mode 100644 index 44c9b76bdc8c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/DefaultValueComponentTestEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.AttributeOverrides; -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Erik-Berndt Scheper - */ -@Entity -@Table(name = "DefaultValueComponent") -@Audited -public class DefaultValueComponentTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Embedded - @Audited - @AttributeOverrides({@AttributeOverride(name = "comp2.str1", column = @Column(name = "COMP2_STR1"))}) - private DefaultValueComponent1 comp1 = null; - - public DefaultValueComponentTestEntity() { - } - - public static DefaultValueComponentTestEntity of( - DefaultValueComponent1 comp1) { - DefaultValueComponentTestEntity instance = new DefaultValueComponentTestEntity(); - instance.setComp1( comp1 ); - return instance; - } - - public static DefaultValueComponentTestEntity of( - Integer id, - DefaultValueComponent1 comp1) { - DefaultValueComponentTestEntity instance = new DefaultValueComponentTestEntity(); - instance.setId( id ); - instance.setComp1( comp1 ); - return instance; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public DefaultValueComponent1 getComp1() { - return comp1; - } - - public void setComp1(DefaultValueComponent1 comp1) { - this.comp1 = comp1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DefaultValueComponentTestEntity) ) { - return false; - } - - DefaultValueComponentTestEntity that = (DefaultValueComponentTestEntity) o; - - if ( comp1 != null ? !comp1.equals( that.comp1 ) : that.comp1 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (comp1 != null ? comp1.hashCode() : 0); - return result; - } - - public String toString() { - return "CTE(id = " + id + ", comp1 = " + comp1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/UniquePropsEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/UniquePropsEntity.java deleted file mode 100644 index 8ec7587daade..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/UniquePropsEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import java.io.Serializable; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -public class UniquePropsEntity implements Serializable { - private Long id; - private String data1; - private String data2; - - public UniquePropsEntity() { - } - - public UniquePropsEntity(Long id, String data1, String data2) { - this.id = id; - this.data1 = data1; - this.data2 = data2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - UniquePropsEntity that = (UniquePropsEntity) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } - - public String toString() { - return "UniquePropsEntity(id = " + id + ", data1 = " + data1 + ", data2 = " + data2 + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/UniquePropsNotAuditedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/UniquePropsNotAuditedEntity.java deleted file mode 100644 index e616fdde0183..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/UniquePropsNotAuditedEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -public class UniquePropsNotAuditedEntity { - private Long id; - private String data1; - private String data2; - - public UniquePropsNotAuditedEntity() { - } - - public UniquePropsNotAuditedEntity(Long id, String data1, String data2) { - this.id = id; - this.data1 = data1; - this.data2 = data2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - UniquePropsNotAuditedEntity that = (UniquePropsNotAuditedEntity) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } - - public String toString() { - return "UniquePropsNotAuditedEntity(id = " + id + ", data1 = " + data1 + ", data2 = " + data2 + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - @NotAudited - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneComponent.java deleted file mode 100644 index 3c2eed1d6aa0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneComponent.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -@Table(name = "ManyToOneCompEmb") -public class ManyToOneComponent { - @ManyToOne - private StrTestEntity entity; - - private String data; - - public ManyToOneComponent(StrTestEntity entity, String data) { - this.entity = entity; - this.data = data; - } - - public ManyToOneComponent() { - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public StrTestEntity getEntity() { - return entity; - } - - public void setEntity(StrTestEntity entity) { - this.entity = entity; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - ManyToOneComponent that = (ManyToOneComponent) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( entity != null ? !entity.equals( that.entity ) : that.entity != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = entity != null ? entity.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ManyToOneComponent(str1 = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneComponentTestEntity.java deleted file mode 100644 index 11db7b74fe9b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneComponentTestEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ManyToOneCompEnt") -public class ManyToOneComponentTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Embedded - @Audited - private ManyToOneComponent comp1; - - public ManyToOneComponentTestEntity() { - } - - public ManyToOneComponentTestEntity(Integer id, ManyToOneComponent comp1) { - this.id = id; - this.comp1 = comp1; - } - - public ManyToOneComponentTestEntity(ManyToOneComponent comp1) { - this.comp1 = comp1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public ManyToOneComponent getComp1() { - return comp1; - } - - public void setComp1(ManyToOneComponent comp1) { - this.comp1 = comp1; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - ManyToOneComponentTestEntity that = (ManyToOneComponentTestEntity) o; - - if ( comp1 != null ? !comp1.equals( that.comp1 ) : that.comp1 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (comp1 != null ? comp1.hashCode() : 0); - return result; - } - - public String toString() { - return "MTOCTE(id = " + id + ", comp1 = " + comp1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneEagerComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneEagerComponent.java deleted file mode 100644 index 6bbdb36f2319..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/ManyToOneEagerComponent.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.FetchType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestNoProxyEntity; - -/** - * Do not mark as {@link Audited}. Should be implicitly treated as audited when part of audited entity. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Embeddable -@Table(name = "ManyToOneEagerComp") -public class ManyToOneEagerComponent { - @ManyToOne(fetch = FetchType.EAGER) - private StrTestNoProxyEntity entity; - - private String data; - - public ManyToOneEagerComponent(StrTestNoProxyEntity entity, String data) { - this.entity = entity; - this.data = data; - } - - public ManyToOneEagerComponent() { - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public StrTestNoProxyEntity getEntity() { - return entity; - } - - public void setEntity(StrTestNoProxyEntity entity) { - this.entity = entity; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ManyToOneEagerComponent) ) { - return false; - } - - ManyToOneEagerComponent that = (ManyToOneEagerComponent) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( entity != null ? !entity.equals( that.entity ) : that.entity != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = entity != null ? entity.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ManyToOneEagerComponent(data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/NotAuditedManyToOneComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/NotAuditedManyToOneComponent.java deleted file mode 100644 index 6c4e95a7c4c5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/NotAuditedManyToOneComponent.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -@Table(name = "NotAudM2OCompEmb") -public class NotAuditedManyToOneComponent { - @ManyToOne - @NotAudited - private UnversionedStrTestEntity entity; - - private String data; - - public NotAuditedManyToOneComponent(UnversionedStrTestEntity entity, String data) { - this.entity = entity; - this.data = data; - } - - public NotAuditedManyToOneComponent() { - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public UnversionedStrTestEntity getEntity() { - return entity; - } - - public void setEntity(UnversionedStrTestEntity entity) { - this.entity = entity; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - NotAuditedManyToOneComponent that = (NotAuditedManyToOneComponent) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( entity != null ? !entity.equals( that.entity ) : that.entity != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = entity != null ? entity.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "NotAuditedManyToOneComponent(str1 = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java deleted file mode 100644 index 8b3479e799e9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/NotAuditedManyToOneComponentTestEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "NotAudM2OCompEnt") -public class NotAuditedManyToOneComponentTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Embedded - @Audited - private NotAuditedManyToOneComponent comp1; - - public NotAuditedManyToOneComponentTestEntity() { - } - - public NotAuditedManyToOneComponentTestEntity(Integer id, NotAuditedManyToOneComponent comp1) { - this.id = id; - this.comp1 = comp1; - } - - public NotAuditedManyToOneComponentTestEntity(NotAuditedManyToOneComponent comp1) { - this.comp1 = comp1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public NotAuditedManyToOneComponent getComp1() { - return comp1; - } - - public void setComp1(NotAuditedManyToOneComponent comp1) { - this.comp1 = comp1; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - NotAuditedManyToOneComponentTestEntity that = (NotAuditedManyToOneComponentTestEntity) o; - - if ( comp1 != null ? !comp1.equals( that.comp1 ) : that.comp1 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (comp1 != null ? comp1.hashCode() : 0); - return result; - } - - public String toString() { - return "NAMTOCTE(id = " + id + ", comp1 = " + comp1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/OneToManyComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/OneToManyComponent.java deleted file mode 100644 index 40f43ced4a4b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/OneToManyComponent.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Embeddable; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class OneToManyComponent { - @OneToMany - @JoinTable(joinColumns = @JoinColumn(name = "OneToMany_id")) - private Set entities = new HashSet(); - - private String data; - - public OneToManyComponent(String data) { - this.data = data; - } - - public OneToManyComponent() { - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getEntities() { - return entities; - } - - public void setEntities(Set entities) { - this.entities = entities; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - OneToManyComponent that = (OneToManyComponent) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( entities != null ? !entities.equals( that.entities ) : that.entities != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = entities != null ? entities.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "OneToManyComponent(data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/OneToManyComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/OneToManyComponentTestEntity.java deleted file mode 100644 index 86ee934208ec..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/components/relations/OneToManyComponentTestEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.components.relations; - -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "OneToManyComp") -public class OneToManyComponentTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Embedded - @Audited - private OneToManyComponent comp1; - - public OneToManyComponentTestEntity() { - } - - public OneToManyComponentTestEntity(Integer id, OneToManyComponent comp1) { - this.id = id; - this.comp1 = comp1; - } - - public OneToManyComponentTestEntity(OneToManyComponent comp1) { - this.comp1 = comp1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public OneToManyComponent getComp1() { - return comp1; - } - - public void setComp1(OneToManyComponent comp1) { - this.comp1 = comp1; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - OneToManyComponentTestEntity that = (OneToManyComponentTestEntity) o; - - if ( comp1 != null ? !comp1.equals( that.comp1 ) : that.comp1 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (comp1 != null ? comp1.hashCode() : 0); - return result; - } - - public String toString() { - return "OTMCTE(id = " + id + ", comp1 = " + comp1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java deleted file mode 100644 index 54445f2bc37b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.converter; - -import org.hibernate.boot.Metadata; -import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.registry.StandardServiceRegistry; -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.AbstractEnversTest; -import org.hibernate.mapping.PersistentClass; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -/** - * @author Steve Ebersole - */ -public class BasicModelingTest extends AbstractEnversTest { - @Test - @JiraKey( value = "HHH-9042" ) - public void testMetamodelBuilding() { - StandardServiceRegistry ssr = ServiceRegistryUtil.serviceRegistryBuilder() - .applySetting( AvailableSettings.HBM2DDL_AUTO, "create-drop" ) - .build(); - try { - Metadata metadata = new MetadataSources( ssr ) - .addAnnotatedClass( Person.class ) - .getMetadataBuilder() - .applyAttributeConverter( SexConverter.class ) - .build(); - - ( (MetadataImplementor) metadata ).orderColumns( false ); - ( (MetadataImplementor) metadata ).validate(); - - PersistentClass personBinding = metadata.getEntityBinding( Person.class.getName() ); - assertNotNull( personBinding ); - - PersistentClass personAuditBinding = metadata.getEntityBinding( Person.class.getName() + "_AUD" ); - assertNotNull( personAuditBinding ); - } - finally { - StandardServiceRegistryBuilder.destroy( ssr ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/Person.java deleted file mode 100644 index d53d59246194..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/Person.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.converter; - -import jakarta.persistence.Convert; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.envers.Audited; - -/** - * @author Steve Ebersole - */ -@Entity -@Audited -public class Person { - @Id - @GeneratedValue( generator = "increment" ) - @GenericGenerator( name = "increment", strategy="increment" ) - private Long id; - - @Convert(converter = SexConverter.class) - private Sex sex; -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/Sex.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/Sex.java deleted file mode 100644 index 7ce9540a4960..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/Sex.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.converter; - -/** - * @author Steve Ebersole - */ -public enum Sex { - MALE, - FEMALE; -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/SexConverter.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/SexConverter.java deleted file mode 100644 index a23684cfd1ab..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/SexConverter.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.converter; - -import jakarta.persistence.AttributeConverter; - -/** - * @author Steve Ebersole - */ -public class SexConverter implements AttributeConverter { - - @Override - public String convertToDatabaseColumn(Sex attribute) { - if (attribute == null) { - return null; - } - - switch (attribute) { - case MALE: { - return "M"; - } - case FEMALE: { - return "F"; - } - default: { - throw new IllegalArgumentException( "Unexpected Sex model value [" + attribute + "]" ); - } - } - } - - @Override - public Sex convertToEntityAttribute(String dbData) { - if (dbData == null) { - return null; - } - - if ( "M".equals( dbData ) ) { - return Sex.MALE; - } - else if ( "F".equals( dbData ) ) { - return Sex.FEMALE; - } - - throw new IllegalArgumentException( "Unexpected Sex db value [" + dbData + "]" ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/Component.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/Component.java deleted file mode 100644 index 150a40e039da..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/Component.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.customtype; - -import java.io.Serializable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Component implements Serializable { - private String prop1; - private int prop2; - - public Component(String prop1, int prop2) { - this.prop1 = prop1; - this.prop2 = prop2; - } - - public Component() { - } - - public String getProp1() { - return prop1; - } - - public void setProp1(String prop1) { - this.prop1 = prop1; - } - - public int getProp2() { - return prop2; - } - - public void setProp2(int prop2) { - this.prop2 = prop2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Component) ) { - return false; - } - - Component that = (Component) o; - - if ( prop2 != that.prop2 ) { - return false; - } - if ( prop1 != null ? !prop1.equals( that.prop1 ) : that.prop1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (prop1 != null ? prop1.hashCode() : 0); - result = 31 * result + prop2; - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/EnumTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/EnumTypeEntity.java deleted file mode 100644 index 7a8d4cfdf38d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/EnumTypeEntity.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.customtype; - -import jakarta.persistence.ColumnResult; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.SqlResultSetMapping; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -@SqlResultSetMapping( - name = "e1_e2", - columns = { - @ColumnResult( name = "enum1", type = String.class ), - @ColumnResult( name = "enum2", type = Integer.class ) - } -) -public class EnumTypeEntity { - public static enum E1 {X, Y} - - public static enum E2 {A, B} - - @Id - @GeneratedValue - private Long id; - - @Enumerated(EnumType.STRING) - private E1 enum1; - - @Enumerated(EnumType.ORDINAL) - private E2 enum2; - - public EnumTypeEntity() { - } - - public EnumTypeEntity(E1 enum1, E2 enum2) { - this.enum1 = enum1; - this.enum2 = enum2; - } - - public EnumTypeEntity(E1 enum1, E2 enum2, Long id) { - this.enum1 = enum1; - this.enum2 = enum2; - this.id = id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EnumTypeEntity) ) { - return false; - } - - EnumTypeEntity that = (EnumTypeEntity) o; - - if ( enum1 != that.enum1 ) { - return false; - } - if ( enum2 != that.enum2 ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (enum1 != null ? enum1.hashCode() : 0); - result = 31 * result + (enum2 != null ? enum2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "EnumTypeEntity(id = " + id + ", enum1 = " + enum1 + ", enum2 = " + enum2 + ")"; - } - - public E1 getEnum1() { - return enum1; - } - - public void setEnum1(E1 enum1) { - this.enum1 = enum1; - } - - public E2 getEnum2() { - return enum2; - } - - public void setEnum2(E2 enum2) { - this.enum2 = enum2; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/ParametrizedCustomTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/ParametrizedCustomTypeEntity.java deleted file mode 100644 index 355240832f4d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/ParametrizedCustomTypeEntity.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.customtype; - -import org.hibernate.annotations.Type; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.Audited; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ParamCustType") -public class ParametrizedCustomTypeEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @Type( - value = ParametrizedTestUserType.class, - parameters = { - @Parameter(name = "param1", value = "x"), - @Parameter(name = "param2", value = "y") - } - ) - private String str; - - public ParametrizedCustomTypeEntity() { - } - - public ParametrizedCustomTypeEntity(Integer id, String str) { - this.id = id; - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParametrizedCustomTypeEntity) ) { - return false; - } - - ParametrizedCustomTypeEntity that = (ParametrizedCustomTypeEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } - - public String toString() { - return "PCTE(id = " + id + ", str = " + str + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/ParametrizedTestUserType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/ParametrizedTestUserType.java deleted file mode 100644 index f339df9d61b2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/ParametrizedTestUserType.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.customtype; - -import java.io.Serializable; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.Properties; - -import org.hibernate.HibernateException; -import org.hibernate.type.descriptor.WrapperOptions; -import org.hibernate.type.descriptor.java.StringJavaType; -import org.hibernate.type.descriptor.jdbc.VarcharJdbcType; -import org.hibernate.usertype.ParameterizedType; -import org.hibernate.usertype.UserType; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ParametrizedTestUserType implements UserType, ParameterizedType { - - private String param1; - private String param2; - - public void setParameterValues(Properties parameters) { - param1 = parameters.getProperty( "param1" ); - param2 = parameters.getProperty( "param2" ); - } - - public Class returnedClass() { - return String.class; - } - - @Override - public String nullSafeGet(ResultSet rs, int position, WrapperOptions options) - throws SQLException { - final String string = rs.getString( position ); - return rs.wasNull() ? null : string; - } - - public void nullSafeSet(PreparedStatement st, String value, int index, WrapperOptions options) - throws SQLException { - if ( value != null ) { - if ( !value.startsWith( param1 ) ) { - value = param1 + value; - } - if ( !value.endsWith( param2 ) ) { - value = value + param2; - } - } - VarcharJdbcType.INSTANCE.getBinder( StringJavaType.INSTANCE ) - .bind( st, value, index, options ); - } - - @Override - public int getSqlType() { - return Types.VARCHAR; - } - - public String assemble(Serializable cached, Object owner) throws HibernateException { - return (String) cached; - } - - public String deepCopy(String value) throws HibernateException { - return value; - } - - public Serializable disassemble(String value) throws HibernateException { - return value; - } - - public boolean equals(String x, String y) throws HibernateException { - //noinspection ObjectEquality - if ( x == y ) { - return true; - } - - if ( x == null || y == null ) { - return false; - } - - return x.equals( y ); - } - - public int hashCode(String x) throws HibernateException { - return x.hashCode(); - } - - public boolean isMutable() { - return false; - } - - public String replace(String original, String target, Object owner) throws HibernateException { - return original; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/UnspecifiedEnumTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/UnspecifiedEnumTypeEntity.java deleted file mode 100644 index 189596d3c0d4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/customtype/UnspecifiedEnumTypeEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.customtype; - -import java.io.Serializable; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -public class UnspecifiedEnumTypeEntity implements Serializable { - public static enum E1 {X, Y} - - public static enum E2 {A, B} - - private Long id; - - private E1 enum1; - - private E2 enum2; - - public UnspecifiedEnumTypeEntity() { - } - - public UnspecifiedEnumTypeEntity(E1 enum1, E2 enum2) { - this.enum1 = enum1; - this.enum2 = enum2; - } - - public UnspecifiedEnumTypeEntity(E1 enum1, E2 enum2, Long id) { - this.enum1 = enum1; - this.enum2 = enum2; - this.id = id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UnspecifiedEnumTypeEntity) ) { - return false; - } - - UnspecifiedEnumTypeEntity that = (UnspecifiedEnumTypeEntity) o; - - if ( enum1 != that.enum1 ) { - return false; - } - if ( enum2 != that.enum2 ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (enum1 != null ? enum1.hashCode() : 0); - result = 31 * result + (enum2 != null ? enum2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "UnspecifiedEnumTypeEntity(id = " + id + ", enum1 = " + enum1 + ", enum2 = " + enum2 + ")"; - } - - public E1 getEnum1() { - return enum1; - } - - public void setEnum1(E1 enum1) { - this.enum1 = enum1; - } - - public E2 getEnum2() { - return enum2; - } - - public void setEnum2(E2 enum2) { - this.enum2 = enum2; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CompositeDateIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CompositeDateIdTestEntity.java deleted file mode 100644 index 22bf22a34312..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CompositeDateIdTestEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class CompositeDateIdTestEntity { - @EmbeddedId - private DateEmbId id; - - @Audited - private String str1; - - public CompositeDateIdTestEntity() { - } - - public CompositeDateIdTestEntity(String str1) { - this.str1 = str1; - } - - public CompositeDateIdTestEntity(DateEmbId id, String str1) { - this.id = id; - this.str1 = str1; - } - - public DateEmbId getId() { - return id; - } - - public void setId(DateEmbId id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - CompositeDateIdTestEntity that = (CompositeDateIdTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CustomEnum.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CustomEnum.java deleted file mode 100644 index 6fdce2ff0b64..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CustomEnum.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - - -/** - * @author Slawek Garwol (slawekgarwol at gmail dot com) - */ -public enum CustomEnum { - YES, - NO; - - public String toYesNo() { - return this == YES ? "Y" : "N"; - } - - public static CustomEnum fromYesNo(String value) { - return "Y".equals( value ) ? YES : NO; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CustomEnumUserType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CustomEnumUserType.java deleted file mode 100644 index b998df05a9ab..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/CustomEnumUserType.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; - -import org.hibernate.HibernateException; -import org.hibernate.type.descriptor.WrapperOptions; -import org.hibernate.usertype.UserType; - -/** - * @author Slawek Garwol (slawekgarwol at gmail dot com) - */ -public class CustomEnumUserType implements UserType { - - @Override - public int getSqlType() { - return Types.VARCHAR; - } - - public Class returnedClass() { - return CustomEnum.class; - } - - public boolean equals(CustomEnum x, CustomEnum y) throws HibernateException { - if ( x == y ) { - return true; - } - if ( (x == null) || (y == null) ) { - return false; - } - return x.equals( y ); - } - - public int hashCode(CustomEnum x) throws HibernateException { - return (x == null) ? 0 : x.hashCode(); - } - - @Override - public CustomEnum nullSafeGet(ResultSet rs, int position, WrapperOptions options) - throws SQLException { - String name = rs.getString( position ); - if ( rs.wasNull() ) { - return null; - } - return CustomEnum.fromYesNo( name ); - } - - public void nullSafeSet(PreparedStatement st, CustomEnum value, int index, WrapperOptions options) - throws SQLException { - if ( value == null ) { - st.setNull( index, Types.VARCHAR ); - } - else { - st.setString( index, value.toYesNo() ); - } - } - - public CustomEnum deepCopy(CustomEnum value) throws HibernateException { - return value; - } - - public boolean isMutable() { - return false; - } - - public Serializable disassemble(CustomEnum value) throws HibernateException { - return value; - } - - public CustomEnum assemble(Serializable cached, Object owner) throws HibernateException { - return (CustomEnum) cached; - } - - public CustomEnum replace(CustomEnum original, CustomEnum target, Object owner) throws HibernateException { - return original; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/DateEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/DateEmbId.java deleted file mode 100644 index 508e79ad1824..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/DateEmbId.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; -import java.util.Date; -import jakarta.persistence.Embeddable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class DateEmbId implements Serializable { - private Date x; - private Date y; - - public DateEmbId() { - } - - public DateEmbId(Date x, Date y) { - this.x = x; - this.y = y; - } - - public Date getX() { - return x; - } - - public void setX(Date x) { - this.x = x; - } - - public Date getY() { - return y; - } - - public void setY(Date y) { - this.y = y; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DateEmbId) ) { - return false; - } - - DateEmbId embId = (DateEmbId) o; - - if ( x != null ? !x.equals( embId.x ) : embId.x != null ) { - return false; - } - if ( y != null ? !y.equals( embId.y ) : embId.y != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (x != null ? x.hashCode() : 0); - result = 31 * result + (y != null ? y.hashCode() : 0); - return result; - } - - public String toString() { - return "DateEmbId(" + x + ", " + y + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/DateIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/DateIdTestEntity.java deleted file mode 100644 index 7290fefddd9c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/DateIdTestEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.util.Date; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class DateIdTestEntity { - @Id - private Date id; - - @Audited - private String str1; - - public DateIdTestEntity() { - } - - public DateIdTestEntity(String str1) { - this.str1 = str1; - } - - public DateIdTestEntity(Date id, String str1) { - this.id = id; - this.str1 = str1; - } - - public Date getId() { - return id; - } - - public void setId(Date id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - DateIdTestEntity that = (DateIdTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbId.java deleted file mode 100644 index 5be468019ec3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbId.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; -import jakarta.persistence.Embeddable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class EmbId implements Serializable { - private Integer x; - private Integer y; - - public EmbId() { - } - - public EmbId(Integer x, Integer y) { - this.x = x; - this.y = y; - } - - public Integer getX() { - return x; - } - - public void setX(Integer x) { - this.x = x; - } - - public Integer getY() { - return y; - } - - public void setY(Integer y) { - this.y = y; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbId) ) { - return false; - } - - EmbId embId = (EmbId) o; - - if ( x != null ? !x.equals( embId.x ) : embId.x != null ) { - return false; - } - if ( y != null ? !y.equals( embId.y ) : embId.y != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (x != null ? x.hashCode() : 0); - result = 31 * result + (y != null ? y.hashCode() : 0); - return result; - } - - public String toString() { - return "EmbId(" + x + ", " + y + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdTestEntity.java deleted file mode 100644 index 8c733e74973f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdTestEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "EmbIdEnt") -public class EmbIdTestEntity { - @EmbeddedId - private EmbId id; - - @Audited - private String str1; - - public EmbIdTestEntity() { - } - - public EmbIdTestEntity(String str1) { - this.str1 = str1; - } - - public EmbIdTestEntity(EmbId id, String str1) { - this.id = id; - this.str1 = str1; - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbIdTestEntity) ) { - return false; - } - - EmbIdTestEntity that = (EmbIdTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdWithCustomType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdWithCustomType.java deleted file mode 100644 index 1709e0eda206..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdWithCustomType.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; - -import org.hibernate.annotations.Type; - -import jakarta.persistence.Embeddable; - -/** - * @author Slawek Garwol (slawekgarwol at gmail dot com) - */ -@Embeddable -public class EmbIdWithCustomType implements Serializable { - private Integer x; - - @Type(CustomEnumUserType.class) - private CustomEnum customEnum; - - public EmbIdWithCustomType() { - } - - public EmbIdWithCustomType(Integer x, CustomEnum customEnum) { - this.x = x; - this.customEnum = customEnum; - } - - public Integer getX() { - return x; - } - - public void setX(Integer x) { - this.x = x; - } - - public CustomEnum getCustomEnum() { - return customEnum; - } - - public void setCustomEnum(CustomEnum customEnum) { - this.customEnum = customEnum; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !(obj instanceof EmbIdWithCustomType) ) { - return false; - } - - EmbIdWithCustomType that = (EmbIdWithCustomType) obj; - - if ( x != null ? !x.equals( that.x ) : that.x != null ) { - return false; - } - if ( customEnum != that.customEnum ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result; - result = (x != null ? x.hashCode() : 0); - result = 31 * result + (customEnum != null ? customEnum.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdWithCustomTypeTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdWithCustomTypeTestEntity.java deleted file mode 100644 index e9aa5bd02a4b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/EmbIdWithCustomTypeTestEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Slawek Garwol (slawekgarwol at gmail dot com) - */ -@Entity -@Table(name = "EmbIdWithCustType") -public class EmbIdWithCustomTypeTestEntity { - @EmbeddedId - private EmbIdWithCustomType id; - - @Audited - private String str1; - - public EmbIdWithCustomTypeTestEntity() { - } - - public EmbIdWithCustomTypeTestEntity(EmbIdWithCustomType id, String str1) { - this.id = id; - this.str1 = str1; - } - - public EmbIdWithCustomType getId() { - return id; - } - - public void setId(EmbIdWithCustomType id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !(obj instanceof EmbIdWithCustomTypeTestEntity) ) { - return false; - } - - EmbIdWithCustomTypeTestEntity that = (EmbIdWithCustomTypeTestEntity) obj; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/ManyToOneIdNotAuditedTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/ManyToOneIdNotAuditedTestEntity.java deleted file mode 100644 index e14e25f53c76..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/ManyToOneIdNotAuditedTestEntity.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ManyToOneIdNotAud") -public class ManyToOneIdNotAuditedTestEntity implements Serializable { - @EmbeddedId - private ManyToOneNotAuditedEmbId id; - - private String data; - - public ManyToOneIdNotAuditedTestEntity() { - } - - public ManyToOneNotAuditedEmbId getId() { - return id; - } - - public void setId(ManyToOneNotAuditedEmbId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - ManyToOneIdNotAuditedTestEntity that = (ManyToOneIdNotAuditedTestEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/ManyToOneNotAuditedEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/ManyToOneNotAuditedEmbId.java deleted file mode 100644 index ad3b28eaed2a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/ManyToOneNotAuditedEmbId.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; -import jakarta.persistence.Embeddable; -import jakarta.persistence.ManyToOne; - -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class ManyToOneNotAuditedEmbId implements Serializable { - @ManyToOne(optional = false) - private UnversionedStrTestEntity id; - - public ManyToOneNotAuditedEmbId() { - } - - public ManyToOneNotAuditedEmbId(UnversionedStrTestEntity id) { - this.id = id; - } - - public UnversionedStrTestEntity getId() { - return id; - } - - public void setId(UnversionedStrTestEntity id) { - this.id = id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - ManyToOneNotAuditedEmbId that = (ManyToOneNotAuditedEmbId) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/MulId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/MulId.java deleted file mode 100644 index 9c2f440903aa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/MulId.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MulId implements Serializable { - private Integer id1; - - private Integer id2; - - public MulId() { - } - - public MulId(Integer id1, Integer id2) { - this.id1 = id1; - this.id2 = id2; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MulId) ) { - return false; - } - - MulId mulId = (MulId) o; - - if ( id1 != null ? !id1.equals( mulId.id1 ) : mulId.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( mulId.id2 ) : mulId.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - return result; - } - - public String toString() { - return "MulId(" + id1 + ", " + id2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/MulIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/MulIdTestEntity.java deleted file mode 100644 index ccb059746677..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/MulIdTestEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "MulId") -@IdClass(MulId.class) -public class MulIdTestEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String str1; - - public MulIdTestEntity() { - } - - public MulIdTestEntity(String str1) { - this.str1 = str1; - } - - public MulIdTestEntity(Integer id1, Integer id2, String str1) { - this.id1 = id1; - this.id2 = id2; - this.str1 = str1; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MulIdTestEntity) ) { - return false; - } - - MulIdTestEntity that = (MulIdTestEntity) o; - - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/UnusualIdNamingEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/UnusualIdNamingEntity.java deleted file mode 100644 index 3c81f58870df..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/ids/UnusualIdNamingEntity.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.ids; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class UnusualIdNamingEntity implements Serializable { - @Id - private String uniqueField; - - private String variousData; - - public UnusualIdNamingEntity() { - } - - public UnusualIdNamingEntity(String uniqueField, String variousData) { - this.uniqueField = uniqueField; - this.variousData = variousData; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UnusualIdNamingEntity) ) { - return false; - } - - UnusualIdNamingEntity that = (UnusualIdNamingEntity) o; - - if ( uniqueField != null ? !uniqueField.equals( that.uniqueField ) : that.uniqueField != null ) { - return false; - } - if ( variousData != null ? !variousData.equals( that.variousData ) : that.variousData != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = uniqueField != null ? uniqueField.hashCode() : 0; - result = 31 * result + (variousData != null ? variousData.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "UnusualIdNamingEntity(uniqueField = " + uniqueField + ", variousData = " + variousData + ")"; - } - - public String getUniqueField() { - return uniqueField; - } - - public void setUniqueField(String uniqueField) { - this.uniqueField = uniqueField; - } - - public String getVariousData() { - return variousData; - } - - public void setVariousData(String variousData) { - this.variousData = variousData; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/ListOwnedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/ListOwnedEntity.java deleted file mode 100644 index c8d104bd6e6f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/ListOwnedEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Many-to-many not-owning entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ListOwned") -public class ListOwnedEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany(mappedBy = "references") - private List referencing; - - public ListOwnedEntity() { - } - - public ListOwnedEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListOwnedEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferencing() { - return referencing; - } - - public void setReferencing(List referencing) { - this.referencing = referencing; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListOwnedEntity) ) { - return false; - } - - ListOwnedEntity that = (ListOwnedEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListOwnedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/ListOwningEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/ListOwningEntity.java deleted file mode 100644 index 9c189a289a2a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/ListOwningEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity owning the many-to-many relation - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ListOwning") -public class ListOwningEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - private List references; - - public ListOwningEntity() { - } - - public ListOwningEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListOwningEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListOwningEntity) ) { - return false; - } - - ListOwningEntity that = (ListOwningEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetOwningEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/MapOwnedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/MapOwnedEntity.java deleted file mode 100644 index c544cba17294..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/MapOwnedEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Many-to-many not-owning entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "MapOwned") -public class MapOwnedEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany(mappedBy = "references") - private Set referencing; - - public MapOwnedEntity() { - } - - public MapOwnedEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public MapOwnedEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MapOwnedEntity) ) { - return false; - } - - MapOwnedEntity that = (MapOwnedEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "MapOwnedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/MapOwningEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/MapOwningEntity.java deleted file mode 100644 index 7d144edfe34c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/MapOwningEntity.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.MapKeyColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity owning the many-to-many relation - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "MapOwning") -public class MapOwningEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - @MapKeyColumn(nullable = false) - private Map references = new HashMap(); - - public MapOwningEntity() { - } - - public MapOwningEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public MapOwningEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Map getReferences() { - return references; - } - - public void setReferences(Map references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MapOwningEntity) ) { - return false; - } - - MapOwningEntity that = (MapOwningEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "MapOwningEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SetOwnedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SetOwnedEntity.java deleted file mode 100644 index 33b84a7eb4ab..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SetOwnedEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Many-to-many not-owning entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "SetOwned") -public class SetOwnedEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany(mappedBy = "references") - private Set referencing; - - public SetOwnedEntity() { - } - - public SetOwnedEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetOwnedEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetOwnedEntity) ) { - return false; - } - - SetOwnedEntity that = (SetOwnedEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetOwnedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SetOwningEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SetOwningEntity.java deleted file mode 100644 index ba0956d0416b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SetOwningEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity owning the many-to-many relation - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "SetOwning") -public class SetOwningEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - private Set references; - - public SetOwningEntity() { - } - - public SetOwningEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetOwningEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReferences() { - return references; - } - - public void setReferences(Set references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetOwningEntity) ) { - return false; - } - - SetOwningEntity that = (SetOwningEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetOwningEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SortedSetEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SortedSetEntity.java deleted file mode 100644 index e3adeb550e99..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/SortedSetEntity.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.SortedMap; -import java.util.SortedSet; -import java.util.TreeMap; -import java.util.TreeSet; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.MapKeyJoinColumn; - -import org.hibernate.annotations.SortComparator; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntityComparator; - -/** - * Entity with custom-ordered SortedSet and SortedMap - * - * @author Michal Skowronek (mskowr at o2 pl) - */ -@Entity -public class SortedSetEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - @SortComparator(StrTestEntityComparator.class) - private SortedSet sortedSet = new TreeSet( StrTestEntityComparator.INSTANCE ); - @Audited - @ElementCollection - @MapKeyJoinColumn - @SortComparator(StrTestEntityComparator.class) - private SortedMap sortedMap = new TreeMap( StrTestEntityComparator.INSTANCE ); - - public SortedSetEntity() { - } - - public SortedSetEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SortedSetEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public SortedSet getSortedSet() { - return sortedSet; - } - - public void setSortedSet(SortedSet sortedSet) { - this.sortedSet = sortedSet; - } - - public SortedMap getSortedMap() { - return sortedMap; - } - - public void setSortedMap(SortedMap sortedMap) { - this.sortedMap = sortedMap; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SortedSetEntity) ) { - return false; - } - - SortedSetEntity that = (SortedSetEntity) o; - - return !(data != null ? !data.equals( that.data ) : that.data != null) && !(id != null ? - !id.equals( that.id ) : - that.id != null); - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetOwnedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/WhereJoinTableEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/WhereJoinTableEntity.java deleted file mode 100644 index 20e2c371247b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/WhereJoinTableEntity.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class WhereJoinTableEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @ManyToMany - @JoinTable( - name = "wjte_ite_join", - joinColumns = @JoinColumn(name = "wjte_id"), - inverseJoinColumns = @JoinColumn(name = "ite_id") - ) - @SQLJoinTableRestriction("ite_id < 20") - private List references1; - - @ManyToMany - @JoinTable( - name = "wjte_ite_join", - joinColumns = @JoinColumn(name = "wjte_id"), - inverseJoinColumns = @JoinColumn(name = "ite_id") - ) - @SQLJoinTableRestriction("ite_id >= 20") - private List references2; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences1() { - return references1; - } - - public void setReferences1(List references1) { - this.references1 = references1; - } - - public List getReferences2() { - return references2; - } - - public void setReferences2(List references2) { - this.references2 = references2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - WhereJoinTableEntity that = (WhereJoinTableEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "WJTE(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/biowned/ListBiowning1Entity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/biowned/ListBiowning1Entity.java deleted file mode 100644 index a592d04f883c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/biowned/ListBiowning1Entity.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.biowned; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; - -/** - * Entity owning a many-to-many relation, where the other entity also owns the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ListBiowning1Entity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @ManyToMany - @JoinTable( - name = "biowning", - joinColumns = @JoinColumn(name = "biowning1_id"), - inverseJoinColumns = @JoinColumn(name = "biowning2_id", insertable = false, updatable = false) - ) - private List references = new ArrayList(); - - public ListBiowning1Entity() { - } - - public ListBiowning1Entity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListBiowning1Entity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListBiowning1Entity) ) { - return false; - } - - ListBiowning1Entity that = (ListBiowning1Entity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListBiowning1Entity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/biowned/ListBiowning2Entity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/biowned/ListBiowning2Entity.java deleted file mode 100644 index da4748fd6f41..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/biowned/ListBiowning2Entity.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.biowned; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; - -/** - * Entity owning a many-to-many relation, where the other entity also owns the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ListBiowning2Entity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @ManyToMany - @JoinTable( - name = "biowning", - joinColumns = @JoinColumn(name = "biowning2_id"), - inverseJoinColumns = @JoinColumn(name = "biowning1_id", insertable = false, updatable = false) - ) - private List references = new ArrayList(); - - public ListBiowning2Entity() { - } - - public ListBiowning2Entity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListBiowning2Entity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListBiowning2Entity) ) { - return false; - } - - ListBiowning2Entity that = (ListBiowning2Entity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListBiowning2Entity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/Child1Entity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/Child1Entity.java deleted file mode 100644 index a55a8eaa6973..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/Child1Entity.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.sametable; - -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.envers.Audited; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class Child1Entity { - @Id - @GeneratedValue - private Integer id; - - private String child1Data; - - public Child1Entity() { - } - - public Child1Entity(String child1Data) { - this.child1Data = child1Data; - } - - public Child1Entity(String child1Data, Integer id) { - this.child1Data = child1Data; - this.id = id; - } - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "children", - joinColumns = @JoinColumn(name = "child1_id"), - inverseJoinColumns = @JoinColumn(name = "parent_id", insertable = false, updatable = false) - ) - @SQLJoinTableRestriction("child1_id is not null") - private List parents = new ArrayList(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getChild1Data() { - return child1Data; - } - - public void setChild1Data(String child1Data) { - this.child1Data = child1Data; - } - - public List getParents() { - return parents; - } - - public void setParents(List parents) { - this.parents = parents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Child1Entity that = (Child1Entity) o; - - if ( child1Data != null ? !child1Data.equals( that.child1Data ) : that.child1Data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (child1Data != null ? child1Data.hashCode() : 0); - return result; - } - - public String toString() { - return "C1E(id = " + id + ", child1Data = " + child1Data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/Child2Entity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/Child2Entity.java deleted file mode 100644 index 3dc97a6e3282..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/Child2Entity.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.sametable; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class Child2Entity { - @Id - @GeneratedValue - private Integer id; - - private String child2Data; - - public Child2Entity() { - } - - public Child2Entity(String child2Data) { - this.child2Data = child2Data; - } - - public Child2Entity(Integer id, String child2Data) { - this.id = id; - this.child2Data = child2Data; - } - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "children", - joinColumns = @JoinColumn(name = "child2_id"), - inverseJoinColumns = @JoinColumn(name = "parent_id", insertable = false, updatable = false) - ) - @SQLJoinTableRestriction("child2_id is not null") - private List parents = new ArrayList(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getChild2Data() { - return child2Data; - } - - public void setChild2Data(String child2Data) { - this.child2Data = child2Data; - } - - public List getParents() { - return parents; - } - - public void setParents(List parents) { - this.parents = parents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Child2Entity that = (Child2Entity) o; - - if ( child2Data != null ? !child2Data.equals( that.child2Data ) : that.child2Data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (child2Data != null ? child2Data.hashCode() : 0); - return result; - } - - public String toString() { - return "C2E(id = " + id + ", child2Data = " + child2Data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/ParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/ParentEntity.java deleted file mode 100644 index 45db9947bf8e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/sametable/ParentEntity.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.sametable; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -import org.hibernate.annotations.SQLJoinTableRestriction; -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ParentEntity { - @Id - @GeneratedValue - private Integer id; - - private String parentData; - - public ParentEntity() { - } - - public ParentEntity(String parentData) { - this.parentData = parentData; - } - - public ParentEntity(Integer id, String parentData) { - this.id = id; - this.parentData = parentData; - } - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "children", - joinColumns = @JoinColumn(name = "parent_id"), - inverseJoinColumns = @JoinColumn(name = "child1_id", insertable = false, updatable = false) - ) - @SQLJoinTableRestriction("child1_id is not null") - private List children1 = new ArrayList(); - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable( - name = "children", - joinColumns = @JoinColumn(name = "parent_id"), - inverseJoinColumns = @JoinColumn(name = "child2_id", insertable = false, updatable = false) - ) - @SQLJoinTableRestriction("child2_id is not null") - private List children2 = new ArrayList(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getParentData() { - return parentData; - } - - public void setParentData(String parentData) { - this.parentData = parentData; - } - - public List getChildren1() { - return children1; - } - - public void setChildren1(List children1) { - this.children1 = children1; - } - - public List getChildren2() { - return children2; - } - - public void setChildren2(List children2) { - this.children2 = children2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - ParentEntity that = (ParentEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( parentData != null ? !parentData.equals( that.parentData ) : that.parentData != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (parentData != null ? parentData.hashCode() : 0); - return result; - } - - public String toString() { - return "PE(id = " + id + ", parentData = " + parentData + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/JoinTableEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/JoinTableEntity.java deleted file mode 100644 index 2d012b9ca6de..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/JoinTableEntity.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class JoinTableEntity implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - @ManyToMany - @JoinTable(name = "test_join_table", - joinColumns = @JoinColumn(name = "assoc_id1"), - inverseJoinColumns = @JoinColumn(name = "assoc_id2") - ) - private Set references = new HashSet(); - - public JoinTableEntity() { - } - - public JoinTableEntity(String data) { - this.data = data; - } - - public JoinTableEntity(Long id, String data) { - this.id = id; - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinTableEntity) ) { - return false; - } - - JoinTableEntity that = (JoinTableEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "JoinTableEntity(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Set getReferences() { - return references; - } - - public void setReferences(Set references) { - this.references = references; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/ListUniEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/ListUniEntity.java deleted file mode 100644 index 43ad0bd1b3f6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/ListUniEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * Entity owning the many-to-many relation - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class ListUniEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - private List references; - - public ListUniEntity() { - } - - public ListUniEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListUniEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListUniEntity) ) { - return false; - } - - ListUniEntity that = (ListUniEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListUniEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/M2MIndexedListTargetNotAuditedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/M2MIndexedListTargetNotAuditedEntity.java deleted file mode 100644 index a5d3260b6570..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/M2MIndexedListTargetNotAuditedEntity.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Vladimir Klyushnikov - */ -@Entity -@Table(name = "M2M_IDX_LIST") -public class M2MIndexedListTargetNotAuditedEntity { - - @Id - private Integer id; - - @Audited - private String data; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @OrderColumn(name = "sortOrder") - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable(joinColumns = @JoinColumn(name = "M2MIndexedList_id")) - private List references = new ArrayList(); - - - public M2MIndexedListTargetNotAuditedEntity() { - } - - - public M2MIndexedListTargetNotAuditedEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public M2MIndexedListTargetNotAuditedEntity(Integer id, String data, List references) { - this.id = id; - this.data = data; - this.references = references; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - M2MIndexedListTargetNotAuditedEntity that = (M2MIndexedListTargetNotAuditedEntity) o; - - //noinspection RedundantIfStatement - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return data != null ? data.hashCode() : 0; - } - - - @Override - public String toString() { - return "M2MIndexedListTargetNotAuditedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/M2MTargetNotAuditedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/M2MTargetNotAuditedEntity.java deleted file mode 100644 index 79adab9872ce..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/M2MTargetNotAuditedEntity.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * Audited entity with a many-to-many-reference to not audited entity. - * - * @author Toamsz Bech - * @author Adam Warski - */ -@Entity -@Table(name = "M2MTargetNotAud") -public class M2MTargetNotAuditedEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToMany(fetch = FetchType.LAZY) - private List references; - - public M2MTargetNotAuditedEntity() { - } - - public M2MTargetNotAuditedEntity(Integer id, String data, List references) { - this.id = id; - this.data = data; - this.references = references; - } - - public M2MTargetNotAuditedEntity(String data, List references) { - this.data = data; - this.references = references; - } - - public M2MTargetNotAuditedEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof M2MTargetNotAuditedEntity) ) { - return false; - } - - M2MTargetNotAuditedEntity that = (M2MTargetNotAuditedEntity) o; - - if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "M2MTargetNotAuditedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/ManyToManyNotAuditedNullEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/ManyToManyNotAuditedNullEntity.java deleted file mode 100644 index 2128939cc4e6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/ManyToManyNotAuditedNullEntity.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.annotations.NotFound; -import org.hibernate.annotations.NotFoundAction; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -@Entity -@Table(name = "M2M_N_AUD_NULL") -public class ManyToManyNotAuditedNullEntity implements Serializable { - @Id - private Integer id; - - private String data; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToMany(fetch = FetchType.LAZY) - @NotFound(action = NotFoundAction.IGNORE) - @JoinTable(joinColumns = @JoinColumn(name = "M2MNotAudited_id")) - private List references = new ArrayList(); - - protected ManyToManyNotAuditedNullEntity() { - } - - public ManyToManyNotAuditedNullEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) return true; - if ( !( o instanceof ManyToManyNotAuditedNullEntity ) ) return false; - - ManyToManyNotAuditedNullEntity that = (ManyToManyNotAuditedNullEntity) o; - - if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) return false; - if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) return false; - - return true; - } - - public int hashCode() { - int result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( data != null ? data.hashCode() : 0 ); - return result; - } - - public String toString() { - return "ManyToManyNotAuditedNullEntity(id = " + id + ", data = " + data + ")"; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/MapUniEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/MapUniEntity.java deleted file mode 100644 index d394b92d61c5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/MapUniEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.MapKeyColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * Entity with a map from a string to an entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class MapUniEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - @MapKeyColumn(nullable = false) - private Map map; - - public MapUniEntity() { - } - - public MapUniEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public MapUniEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Map getMap() { - return map; - } - - public void setMap(Map map) { - this.map = map; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MapUniEntity) ) { - return false; - } - - MapUniEntity that = (MapUniEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "MapUniEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/SetUniEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/SetUniEntity.java deleted file mode 100644 index 5528f0f269d0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytomany/unidirectional/SetUniEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytomany.unidirectional; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * Entity owning the many-to-many relation - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetUniEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToMany - private Set references; - - public SetUniEntity() { - } - - public SetUniEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetUniEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReferences() { - return references; - } - - public void setReferences(Set references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetUniEntity) ) { - return false; - } - - SetUniEntity that = (SetUniEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetUniEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/ExtManyToOneNotAuditedNullEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/ExtManyToOneNotAuditedNullEntity.java deleted file mode 100644 index 98fc8636c440..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/ExtManyToOneNotAuditedNullEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytoone.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "EM2O_N_AUD_NULL") -public class ExtManyToOneNotAuditedNullEntity extends ManyToOneNotAuditedNullEntity { - @Audited - private String extension = null; - - public ExtManyToOneNotAuditedNullEntity() { - } - - public ExtManyToOneNotAuditedNullEntity(Integer id, String data, UnversionedStrTestEntity reference, String extension) { - super( id, data, reference ); - this.extension = extension; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) return true; - if ( !( o instanceof ExtManyToOneNotAuditedNullEntity ) ) return false; - if ( !super.equals( o ) ) return false; - - ExtManyToOneNotAuditedNullEntity that = (ExtManyToOneNotAuditedNullEntity) o; - - if ( extension != null ? !extension.equals( that.extension ) : that.extension != null ) return false; - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (extension != null ? extension.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ExtManyToOneNotAuditedNullEntity(" + super.toString() + ", extension = " + extension + ")"; - } - - public String getExtension() { - return extension; - } - - public void setExtension(String extension) { - this.extension = extension; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/ManyToOneNotAuditedNullEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/ManyToOneNotAuditedNullEntity.java deleted file mode 100644 index 32828ce8422b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/ManyToOneNotAuditedNullEntity.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytoone.unidirectional; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.annotations.NotFound; -import org.hibernate.annotations.NotFoundAction; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -@Entity -@Table(name = "M2O_N_AUD_NULL") -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -public class ManyToOneNotAuditedNullEntity implements Serializable { - @Id - private Integer id; - - private String data; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToOne(fetch = FetchType.LAZY, optional = true) - @NotFound(action = NotFoundAction.IGNORE) - private UnversionedStrTestEntity reference; - - protected ManyToOneNotAuditedNullEntity() { - } - - public ManyToOneNotAuditedNullEntity(Integer id, String data, UnversionedStrTestEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) return true; - if ( !( o instanceof ManyToOneNotAuditedNullEntity ) ) return false; - - ManyToOneNotAuditedNullEntity that = (ManyToOneNotAuditedNullEntity) o; - - if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) return false; - if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) return false; - - return true; - } - - public int hashCode() { - int result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( data != null ? data.hashCode() : 0 ); - return result; - } - - public String toString() { - return "ManyToOneNotAuditedNullEntity(id = " + id + ", data = " + data + ")"; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public UnversionedStrTestEntity getReference() { - return reference; - } - - public void setReference(UnversionedStrTestEntity reference) { - this.reference = reference; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/TargetNotAuditedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/TargetNotAuditedEntity.java deleted file mode 100644 index e1f4129ed666..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/manytoone/unidirectional/TargetNotAuditedEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.manytoone.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * Audited entity with a reference to not audited entity. - * - * @author Toamsz Bech - */ -@Entity -public class TargetNotAuditedEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToOne(fetch = FetchType.LAZY) - private UnversionedStrTestEntity reference; - - public TargetNotAuditedEntity() { - } - - public TargetNotAuditedEntity(Integer id, String data, UnversionedStrTestEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public TargetNotAuditedEntity(String data, UnversionedStrTestEntity reference) { - this.data = data; - this.reference = reference; - } - - public TargetNotAuditedEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public UnversionedStrTestEntity getReference() { - return reference; - } - - public void setReference(UnversionedStrTestEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof TargetNotAuditedEntity) ) { - return false; - } - - TargetNotAuditedEntity that = (TargetNotAuditedEntity) o; - - if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { - return false; - } - if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "TargetNotAuditedEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java deleted file mode 100644 index 177b87713ea4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import java.io.Serializable; -import java.util.Collection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class CollectionRefEdEntity implements Serializable { - private static final long serialVersionUID = -1694020123633796683L; - - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private Collection reffering; - - public CollectionRefEdEntity() { - } - - public CollectionRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public CollectionRefEdEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Collection getReffering() { - return reffering; - } - - public void setReffering(Collection reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CollectionRefEdEntity) ) { - return false; - } - - CollectionRefEdEntity that = (CollectionRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "CollectionRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefIngEntity.java deleted file mode 100644 index 565b783940bb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefIngEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class CollectionRefIngEntity implements Serializable { - private static final long serialVersionUID = -9019967223928425707L; - - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne - private CollectionRefEdEntity reference; - - public CollectionRefIngEntity() { - } - - public CollectionRefIngEntity(Integer id, String data, CollectionRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public CollectionRefIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public CollectionRefEdEntity getReference() { - return reference; - } - - public void setReference(CollectionRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CollectionRefIngEntity) ) { - return false; - } - - CollectionRefIngEntity that = (CollectionRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "CollectionRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java deleted file mode 100644 index 5fc5542e0f31..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class ListRefEdEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private List reffering; - - public ListRefEdEntity() { - } - - public ListRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListRefEdEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReffering() { - return reffering; - } - - public void setReffering(List reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListRefEdEntity) ) { - return false; - } - - ListRefEdEntity that = (ListRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefIngEntity.java deleted file mode 100644 index 792dba75cc28..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefIngEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class ListRefIngEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne - private ListRefEdEntity reference; - - public ListRefIngEntity() { - } - - public ListRefIngEntity(Integer id, String data, ListRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public ListRefIngEntity(String data, ListRefEdEntity reference) { - this.data = data; - this.reference = reference; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ListRefEdEntity getReference() { - return reference; - } - - public void setReference(ListRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListRefIngEntity) ) { - return false; - } - - ListRefIngEntity that = (ListRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/OneToManyNotAuditedNullEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/OneToManyNotAuditedNullEntity.java deleted file mode 100644 index 0d69f84be1f1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/OneToManyNotAuditedNullEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -@Entity -@Table(name = "O2M_N_AUD_NULL") -public class OneToManyNotAuditedNullEntity implements Serializable { - @Id - private Integer id; - - private String data; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @OneToMany(fetch = FetchType.EAGER) - @JoinTable(joinColumns = @JoinColumn(name = "O2MNotAudited_id")) - private List references = new ArrayList(); - - protected OneToManyNotAuditedNullEntity() { - } - - public OneToManyNotAuditedNullEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) return true; - if ( !( o instanceof OneToManyNotAuditedNullEntity ) ) return false; - - OneToManyNotAuditedNullEntity that = (OneToManyNotAuditedNullEntity) o; - - if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) return false; - if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) return false; - - return true; - } - - public int hashCode() { - int result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( data != null ? data.hashCode() : 0 ); - return result; - } - - public String toString() { - return "OneToManyNotAuditedNullEntity(id = " + id + ", data = " + data + ")"; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java deleted file mode 100644 index 56b7d9708561..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import java.util.Set; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetRefEdEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany(fetch = FetchType.LAZY, mappedBy = "reference", cascade = CascadeType.ALL) - private Set reffering; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToOne(fetch = FetchType.LAZY) - private SetRefIngEntity ref; - - public SetRefEdEntity() { - } - - public SetRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetRefEdEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReffering() { - return reffering; - } - - public void setReffering(Set reffering) { - this.reffering = reffering; - } - - public SetRefIngEntity getRef() { - return ref; - } - - public void setRef(SetRefIngEntity ref) { - this.ref = ref; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefEdEntity) ) { - return false; - } - - SetRefEdEntity that = (SetRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java deleted file mode 100644 index 97524a6a65f2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetRefIngEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne(fetch = FetchType.LAZY) - private SetRefEdEntity reference; - - public SetRefIngEntity() { - } - - public SetRefIngEntity(Integer id, String data, SetRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public SetRefIngEntity(String data, SetRefEdEntity reference) { - this.data = data; - this.reference = reference; - } - - public SetRefIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public SetRefEdEntity getReference() { - return reference; - } - - public void setReference(SetRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefIngEntity) ) { - return false; - } - - SetRefIngEntity that = (SetRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefEdEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefEdEntity1.java deleted file mode 100644 index 6bc14fdacc3f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefEdEntity1.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.DoubleJoinColumnBidirectionalList} test. - * Owned side of the first relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "DoubleJoinColBiRefEd1") -@Audited -public class DoubleListJoinColumnBidirectionalRefEdEntity1 { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @ManyToOne - @JoinColumn(name = "some_join_column_1", insertable = false, updatable = false) - private DoubleListJoinColumnBidirectionalRefIngEntity owner; - - public DoubleListJoinColumnBidirectionalRefEdEntity1() { - } - - public DoubleListJoinColumnBidirectionalRefEdEntity1( - Integer id, - String data, - DoubleListJoinColumnBidirectionalRefIngEntity owner) { - this.id = id; - this.data = data; - this.owner = owner; - } - - public DoubleListJoinColumnBidirectionalRefEdEntity1( - String data, - DoubleListJoinColumnBidirectionalRefIngEntity owner) { - this.data = data; - this.owner = owner; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public DoubleListJoinColumnBidirectionalRefIngEntity getOwner() { - return owner; - } - - public void setOwner(DoubleListJoinColumnBidirectionalRefIngEntity owner) { - this.owner = owner; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DoubleListJoinColumnBidirectionalRefEdEntity1) ) { - return false; - } - - DoubleListJoinColumnBidirectionalRefEdEntity1 that = (DoubleListJoinColumnBidirectionalRefEdEntity1) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "DoubleListJoinColumnBidirectionalRefIngEntity1(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefEdEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefEdEntity2.java deleted file mode 100644 index 68dab7e0b82e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefEdEntity2.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.DoubleJoinColumnBidirectionalList} test. - * Owned side of the second relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "DoubleJoinColBiRefEd2") -@Audited -public class DoubleListJoinColumnBidirectionalRefEdEntity2 { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @ManyToOne - @JoinColumn(name = "some_join_column_2", insertable = false, updatable = false) - private DoubleListJoinColumnBidirectionalRefIngEntity owner; - - public DoubleListJoinColumnBidirectionalRefEdEntity2() { - } - - public DoubleListJoinColumnBidirectionalRefEdEntity2( - Integer id, - String data, - DoubleListJoinColumnBidirectionalRefIngEntity owner) { - this.id = id; - this.data = data; - this.owner = owner; - } - - public DoubleListJoinColumnBidirectionalRefEdEntity2( - String data, - DoubleListJoinColumnBidirectionalRefIngEntity owner) { - this.data = data; - this.owner = owner; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public DoubleListJoinColumnBidirectionalRefIngEntity getOwner() { - return owner; - } - - public void setOwner(DoubleListJoinColumnBidirectionalRefIngEntity owner) { - this.owner = owner; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DoubleListJoinColumnBidirectionalRefEdEntity2) ) { - return false; - } - - DoubleListJoinColumnBidirectionalRefEdEntity2 that = (DoubleListJoinColumnBidirectionalRefEdEntity2) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "DoubleListJoinColumnBidirectionalRefIngEntity2(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefIngEntity.java deleted file mode 100644 index 2b5ee1bfd31e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleListJoinColumnBidirectionalRefIngEntity.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.DoubleJoinColumnBidirectionalList} test. - * Owning side of the relations. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "DoubleJoinColBiRefIng") -@Audited -public class DoubleListJoinColumnBidirectionalRefIngEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @OneToMany - @JoinColumn(name = "some_join_column_1") - @AuditMappedBy(mappedBy = "owner") - private List references1 = new ArrayList(); - - @OneToMany - @JoinColumn(name = "some_join_column_2") - @AuditMappedBy(mappedBy = "owner") - private List references2 = new ArrayList(); - - public DoubleListJoinColumnBidirectionalRefIngEntity() { - } - - public DoubleListJoinColumnBidirectionalRefIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public DoubleListJoinColumnBidirectionalRefIngEntity(String data) { - this( null, data ); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences1() { - return references1; - } - - public void setReferences1(List references1) { - this.references1 = references1; - } - - public List getReferences2() { - return references2; - } - - public void setReferences2(List references2) { - this.references2 = references2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DoubleListJoinColumnBidirectionalRefIngEntity) ) { - return false; - } - - DoubleListJoinColumnBidirectionalRefIngEntity that = (DoubleListJoinColumnBidirectionalRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "DoubleListJoinColumnBidirectionalRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleSetRefCollEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleSetRefCollEntity.java deleted file mode 100644 index bfd2b5f51953..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/DoubleSetRefCollEntity.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * Set collection of references entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class DoubleSetRefCollEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany - @JoinTable(name = "DOUBLE_STR_1") - private Set collection; - - @Audited - @OneToMany - @JoinTable(name = "DOUBLE_STR_2") - private Set collection2; - - public DoubleSetRefCollEntity() { - } - - public DoubleSetRefCollEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public DoubleSetRefCollEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public Set getCollection2() { - return collection2; - } - - public void setCollection2(Set collection2) { - this.collection2 = collection2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DoubleSetRefCollEntity) ) { - return false; - } - - DoubleSetRefCollEntity that = (DoubleSetRefCollEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "DoubleSetRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/IndexedListJoinColumnBidirectionalRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/IndexedListJoinColumnBidirectionalRefEdEntity.java deleted file mode 100644 index cacdaa280924..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/IndexedListJoinColumnBidirectionalRefEdEntity.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.IndexedJoinColumnBidirectionalList} test. - * Owned side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "IdxListJoinColBiRefEd") -@Audited -public class IndexedListJoinColumnBidirectionalRefEdEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @Column(name = "indexed_index", insertable = false, updatable = false) - private Integer position; - - @ManyToOne - @JoinColumn(name = "indexed_join_column", insertable = false, updatable = false) - private IndexedListJoinColumnBidirectionalRefIngEntity owner; - - public IndexedListJoinColumnBidirectionalRefEdEntity() { - } - - public IndexedListJoinColumnBidirectionalRefEdEntity( - Integer id, - String data, - IndexedListJoinColumnBidirectionalRefIngEntity owner) { - this.id = id; - this.data = data; - this.owner = owner; - } - - public IndexedListJoinColumnBidirectionalRefEdEntity( - String data, - IndexedListJoinColumnBidirectionalRefIngEntity owner) { - this.data = data; - this.owner = owner; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public IndexedListJoinColumnBidirectionalRefIngEntity getOwner() { - return owner; - } - - public void setOwner(IndexedListJoinColumnBidirectionalRefIngEntity owner) { - this.owner = owner; - } - - public Integer getPosition() { - return position; - } - - public void setPosition(Integer position) { - this.position = position; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof IndexedListJoinColumnBidirectionalRefEdEntity) ) { - return false; - } - - IndexedListJoinColumnBidirectionalRefEdEntity that = (IndexedListJoinColumnBidirectionalRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "IndexedListJoinColumnBidirectionalRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/IndexedListJoinColumnBidirectionalRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/IndexedListJoinColumnBidirectionalRefIngEntity.java deleted file mode 100644 index f3ddbdbf4ea3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/IndexedListJoinColumnBidirectionalRefIngEntity.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.IndexedJoinColumnBidirectionalList} test. - * Owning side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "IdxListJoinColBiRefIng") -@Audited -public class IndexedListJoinColumnBidirectionalRefIngEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @OneToMany - @JoinColumn(name = "indexed_join_column") - @OrderColumn(name = "indexed_index") - @AuditMappedBy(mappedBy = "owner", positionMappedBy = "position") - private List references; - - public IndexedListJoinColumnBidirectionalRefIngEntity() { - } - - public IndexedListJoinColumnBidirectionalRefIngEntity( - Integer id, - String data, - IndexedListJoinColumnBidirectionalRefEdEntity... references) { - this.id = id; - this.data = data; - this.references = new ArrayList(); - this.references.addAll( Arrays.asList( references ) ); - } - - public IndexedListJoinColumnBidirectionalRefIngEntity( - String data, - IndexedListJoinColumnBidirectionalRefEdEntity... references) { - this( null, data, references ); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof IndexedListJoinColumnBidirectionalRefIngEntity) ) { - return false; - } - - IndexedListJoinColumnBidirectionalRefIngEntity that = (IndexedListJoinColumnBidirectionalRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "IndexedListJoinColumnBidirectionalRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefEdChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefEdChildEntity.java deleted file mode 100644 index 2fa4e1830f19..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefEdChildEntity.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.JoinColumnBidirectionalListWithInheritance} test. - * Owned child side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@DiscriminatorValue("2") -@Audited -public class ListJoinColumnBidirectionalInheritanceRefEdChildEntity - extends ListJoinColumnBidirectionalInheritanceRefEdParentEntity { - private String childData; - - public ListJoinColumnBidirectionalInheritanceRefEdChildEntity() { - } - - public ListJoinColumnBidirectionalInheritanceRefEdChildEntity( - Integer id, - String parentData, - ListJoinColumnBidirectionalInheritanceRefIngEntity owner, - String childData) { - super( id, parentData, owner ); - this.childData = childData; - } - - public ListJoinColumnBidirectionalInheritanceRefEdChildEntity( - String parentData, - ListJoinColumnBidirectionalInheritanceRefIngEntity owner, - String childData) { - super( parentData, owner ); - this.childData = childData; - } - - public String getChildData() { - return childData; - } - - public void setChildData(String childData) { - this.childData = childData; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ListJoinColumnBidirectionalInheritanceRefEdChildEntity that = (ListJoinColumnBidirectionalInheritanceRefEdChildEntity) o; - - //noinspection RedundantIfStatement - if ( childData != null ? !childData.equals( that.childData ) : that.childData != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (childData != null ? childData.hashCode() : 0); - return result; - } - - public String toString() { - return "ListJoinColumnBidirectionalInheritanceRefEdChildEntity(id = " + getId() + - ", parentData = " + getParentData() + ", childData = " + childData + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefEdParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefEdParentEntity.java deleted file mode 100644 index a451fe68a2a9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefEdParentEntity.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.JoinColumnBidirectionalListWithInheritance} test. - * Owned parent side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ListJoinColBiInhRefEdPar") -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.INTEGER) -@DiscriminatorValue("1") -@Audited -public class ListJoinColumnBidirectionalInheritanceRefEdParentEntity { - @Id - @GeneratedValue - private Integer id; - - private String parentData; - - @ManyToOne - @JoinColumn(name = "some_join_column", insertable = false, updatable = false) - private ListJoinColumnBidirectionalInheritanceRefIngEntity owner; - - public ListJoinColumnBidirectionalInheritanceRefEdParentEntity() { - } - - public ListJoinColumnBidirectionalInheritanceRefEdParentEntity( - Integer id, - String parentData, - ListJoinColumnBidirectionalInheritanceRefIngEntity owner) { - this.id = id; - this.parentData = parentData; - this.owner = owner; - } - - public ListJoinColumnBidirectionalInheritanceRefEdParentEntity( - String parentData, - ListJoinColumnBidirectionalInheritanceRefIngEntity owner) { - this.parentData = parentData; - this.owner = owner; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public ListJoinColumnBidirectionalInheritanceRefIngEntity getOwner() { - return owner; - } - - public void setOwner(ListJoinColumnBidirectionalInheritanceRefIngEntity owner) { - this.owner = owner; - } - - public String getParentData() { - return parentData; - } - - public void setParentData(String parentData) { - this.parentData = parentData; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListJoinColumnBidirectionalInheritanceRefEdParentEntity) ) { - return false; - } - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity that = (ListJoinColumnBidirectionalInheritanceRefEdParentEntity) o; - - if ( parentData != null ? !parentData.equals( that.parentData ) : that.parentData != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (parentData != null ? parentData.hashCode() : 0); - return result; - } - - public String toString() { - return "ListJoinColumnBidirectionalInheritanceRefEdParentEntity(id = " + id + ", parentData = " + parentData + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefIngEntity.java deleted file mode 100644 index 9f740d3fcc7c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalInheritanceRefIngEntity.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.JoinColumnBidirectionalListWithInheritance} test. - * Owning side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ListJoinColBiInhRefIng") -@Audited -public class ListJoinColumnBidirectionalInheritanceRefIngEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @OneToMany - @JoinColumn(name = "some_join_column") - @AuditMappedBy(mappedBy = "owner") - private List references; - - public ListJoinColumnBidirectionalInheritanceRefIngEntity() { - } - - public ListJoinColumnBidirectionalInheritanceRefIngEntity( - Integer id, - String data, - ListJoinColumnBidirectionalInheritanceRefEdParentEntity... references) { - this.id = id; - this.data = data; - this.references = new ArrayList(); - this.references.addAll( Arrays.asList( references ) ); - } - - public ListJoinColumnBidirectionalInheritanceRefIngEntity( - String data, - ListJoinColumnBidirectionalInheritanceRefEdParentEntity... references) { - this( null, data, references ); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListJoinColumnBidirectionalInheritanceRefIngEntity) ) { - return false; - } - - ListJoinColumnBidirectionalInheritanceRefIngEntity that = (ListJoinColumnBidirectionalInheritanceRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListJoinColumnBidirectionalInheritanceRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalRefEdEntity.java deleted file mode 100644 index 4837241de3aa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalRefEdEntity.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.JoinColumnBidirectionalList} test. - * Owned side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ListJoinColBiRefEd") -@Audited -public class ListJoinColumnBidirectionalRefEdEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @ManyToOne - @JoinColumn(name = "some_join_column", insertable = false, updatable = false) - private ListJoinColumnBidirectionalRefIngEntity owner; - - public ListJoinColumnBidirectionalRefEdEntity() { - } - - public ListJoinColumnBidirectionalRefEdEntity( - Integer id, - String data, - ListJoinColumnBidirectionalRefIngEntity owner) { - this.id = id; - this.data = data; - this.owner = owner; - } - - public ListJoinColumnBidirectionalRefEdEntity(String data, ListJoinColumnBidirectionalRefIngEntity owner) { - this.data = data; - this.owner = owner; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ListJoinColumnBidirectionalRefIngEntity getOwner() { - return owner; - } - - public void setOwner(ListJoinColumnBidirectionalRefIngEntity owner) { - this.owner = owner; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListJoinColumnBidirectionalRefEdEntity) ) { - return false; - } - - ListJoinColumnBidirectionalRefEdEntity that = (ListJoinColumnBidirectionalRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListJoinColumnBidirectionalRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalRefIngEntity.java deleted file mode 100644 index 537bef646d95..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListJoinColumnBidirectionalRefIngEntity.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; - -/** - * Entity for {@link org.hibernate.orm.test.envers.integration.onetomany.detached.JoinColumnBidirectionalList} test. - * Owning side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ListJoinColBiRefIng") -@Audited -public class ListJoinColumnBidirectionalRefIngEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @OneToMany - @JoinColumn(name = "some_join_column") - @AuditMappedBy(mappedBy = "owner") - private List references; - - public ListJoinColumnBidirectionalRefIngEntity() { - } - - public ListJoinColumnBidirectionalRefIngEntity( - Integer id, - String data, - ListJoinColumnBidirectionalRefEdEntity... references) { - this.id = id; - this.data = data; - this.references = new ArrayList(); - this.references.addAll( Arrays.asList( references ) ); - } - - public ListJoinColumnBidirectionalRefIngEntity(String data, ListJoinColumnBidirectionalRefEdEntity... references) { - this( null, data, references ); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListJoinColumnBidirectionalRefIngEntity) ) { - return false; - } - - ListJoinColumnBidirectionalRefIngEntity that = (ListJoinColumnBidirectionalRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ListJoinColumnBidirectionalRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListRefCollEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListRefCollEntity.java deleted file mode 100644 index 597e27cbc71a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ListRefCollEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * Set collection of references entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class ListRefCollEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany - private List collection; - - public ListRefCollEntity() { - } - - public ListRefCollEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public ListRefCollEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getCollection() { - return collection; - } - - public void setCollection(List collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListRefCollEntity) ) { - return false; - } - - ListRefCollEntity that = (ListRefCollEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/SetJoinColumnRefCollEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/SetJoinColumnRefCollEntity.java deleted file mode 100644 index f890cb3f128f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/SetJoinColumnRefCollEntity.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * A detached relation to another entity, with a @OneToMany+@JoinColumn mapping. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "SetJoinColRefColl") -public class SetJoinColumnRefCollEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany - @JoinColumn(name = "SJCR_ID") - @AuditJoinTable(name = "SetJoinColRefColl_StrTest_AUD") - private Set collection; - - public SetJoinColumnRefCollEntity() { - } - - public SetJoinColumnRefCollEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetJoinColumnRefCollEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetJoinColumnRefCollEntity) ) { - return false; - } - - SetJoinColumnRefCollEntity that = (SetJoinColumnRefCollEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetJoinColumnRefCollEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/SetRefCollEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/SetRefCollEntity.java deleted file mode 100644 index 5d35cc50fb80..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/SetRefCollEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * Set collection of references entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetRefCollEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany - private Set collection; - - public SetRefCollEntity() { - } - - public SetRefCollEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetRefCollEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefCollEntity) ) { - return false; - } - - SetRefCollEntity that = (SetRefCollEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ids/SetRefCollEntityEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ids/SetRefCollEntityEmbId.java deleted file mode 100644 index c8e304fd2c3f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ids/SetRefCollEntityEmbId.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached.ids; - -import java.util.Set; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; - -/** - * Set collection of references entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "SetRefCollEmbId") -public class SetRefCollEntityEmbId { - @EmbeddedId - private EmbId id; - - @Audited - private String data; - - @Audited - @OneToMany - private Set collection; - - public SetRefCollEntityEmbId() { - } - - public SetRefCollEntityEmbId(EmbId id, String data) { - this.id = id; - this.data = data; - } - - public SetRefCollEntityEmbId(String data) { - this.data = data; - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefCollEntityEmbId) ) { - return false; - } - - SetRefCollEntityEmbId that = (SetRefCollEntityEmbId) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefCollEntityEmbId(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ids/SetRefCollEntityMulId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ids/SetRefCollEntityMulId.java deleted file mode 100644 index 02ae1e3b77a8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/ids/SetRefCollEntityMulId.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached.ids; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; - -/** - * Set collection of references entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "SetRefCollMulId") -@IdClass(MulId.class) -public class SetRefCollEntityMulId { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @OneToMany - private Set collection; - - public SetRefCollEntityMulId() { - } - - public SetRefCollEntityMulId(Integer id1, Integer id2, String data) { - this.id1 = id1; - this.id2 = id2; - this.data = data; - } - - public SetRefCollEntityMulId(String data) { - this.data = data; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefCollEntityMulId) ) { - return false; - } - - SetRefCollEntityMulId that = (SetRefCollEntityMulId) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefCollEntityMulId(id1 = " + id1 + ", id2 = " + id2 + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ChildIndexedListJoinColumnBidirectionalRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ChildIndexedListJoinColumnBidirectionalRefIngEntity.java deleted file mode 100644 index 353df5095fad..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ChildIndexedListJoinColumnBidirectionalRefIngEntity.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.onetomany.detached.InheritanceIndexedJoinColumnBidirectionalList; - -/** - * Entity for {@link InheritanceIndexedJoinColumnBidirectionalList} test. - * Child, owning side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ChildIdxJoinColBiRefIng") -@Audited -public class ChildIndexedListJoinColumnBidirectionalRefIngEntity - extends ParentIndexedListJoinColumnBidirectionalRefIngEntity { - private String data2; - - public ChildIndexedListJoinColumnBidirectionalRefIngEntity() { - } - - public ChildIndexedListJoinColumnBidirectionalRefIngEntity( - Integer id, - String data, - String data2, - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity... references) { - super( id, data, references ); - this.data2 = data2; - } - - public ChildIndexedListJoinColumnBidirectionalRefIngEntity( - String data, - String data2, - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity... references) { - super( data, references ); - this.data2 = data2; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIndexedListJoinColumnBidirectionalRefIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIndexedListJoinColumnBidirectionalRefIngEntity that = (ChildIndexedListJoinColumnBidirectionalRefIngEntity) o; - - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIndexedListJoinColumnBidirectionalRefIngEntity(id = " + getId() + ", data = " + getData() + ", data2 = " + data2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ParentIndexedListJoinColumnBidirectionalRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ParentIndexedListJoinColumnBidirectionalRefIngEntity.java deleted file mode 100644 index 7b0f9c389621..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ParentIndexedListJoinColumnBidirectionalRefIngEntity.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.onetomany.detached.InheritanceIndexedJoinColumnBidirectionalList; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Table; - -/** - * Entity for {@link InheritanceIndexedJoinColumnBidirectionalList} test. - * Parent, owning side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -@Table(name = "ParentIdxJoinColBiRefIng") -@Inheritance(strategy = InheritanceType.JOINED) -public abstract class ParentIndexedListJoinColumnBidirectionalRefIngEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @OneToMany - @JoinColumn(name = "indexed_join_column") - @OrderColumn(name = "indexed_index") - @AuditMappedBy(mappedBy = "owner", positionMappedBy = "position") - private List references; - - public ParentIndexedListJoinColumnBidirectionalRefIngEntity() { - } - - public ParentIndexedListJoinColumnBidirectionalRefIngEntity( - Integer id, - String data, - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity... references) { - this.id = id; - this.data = data; - this.references = new ArrayList(); - this.references.addAll( Arrays.asList( references ) ); - } - - public ParentIndexedListJoinColumnBidirectionalRefIngEntity( - String data, - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity... references) { - this( null, data, references ); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentIndexedListJoinColumnBidirectionalRefIngEntity) ) { - return false; - } - - ParentIndexedListJoinColumnBidirectionalRefIngEntity that = (ParentIndexedListJoinColumnBidirectionalRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentIndexedListJoinColumnBidirectionalRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.java deleted file mode 100644 index 5205d59768c8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/detached/inheritance/ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.onetomany.detached.InheritanceIndexedJoinColumnBidirectionalList; - -/** - * Entity for {@link InheritanceIndexedJoinColumnBidirectionalList} test. - * Owned side of the relation. - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "ParOwnedIdxJoinColBiRefEd") -@Audited -public class ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @Column(name = "indexed_index", insertable = false, updatable = false) - private Integer position; - - @ManyToOne - @JoinColumn(name = "indexed_join_column", insertable = false, updatable = false) - private ParentIndexedListJoinColumnBidirectionalRefIngEntity owner; - - public ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity() { - } - - public ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - Integer id, - String data, - ParentIndexedListJoinColumnBidirectionalRefIngEntity owner) { - this.id = id; - this.data = data; - this.owner = owner; - } - - public ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - String data, - ParentIndexedListJoinColumnBidirectionalRefIngEntity owner) { - this.data = data; - this.owner = owner; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ParentIndexedListJoinColumnBidirectionalRefIngEntity getOwner() { - return owner; - } - - public void setOwner(ParentIndexedListJoinColumnBidirectionalRefIngEntity owner) { - this.owner = owner; - } - - public Integer getPosition() { - return position; - } - - public void setPosition(Integer position) { - this.position = position; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity) ) { - return false; - } - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity that = (ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - //noinspection RedundantIfStatement - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java deleted file mode 100644 index 8ab8f0344f59..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.ids; - -import java.util.Set; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetRefEdEmbIdEntity { - @EmbeddedId - private EmbId id; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private Set reffering; - - public SetRefEdEmbIdEntity() { - } - - public SetRefEdEmbIdEntity(EmbId id, String data) { - this.id = id; - this.data = data; - } - - public SetRefEdEmbIdEntity(String data) { - this.data = data; - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReffering() { - return reffering; - } - - public void setReffering(Set reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefEdEmbIdEntity) ) { - return false; - } - - SetRefEdEmbIdEntity that = (SetRefEdEmbIdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefEdEmbIdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java deleted file mode 100644 index 4fafdf611f6c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.ids; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@IdClass(MulId.class) -public class SetRefEdMulIdEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private Set reffering; - - public SetRefEdMulIdEntity() { - } - - public SetRefEdMulIdEntity(MulId id, String data) { - this.id1 = id.getId1(); - this.id2 = id.getId2(); - this.data = data; - } - - public SetRefEdMulIdEntity(Integer id1, Integer id2, String data) { - this.id1 = id1; - this.id2 = id2; - this.data = data; - } - - public SetRefEdMulIdEntity(String data) { - this.data = data; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReffering() { - return reffering; - } - - public void setReffering(Set reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefEdMulIdEntity) ) { - return false; - } - - SetRefEdMulIdEntity that = (SetRefEdMulIdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefEdMulIdEntity(id1 = " + id1 + ", id2 = " + id2 + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefIngEmbIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefIngEmbIdEntity.java deleted file mode 100644 index 2bf02e3f1b0b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefIngEmbIdEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.ids; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetRefIngEmbIdEntity { - @EmbeddedId - private EmbId id; - - @Audited - private String data; - - @Audited - @ManyToOne - private SetRefEdEmbIdEntity reference; - - public SetRefIngEmbIdEntity() { - } - - public SetRefIngEmbIdEntity(EmbId id, String data, SetRefEdEmbIdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public SetRefIngEmbIdEntity(String data, SetRefEdEmbIdEntity reference) { - this.data = data; - this.reference = reference; - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public SetRefEdEmbIdEntity getReference() { - return reference; - } - - public void setReference(SetRefEdEmbIdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefIngEmbIdEntity) ) { - return false; - } - - SetRefIngEmbIdEntity that = (SetRefIngEmbIdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefIngEmbIdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefIngMulIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefIngMulIdEntity.java deleted file mode 100644 index 2178f2952e8b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefIngMulIdEntity.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetomany.ids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@IdClass(MulId.class) -public class SetRefIngMulIdEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @ManyToOne - private SetRefEdMulIdEntity reference; - - public SetRefIngMulIdEntity() { - } - - public SetRefIngMulIdEntity(MulId id, String data, SetRefEdMulIdEntity reference) { - this.id1 = id.getId1(); - this.id2 = id.getId2(); - this.data = data; - this.reference = reference; - } - - public SetRefIngMulIdEntity(Integer id1, Integer id2, String data, SetRefEdMulIdEntity reference) { - this.id1 = id1; - this.id2 = id2; - this.data = data; - this.reference = reference; - } - - public SetRefIngMulIdEntity(String data, SetRefEdMulIdEntity reference) { - this.data = data; - this.reference = reference; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public SetRefEdMulIdEntity getReference() { - return reference; - } - - public void setReference(SetRefEdMulIdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefIngMulIdEntity) ) { - return false; - } - - SetRefIngMulIdEntity that = (SetRefIngMulIdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefIngMulIdEntity(id1 = " + id1 + ", id2 = " + id2 + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerAnnotationRefEdOneToOne.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerAnnotationRefEdOneToOne.java deleted file mode 100644 index ccf9e50eac43..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerAnnotationRefEdOneToOne.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetoone; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; -import jakarta.persistence.Table; - -/** - * Test class for issue HHH-3854. Restricting creation of proxy objects is essential. - */ -@Entity -@Audited -// Class name is too long of an identifier for Oracle. -@Table(name = "EdOneToOne") -public final class BidirectionalEagerAnnotationRefEdOneToOne { - /** - * ID column. - */ - @Id - @GeneratedValue - private Integer id; - - /** - * Field containing the referring entity. - */ - @OneToOne(mappedBy = "refedOne", fetch = FetchType.EAGER) - @NotAudited - private BidirectionalEagerAnnotationRefIngOneToOne refIng; - - /** - * Field containing some data. - */ - private String data; - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BidirectionalEagerAnnotationRefEdOneToOne) ) { - return false; - } - - BidirectionalEagerAnnotationRefEdOneToOne that = (BidirectionalEagerAnnotationRefEdOneToOne) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "BidirectionalEagerAnnotationRefEdOneToOne(id = " + id + ", data = " + data + ")"; - } - - /** - * @return the id - */ - public Integer getId() { - return id; - } - - /** - * @return the refIng - */ - public BidirectionalEagerAnnotationRefIngOneToOne getRefIng() { - return refIng; - } - - /** - * @param refIng the refIng to set - */ - public void setRefIng(BidirectionalEagerAnnotationRefIngOneToOne refIng) { - this.refIng = refIng; - } - - /** - * @return the data - */ - public String getData() { - return data; - } - - /** - * @param data the data to set - */ - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerAnnotationRefIngOneToOne.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerAnnotationRefIngOneToOne.java deleted file mode 100644 index e8b5dcdd7378..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerAnnotationRefIngOneToOne.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetoone; - -import org.hibernate.envers.Audited; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToOne; -import jakarta.persistence.Table; - -/** - * Test class for issue HHH-3854. Restricting creation of proxy objects is essential. - */ -@Entity -@Audited -//Class name is too long of an identifier for Oracle. -@Table(name = "IngOneToOne") -public final class BidirectionalEagerAnnotationRefIngOneToOne { - /** - * ID column. - */ - @Id - @GeneratedValue - private Integer id; - - /** - * Field with an optional first referred entity. - */ - @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, optional = true) - @JoinColumn(name = "REF_ID_ONE") - private BidirectionalEagerAnnotationRefEdOneToOne refedOne = null; - - /** - * Field with an optional second referred entity. - */ - @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL, optional = true) - @JoinColumn(name = "REF_ID_TWO") - private BidirectionalEagerAnnotationRefEdOneToOne refedTwo = null; - - /** - * Field containing some data. - */ - private String data; - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BidirectionalEagerAnnotationRefIngOneToOne) ) { - return false; - } - - BidirectionalEagerAnnotationRefIngOneToOne that = (BidirectionalEagerAnnotationRefIngOneToOne) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "BidirectionalEagerAnnotationRefIngOneToOne(id = " + id + ", data = " + data + ")"; - } - - /** - * @return the id - */ - public Integer getId() { - return id; - } - - /** - * @return the refedOne - */ - public BidirectionalEagerAnnotationRefEdOneToOne getRefedOne() { - return refedOne; - } - - /** - * @param refedOne the refedOne to set - */ - public void setRefedOne(BidirectionalEagerAnnotationRefEdOneToOne refedOne) { - this.refedOne = refedOne; - } - - /** - * @return the refedTwo - */ - public BidirectionalEagerAnnotationRefEdOneToOne getRefedTwo() { - return refedTwo; - } - - /** - * @param refedTwo the refedTwo to set - */ - public void setRefedTwo(BidirectionalEagerAnnotationRefEdOneToOne refedTwo) { - this.refedTwo = refedTwo; - } - - /** - * @return the data - */ - public String getData() { - return data; - } - - /** - * @param data the data to set - */ - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerHbmRefEdPK.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerHbmRefEdPK.java deleted file mode 100644 index e07671c67efc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerHbmRefEdPK.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetoone; - -import org.hibernate.envers.Audited; - -@Audited -public class BidirectionalEagerHbmRefEdPK { - private long id; - private String data; - private BidirectionalEagerHbmRefIngPK referencing; - - public BidirectionalEagerHbmRefEdPK() { - } - - public BidirectionalEagerHbmRefEdPK(String data) { - this.data = data; - } - - public long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BidirectionalEagerHbmRefIngPK getReferencing() { - return referencing; - } - - public void setReferencing(BidirectionalEagerHbmRefIngPK referencing) { - this.referencing = referencing; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BidirectionalEagerHbmRefEdPK) ) { - return false; - } - - BidirectionalEagerHbmRefEdPK that = (BidirectionalEagerHbmRefEdPK) o; - - if ( id != that.id ) { - return false; - } - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) (id ^ (id >>> 32)); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "BidirectionalEagerHbmRefEdPK(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerHbmRefIngPK.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerHbmRefIngPK.java deleted file mode 100644 index ac150c9f6f9d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetoone/BidirectionalEagerHbmRefIngPK.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.onetoone; - -import org.hibernate.envers.Audited; - -@Audited -public class BidirectionalEagerHbmRefIngPK { - private long id; - private String data; - private BidirectionalEagerHbmRefEdPK reference; - - public BidirectionalEagerHbmRefIngPK() { - } - - public BidirectionalEagerHbmRefIngPK(String data) { - this.data = data; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BidirectionalEagerHbmRefEdPK getReference() { - return reference; - } - - public void setReference(BidirectionalEagerHbmRefEdPK reference) { - this.reference = reference; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BidirectionalEagerHbmRefIngPK) ) { - return false; - } - - BidirectionalEagerHbmRefIngPK that = (BidirectionalEagerHbmRefIngPK) o; - - if ( id != that.id ) { - return false; - } - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) (id ^ (id >>> 32)); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "BidirectionalEagerHbmRefIngPK(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomDataRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomDataRevEntity.java deleted file mode 100644 index 1b206496468a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomDataRevEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomDataRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int customId; - - @RevisionTimestamp - private long customTimestamp; - - private String data; - - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CustomDataRevEntity) ) { - return false; - } - - CustomDataRevEntity that = (CustomDataRevEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( customTimestamp != that.customTimestamp ) { - return false; - } - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = customId; - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomDateRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomDateRevEntity.java deleted file mode 100644 index 12b85f7a4193..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomDateRevEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity; - -import java.util.Date; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomDateRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int customId; - - @RevisionTimestamp - private Date dateTimestamp; - - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - public Date getDateTimestamp() { - return dateTimestamp; - } - - public void setDateTimestamp(Date dateTimestamp) { - this.dateTimestamp = dateTimestamp; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - CustomDateRevEntity that = (CustomDateRevEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( dateTimestamp != null ? !dateTimestamp.equals( that.dateTimestamp ) : that.dateTimestamp != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = customId; - result = 31 * result + (dateTimestamp != null ? dateTimestamp.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomInstantRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomInstantRevEntity.java deleted file mode 100644 index a9524faa5851..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomInstantRevEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity; - -import java.time.Instant; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Chris Cranford - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomInstantRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int customId; - - @RevisionTimestamp - private Instant instantTimestamp; - - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - public Instant getInstantTimestamp() { - return instantTimestamp; - } - - public void setInstantTimestamp(Instant instantTimestamp) { - this.instantTimestamp = instantTimestamp; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - CustomInstantRevEntity that = (CustomInstantRevEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( instantTimestamp != null ? !instantTimestamp.equals( that.instantTimestamp ) : that.instantTimestamp != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = customId; - result = 31 * result + (instantTimestamp != null ? instantTimestamp.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomLocalDateTimeRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomLocalDateTimeRevEntity.java deleted file mode 100644 index 2b90ace2a1ec..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomLocalDateTimeRevEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.entities.reventity; - -import java.time.LocalDateTime; -import java.util.Objects; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Chris Cranford - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomLocalDateTimeRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int id; - - @RevisionTimestamp - private LocalDateTime localDateTimestamp; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public LocalDateTime getLocalDateTimestamp() { - return localDateTimestamp; - } - - public void setLocalDateTimestamp(LocalDateTime localDateTimestamp) { - this.localDateTimestamp = localDateTimestamp; - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + ( localDateTimestamp != null ? localDateTimestamp.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - CustomLocalDateTimeRevEntity that = (CustomLocalDateTimeRevEntity) o; - return id == that.id && Objects.equals(localDateTimestamp, that.localDateTimestamp); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomPropertyAccessRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomPropertyAccessRevEntity.java deleted file mode 100644 index 43569bfbceb7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomPropertyAccessRevEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomPropertyAccessRevEntity { - private int customId; - - private long customTimestamp; - - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - @RevisionTimestamp - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CustomPropertyAccessRevEntity) ) { - return false; - } - - CustomPropertyAccessRevEntity that = (CustomPropertyAccessRevEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( customTimestamp != that.customTimestamp ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = customId; - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomRevEntity.java deleted file mode 100644 index 68cb8b5b02c2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomRevEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int customId; - - @RevisionTimestamp - private long customTimestamp; - - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CustomRevEntity) ) { - return false; - } - - CustomRevEntity that = (CustomRevEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( customTimestamp != that.customTimestamp ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = customId; - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomRevEntityColumnMapping.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomRevEntityColumnMapping.java deleted file mode 100644 index 613cbaad786f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/CustomRevEntityColumnMapping.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomRevEntityColumnMapping { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @Column(columnDefinition = "int") - @RevisionNumber - private Long customId; - - @RevisionTimestamp - private long customTimestamp; - - public Long getCustomId() { - return customId; - } - - public void setCustomId(Long customId) { - this.customId = customId; - } - - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - CustomRevEntityColumnMapping that = (CustomRevEntityColumnMapping) o; - - if ( customTimestamp != that.customTimestamp ) { - return false; - } - if ( customId != null ? !customId.equals( that.customId ) : that.customId != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = customId != null ? customId.hashCode() : 0; - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/AnnotatedTrackingRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/AnnotatedTrackingRevisionEntity.java deleted file mode 100644 index c64e817cdc67..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/AnnotatedTrackingRevisionEntity.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities; - -import java.util.Set; -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.Table; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.ModifiedEntityNames; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * Sample revision entity that uses {@link ModifiedEntityNames} annotation. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "AnnotatedTrackRevInfo") -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class AnnotatedTrackingRevisionEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int customId; - - @RevisionTimestamp - private long customTimestamp; - - @ElementCollection - @JoinTable(name = "REVCHANGES", joinColumns = @JoinColumn(name = "REV")) - @Column(name = "ENTITYNAME") - @ModifiedEntityNames - private Set entityNames; - - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public Set getEntityNames() { - return entityNames; - } - - public void setEntityNames(Set entityNames) { - this.entityNames = entityNames; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AnnotatedTrackingRevisionEntity) ) { - return false; - } - - AnnotatedTrackingRevisionEntity that = (AnnotatedTrackingRevisionEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( customTimestamp != that.customTimestamp ) { - return false; - } - if ( entityNames != null ? !entityNames.equals( that.entityNames ) : that.entityNames != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = customId; - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - result = 31 * result + (entityNames != null ? entityNames.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "AnnotatedTrackingRevisionEntity(customId = " + customId + ", customTimestamp = " + customTimestamp + ", entityNames=" + entityNames + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/CustomTrackingRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/CustomTrackingRevisionEntity.java deleted file mode 100644 index 221ee8515c06..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/CustomTrackingRevisionEntity.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * Revision entity which {@code modifiedEntityTypes} field is manually populated by {@link CustomTrackingRevisionListener}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "CustomTrackRevInfo") -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity(CustomTrackingRevisionListener.class) -public class CustomTrackingRevisionEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int customId; - - @RevisionTimestamp - private long customTimestamp; - - @OneToMany(mappedBy = "revision", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) - private Set modifiedEntityTypes = new HashSet(); - - public int getCustomId() { - return customId; - } - - public void setCustomId(int customId) { - this.customId = customId; - } - - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public Set getModifiedEntityTypes() { - return modifiedEntityTypes; - } - - public void setModifiedEntityTypes(Set modifiedEntityTypes) { - this.modifiedEntityTypes = modifiedEntityTypes; - } - - public void addModifiedEntityType(String entityClassName) { - modifiedEntityTypes.add( new ModifiedEntityTypeEntity( this, entityClassName ) ); - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CustomTrackingRevisionEntity) ) { - return false; - } - - CustomTrackingRevisionEntity that = (CustomTrackingRevisionEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( customTimestamp != that.customTimestamp ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = customId; - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - return result; - } - - @Override - public String toString() { - return "CustomTrackingRevisionEntity(customId = " + customId + ", customTimestamp = " + customTimestamp + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/CustomTrackingRevisionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/CustomTrackingRevisionListener.java deleted file mode 100644 index 122cbdd64ed9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/CustomTrackingRevisionListener.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities; - -import org.hibernate.envers.EntityTrackingRevisionListener; -import org.hibernate.envers.RevisionType; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class CustomTrackingRevisionListener implements EntityTrackingRevisionListener { - @Override - public void entityChanged( - Class entityClass, String entityName, Object entityId, RevisionType revisionType, - Object revisionEntity) { - ((CustomTrackingRevisionEntity) revisionEntity).addModifiedEntityType( entityClass.getName() ); - } - - @Override - public void newRevision(Object revisionEntity) { - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ExtendedRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ExtendedRevisionEntity.java deleted file mode 100644 index ffe4e352c761..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ExtendedRevisionEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; - -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionMapping; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@RevisionEntity(ExtendedRevisionListener.class) -public class ExtendedRevisionEntity extends SequenceIdTrackingModifiedEntitiesRevisionMapping { - @Column(name = "USER_COMMENT") - private String comment; - - public String getComment() { - return comment; - } - - public void setComment(String comment) { - this.comment = comment; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ExtendedRevisionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ExtendedRevisionListener.java deleted file mode 100644 index 0cbb4f839727..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ExtendedRevisionListener.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities; - -import org.hibernate.envers.RevisionListener; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class ExtendedRevisionListener implements RevisionListener { - public static final String COMMENT_VALUE = "Comment"; - - public void newRevision(Object revisionEntity) { - ((ExtendedRevisionEntity) revisionEntity).setComment( COMMENT_VALUE ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ModifiedEntityTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ModifiedEntityTypeEntity.java deleted file mode 100644 index fc9a3429a293..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/reventity/trackmodifiedentities/ModifiedEntityTypeEntity.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -/** - * Custom detail of revision entity. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class ModifiedEntityTypeEntity { - @Id - @GeneratedValue - private Integer id; - - @ManyToOne - private CustomTrackingRevisionEntity revision; - - private String entityClassName; - - public ModifiedEntityTypeEntity() { - } - - public ModifiedEntityTypeEntity(String entityClassName) { - this.entityClassName = entityClassName; - } - - public ModifiedEntityTypeEntity(CustomTrackingRevisionEntity revision, String entityClassName) { - this.revision = revision; - this.entityClassName = entityClassName; - } - - public CustomTrackingRevisionEntity getRevision() { - return revision; - } - - public void setRevision(CustomTrackingRevisionEntity revision) { - this.revision = revision; - } - - public String getEntityClassName() { - return entityClassName; - } - - public void setEntityClassName(String entityClassName) { - this.entityClassName = entityClassName; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ModifiedEntityTypeEntity) ) { - return false; - } - - ModifiedEntityTypeEntity that = (ModifiedEntityTypeEntity) o; - - if ( entityClassName != null ? - !entityClassName.equals( that.entityClassName ) : - that.entityClassName != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return entityClassName != null ? entityClassName.hashCode() : 0; - } - - @Override - public String toString() { - return "CustomTrackingRevisionEntity(entityClassName = " + entityClassName + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java deleted file mode 100644 index 61edb90617af..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.annotations.AttributeAccessor; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl; -import org.hibernate.property.access.spi.PropertyAccess; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12063") -public class AttributeAccessorTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class }; - } - - @Test - public void testAttributeAccessor() { - // Verify that the accessor was triggered during metadata building phase. - assertTrue( BasicAttributeAccessor.invoked ); - - // Create an audited entity - doInJPA( this::entityManagerFactory, entityManager -> { - final Foo foo = new Foo( 1, "ABC" ); - entityManager.persist( foo ); - } ); - - // query the entity. - doInJPA( this::entityManagerFactory, entityManager -> { - final Foo foo = getAuditReader().find( Foo.class, 1, 1 ); - assertEquals( "ABC", foo.getName() ); - } ); - } - - @Entity(name = "Foo") - @Audited - public static class Foo { - private Integer id; - private String name; - - public Foo() { - - } - - public Foo(Integer id) { - this.id = id; - } - - public Foo(Integer id, String name) { - this.id = id; - this.name = name; - } - - @Id - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @AttributeAccessor( strategy = BasicAttributeAccessor.class ) - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - public static class BasicAttributeAccessor extends PropertyAccessStrategyBasicImpl { - static boolean invoked; - @Override - public PropertyAccess buildPropertyAccess(Class containerJavaType, String propertyName, boolean setterRequired) { - invoked = true; - return super.buildPropertyAccess( containerJavaType, propertyName, setterRequired ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/Country.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/Country.java deleted file mode 100644 index 8fec9c93272c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/Country.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class Country { - @Id - @Column(length = 4) - private Integer code; - - @Column(length = 40) - private String name; - - /** - * Default constructor for persistence provider. - */ - @SuppressWarnings("unused") - private Country() { - } - - private Country(Integer code, String naam) { - this.code = code; - this.name = naam; - } - - public Integer getCode() { - return code; - } - - public String getName() { - return name; - } - - public static Country of(Integer code, String name) { - return new Country( code, name ); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((code == null) ? 0 : code.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - Country other = (Country) obj; - if ( code == null ) { - if ( other.code != null ) { - return false; - } - } - else if ( !code.equals( other.code ) ) { - return false; - } - if ( name == null ) { - if ( other.name != null ) { - return false; - } - } - else if ( !name.equals( other.name ) ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java deleted file mode 100644 index d980e1e9bd38..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class FieldAccessType extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {FieldAccessTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - FieldAccessTypeEntity fate = new FieldAccessTypeEntity( "data" ); - em.persist( fate ); - id1 = fate.readId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - fate = em.find( FieldAccessTypeEntity.class, id1 ); - fate.writeData( "data2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( FieldAccessTypeEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - FieldAccessTypeEntity ver1 = new FieldAccessTypeEntity( id1, "data" ); - FieldAccessTypeEntity ver2 = new FieldAccessTypeEntity( id1, "data2" ); - Assert.assertEquals( ver1, getAuditReader().find( FieldAccessTypeEntity.class, id1, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( FieldAccessTypeEntity.class, id1, 2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessTypeEntity.java deleted file mode 100644 index 0cc783dfa807..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessTypeEntity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class FieldAccessTypeEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String data; - - public FieldAccessTypeEntity() { - } - - public FieldAccessTypeEntity(String data) { - this.data = data; - } - - public FieldAccessTypeEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - throw new RuntimeException(); - } - - public void setId(Integer id) { - throw new RuntimeException(); - } - - public String getData() { - throw new RuntimeException(); - } - - public void setData(String data) { - throw new RuntimeException(); - } - - public Integer readId() { - return id; - } - - public void writeData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof FieldAccessTypeEntity) ) { - return false; - } - - FieldAccessTypeEntity that = (FieldAccessTypeEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java deleted file mode 100644 index 3c2bfc34a417..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class ImmutableClassAccessType extends BaseEnversJPAFunctionalTestCase { - private Country country; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Country.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - country = Country.of( 123, "Germany" ); - em.persist( country ); - em.getTransaction().commit(); - - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ) - .equals( - getAuditReader().getRevisions( - Country.class, - country.getCode() - ) - ); - } - - @Test - public void testHistoryOfId1() { - Country country1 = getEntityManager().find( - Country.class, - country.getCode() - ); - assertEquals( country1, country ); - - Country history = getAuditReader().find( Country.class, country1.getCode(), 1 ); - assertEquals( country, history ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java deleted file mode 100644 index 5cc41993002a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessType.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MixedAccessType extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MixedAccessTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - MixedAccessTypeEntity mate = new MixedAccessTypeEntity( "data" ); - em.persist( mate ); - id1 = mate.readId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - mate = em.find( MixedAccessTypeEntity.class, id1 ); - mate.writeData( "data2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( MixedAccessTypeEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - MixedAccessTypeEntity ver1 = new MixedAccessTypeEntity( id1, "data" ); - MixedAccessTypeEntity ver2 = new MixedAccessTypeEntity( id1, "data2" ); - - MixedAccessTypeEntity rev1 = getAuditReader().find( MixedAccessTypeEntity.class, id1, 1 ); - MixedAccessTypeEntity rev2 = getAuditReader().find( MixedAccessTypeEntity.class, id1, 2 ); - - assert rev1.isDataSet(); - assert rev2.isDataSet(); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeEntity.java deleted file mode 100644 index 20d9857999ba..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/MixedAccessTypeEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import jakarta.persistence.AccessType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Transient; - -import jakarta.persistence.Access; -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class MixedAccessTypeEntity { - @Id - @GeneratedValue - private Integer id; - - @Access(AccessType.PROPERTY) - private String data; - - @Transient - private boolean dataSet; - - public MixedAccessTypeEntity() { - } - - public MixedAccessTypeEntity(String data) { - this.data = data; - } - - public MixedAccessTypeEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - throw new RuntimeException(); - } - - public void setId(Integer id) { - throw new RuntimeException(); - } - - // TODO: this should be on the property. But how to discover in AnnotationsMetadataReader that the - // we should read annotations from fields, even though the access type is "property"? - @Audited - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - dataSet = true; - } - - public boolean isDataSet() { - return dataSet; - } - - public Integer readId() { - return id; - } - - public void writeData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MixedAccessTypeEntity) ) { - return false; - } - - MixedAccessTypeEntity that = (MixedAccessTypeEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java deleted file mode 100644 index 2b34b0c97cb3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class PropertyAccessType extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertyAccessTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - PropertyAccessTypeEntity pate = new PropertyAccessTypeEntity( "data" ); - em.persist( pate ); - id1 = pate.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - pate = em.find( PropertyAccessTypeEntity.class, id1 ); - pate.writeData( "data2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PropertyAccessTypeEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - PropertyAccessTypeEntity ver1 = new PropertyAccessTypeEntity( id1, "data" ); - PropertyAccessTypeEntity ver2 = new PropertyAccessTypeEntity( id1, "data2" ); - - PropertyAccessTypeEntity rev1 = getAuditReader().find( PropertyAccessTypeEntity.class, id1, 1 ); - PropertyAccessTypeEntity rev2 = getAuditReader().find( PropertyAccessTypeEntity.class, id1, 2 ); - - assert rev1.isIdSet(); - assert rev2.isIdSet(); - - assert rev1.isDataSet(); - assert rev2.isDataSet(); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessTypeEntity.java deleted file mode 100644 index cf96e9499db4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessTypeEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.accesstype; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Transient; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class PropertyAccessTypeEntity { - private Integer id; - private String data; - - private boolean idSet; - private boolean dataSet; - - public PropertyAccessTypeEntity() { - } - - public PropertyAccessTypeEntity(String data) { - this.data = data; - } - - public PropertyAccessTypeEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - @Id - @GeneratedValue - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - idSet = true; - } - - @Audited - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - dataSet = true; - } - - @Transient - public boolean isIdSet() { - return idSet; - } - - @Transient - public boolean isDataSet() { - return dataSet; - } - - public void writeData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PropertyAccessTypeEntity) ) { - return false; - } - - PropertyAccessTypeEntity that = (PropertyAccessTypeEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java deleted file mode 100644 index e2ca5c491fa0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.auditReader; - -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -/** - * A test which checks the correct behavior of AuditReader.isEntityClassAudited(Class entityClass). - * - * @author Hernan Chanfreau - */ -public class AuditReaderAPITest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {AuditedTestEntity.class, NotAuditedTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - AuditedTestEntity ent1 = new AuditedTestEntity( 1, "str1" ); - NotAuditedTestEntity ent2 = new NotAuditedTestEntity( 1, "str1" ); - - em.persist( ent1 ); - em.persist( ent2 ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - - ent1 = em.find( AuditedTestEntity.class, 1 ); - ent2 = em.find( NotAuditedTestEntity.class, 1 ); - ent1.setStr1( "str2" ); - ent2.setStr1( "str2" ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ent1 = em.find( AuditedTestEntity.class, 1 ); - em.remove( ent1 ); - em.getTransaction().commit(); - } - - @Test - public void testIsEntityClassAuditedForAuditedEntity() { - assertTrue( getAuditReader().isEntityClassAudited( AuditedTestEntity.class ) ); - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( AuditedTestEntity.class, 1 ) ); - } - - @Test - public void testIsEntityClassAuditedForNotAuditedEntity() { - - assert !getAuditReader().isEntityClassAudited( NotAuditedTestEntity.class ); - - try { - getAuditReader().getRevisions( NotAuditedTestEntity.class, 1 ); - } - catch (NotAuditedException nae) { - // it's ok because the entity is not audited - assert true; - } - } - - @Test - @JiraKey( value = "HHH-7555" ) - public void testFindRevisionEntitiesWithoutDeletions() { - List revisionInfos = getAuditReader().createQuery() - .forRevisionsOfEntity( AuditedTestEntity.class, false ) - .getResultList(); - assertEquals( 2, revisionInfos.size() ); - revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); - } - - @Test - @JiraKey( value = "HHH-7555" ) - public void testFindRevisionEntitiesWithDeletions() { - List revisionInfos = getAuditReader().createQuery() - .forRevisionsOfEntity( AuditedTestEntity.class, true ) - .getResultList(); - assertEquals( 3, revisionInfos.size() ); - revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); - } - - @Test - @JiraKey( value = "HHH-7555" ) - public void testFindRevisionEntitiesNonAuditedEntity() { - try { - List revisionInfos = getAuditReader().createQuery() - .forRevisionsOfEntity( NotAuditedTestEntity.class, false ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( NotAuditedException e ) { - // expected - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditedTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditedTestEntity.java deleted file mode 100644 index a4dcc7899d7d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditedTestEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.auditReader; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Hernan Chanfreau - */ -@Entity -public class AuditedTestEntity { - @Id - private Integer id; - - @Audited - private String str1; - - public AuditedTestEntity() { - } - - public AuditedTestEntity(String str1) { - this.str1 = str1; - } - - public AuditedTestEntity(Integer id, String str1) { - this.id = id; - this.str1 = str1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedTestEntity) ) { - return false; - } - - AuditedTestEntity that = (AuditedTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java deleted file mode 100644 index 16d41cbde8f2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.auditReader; - -import java.util.Arrays; -import java.util.Map; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static junit.framework.TestCase.assertNull; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * A test which verifies the behavior of the various {@link AuditReader} find implementations when the - * configuration option {@link EnversSettings#FIND_BY_REVISION_EXACT_MATCH} is enabled. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-13500") -public class FindByRevisionExactMatchOptionTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - options.put( EnversSettings.FIND_BY_REVISION_EXACT_MATCH, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntNoAutoIdTestEntity.class }; - } - - @Priority(10) - @Test - public void initData() { - // Insert entity with id=1, numVal=1, revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 1, 1 ); - entityManager.persist( entity ); - } ); - - // Update entity with id=1, setting numVal=11, revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = entityManager.find( IntNoAutoIdTestEntity.class, 1 ); - entity.setNumVal( 11 ); - entityManager.merge( entity ); - } ); - - // Insert entity with id=2, numVal=2, revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 2, 2 ); - entityManager.persist( entity ); - } ); - - // Update entity with id=2, setting numVal=22, revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = entityManager.find( IntNoAutoIdTestEntity.class, 2 ); - entity.setNumVal( 22 ); - entityManager.merge( entity ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, 1 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, 2 ) ); - } - - @Test - public void testFindEntityId1() { - final AuditReader auditReader = getAuditReader(); - assertEquals( new IntNoAutoIdTestEntity( 1, 1 ), auditReader.find( IntNoAutoIdTestEntity.class, 1, 1 ) ); - assertEquals( new IntNoAutoIdTestEntity( 11, 1 ), auditReader.find( IntNoAutoIdTestEntity.class, 1, 2 ) ); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 1, 3 ) ); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 1, 4 ) ); - } - - @Test - public void testFindEntityId2() { - final AuditReader auditReader = getAuditReader(); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 2, 1 ) ); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 2, 2 ) ); - assertEquals( new IntNoAutoIdTestEntity( 2, 2 ), auditReader.find( IntNoAutoIdTestEntity.class, 2, 3 ) ); - assertEquals( new IntNoAutoIdTestEntity( 22, 2 ), auditReader.find( IntNoAutoIdTestEntity.class, 2, 4 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/NotAuditedTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/NotAuditedTestEntity.java deleted file mode 100644 index 38e05d6989f3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/NotAuditedTestEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.auditReader; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class NotAuditedTestEntity { - @Id - private Integer id; - - private String str1; - - public NotAuditedTestEntity() { - } - - public NotAuditedTestEntity(String str1) { - this.str1 = str1; - } - - public NotAuditedTestEntity(Integer id, String str1) { - this.id = id; - this.str1 = str1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotAuditedTestEntity) ) { - return false; - } - - NotAuditedTestEntity that = (NotAuditedTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity1.java deleted file mode 100644 index 64a885c084c7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity1.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BasicTestEntity1 { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str1; - - @Audited - private long long1; - - public BasicTestEntity1() { - } - - public BasicTestEntity1(String str1, long long1) { - this.str1 = str1; - this.long1 = long1; - } - - public BasicTestEntity1(Integer id, String str1, long long1) { - this.id = id; - this.str1 = str1; - this.long1 = long1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public long getLong1() { - return long1; - } - - public void setLong1(long long1) { - this.long1 = long1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BasicTestEntity1) ) { - return false; - } - - BasicTestEntity1 that = (BasicTestEntity1) o; - - if ( long1 != that.long1 ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (int) (long1 ^ (long1 >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity2.java deleted file mode 100644 index 8d1450c131ca..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity2.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BasicTestEntity2 { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str1; - - private String str2; - - public BasicTestEntity2() { - } - - public BasicTestEntity2(String str1, String str2) { - this.str1 = str1; - this.str2 = str2; - } - - public BasicTestEntity2(Integer id, String str1, String str2) { - this.id = id; - this.str1 = str1; - this.str2 = str2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BasicTestEntity2) ) { - return false; - } - - BasicTestEntity2 that = (BasicTestEntity2) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity3.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity3.java deleted file mode 100644 index 40fb84e6b42f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity3.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BasicTestEntity3 { - @Id - @GeneratedValue - private Integer id; - - private String str1; - - private String str2; - - public BasicTestEntity3() { - } - - public BasicTestEntity3(String str1, String str2) { - this.str1 = str1; - this.str2 = str2; - } - - public BasicTestEntity3(Integer id, String str1, String str2) { - this.id = id; - this.str1 = str1; - this.str2 = str2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BasicTestEntity3) ) { - return false; - } - - BasicTestEntity3 that = (BasicTestEntity3) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity4.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity4.java deleted file mode 100644 index 3f4fa6b90049..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTestEntity4.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class BasicTestEntity4 { - @Id - @GeneratedValue - private Integer id; - - private String str1; - - private String str2; - - public BasicTestEntity4() { - } - - public BasicTestEntity4(String str1, String str2) { - this.str1 = str1; - this.str2 = str2; - } - - public BasicTestEntity4(Integer id, String str1, String str2) { - this.id = id; - this.str1 = str1; - this.str2 = str2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BasicTestEntity4) ) { - return false; - } - - BasicTestEntity4 that = (BasicTestEntity4) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java deleted file mode 100644 index a45e44ab8885..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import org.hibernate.annotations.Generated; -import org.hibernate.dialect.H2Dialect; -import org.hibernate.envers.Audited; -import org.hibernate.mapping.Table; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.RequiresDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.ComparisonFailure; -import org.junit.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import static org.hibernate.boot.model.naming.Identifier.toIdentifier; -import static org.hibernate.engine.jdbc.Size.DEFAULT_LENGTH; -import static org.hibernate.engine.jdbc.Size.DEFAULT_PRECISION; -import static org.hibernate.engine.jdbc.Size.DEFAULT_SCALE; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * This test verifies that resolving a column mapping's {@code sql-type} for HBM XML is performed - * correctly such that when a column supplies a {@code columnDefinition}, Envers properly builds - * its schema based on the right type rather than directly using the column definition as-is. - * - * The following illustrate some examples of expected transformations: - * - *

  • {@code @Column(columnDefinition = "varchar(10) not null")} => {@code sql-type = "varchar(255)"}
  • - *
  • {@code @Column(length = 10, columnDefinition = "varchar(10) not null")} => {@code sql-type = "varchar(10)"}
  • - *
  • {@code @Column(columnDefinition = "integer not null auto_increment")} => {@code sql-type = "integer"}
  • - * - * It is important to point out that resolving the sql-types length/precision/scale is all based on the - * values supplied as part of the {@link Column} annotation itself and not what is in the definition text. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-10844") -@RequiresDialect(value = H2Dialect.class) -public class BasicTypeColumnDefinitionTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { BasicTypeContainer.class }; - } - - // By reverting changes for HHH-10844 to restore columnDefinition original behavior, this implies this test will - // now fail because the expected sql-type will once again be identical to the base table mapping. - @Test(expected = ComparisonFailure.class) - @Priority(10) - public void testMetadataBindings() { - final Long expectedDefaultLength = new Long( DEFAULT_LENGTH ); - final Integer expectedDefaultPrecision = Integer.valueOf( DEFAULT_PRECISION ); - final Integer expectedDefaultScale = Integer.valueOf( DEFAULT_SCALE ); - - final Table auditTable = metadata().getEntityBinding( BasicTypeContainer.class.getName() + "_AUD" ).getTable(); - - final org.hibernate.mapping.Column caseNumber = auditTable.getColumn( toIdentifier( "caseNumber" ) ); - assertEquals( "integer", caseNumber.getSqlType() ); - assertEquals( expectedDefaultLength, caseNumber.getLength() ); - assertEquals( expectedDefaultPrecision, caseNumber.getPrecision() ); - assertEquals( expectedDefaultScale, caseNumber.getScale() ); - - final org.hibernate.mapping.Column colDef = auditTable.getColumn( toIdentifier( "columnWithDefinition" ) ); - assertEquals( "varchar(10)", colDef.getSqlType() ); - assertEquals( new Long( 10 ), colDef.getLength() ); - assertEquals( expectedDefaultPrecision, colDef.getPrecision() ); - assertEquals( expectedDefaultScale, colDef.getScale() ); - } - - @Test - @Priority(10) - public void initData() { - final BasicTypeContainer detachedEntity = doInJPA( this::entityManagerFactory, entityManager -> { - final BasicTypeContainer entity = new BasicTypeContainer(); - entity.setData( "test" ); - entity.setColumnWithDefinition( "1234567890" ); - entityManager.persist( entity ); - return entity; - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - final BasicTypeContainer entity = entityManager.find( BasicTypeContainer.class, detachedEntity.getId() ); - entity.setData( "test2" ); - entityManager.merge( entity ); - } ); - } - - @Test - public void testRevisionHistory() { - assertEquals( 2, getAuditReader().getRevisions( BasicTypeContainer.class, 1 ).size() ); - - final BasicTypeContainer rev1 = getAuditReader().find( BasicTypeContainer.class, 1, 1 ); - assertEquals( "test", rev1.getData() ); - assertEquals( "1234567890", rev1.getColumnWithDefinition() ); - assertEquals( Integer.valueOf( 1 ), rev1.getCaseNumber() ); - - final BasicTypeContainer rev2 = getAuditReader().find( BasicTypeContainer.class, 1, 2 ); - assertEquals( "test2", rev2.getData() ); - assertEquals( "1234567890", rev2.getColumnWithDefinition() ); - assertEquals( Integer.valueOf( 1 ), rev2.getCaseNumber() ); - } - - @Entity(name = "BasicTypeContainer") - @Audited - public static class BasicTypeContainer { - @Id - @GeneratedValue - private Integer id; - - @Generated - @Column(name = "caseNumber", columnDefinition = "integer not null auto_increment") - private Integer caseNumber; - - @Column(name = "columnWithDefinition", length = 10, nullable = false, columnDefinition = "varchar(10) not null") - private String columnWithDefinition; - - private String data; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getCaseNumber() { - return caseNumber; - } - - public void setCaseNumber(Integer caseNumber) { - this.caseNumber = caseNumber; - } - - public String getColumnWithDefinition() { - return columnWithDefinition; - } - - public void setColumnWithDefinition(String columnWithDefinition) { - this.columnWithDefinition = columnWithDefinition; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java deleted file mode 100644 index 88bd6b4f3f27..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.math.BigDecimal; -import java.util.Arrays; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11988") -public class BigDecimalTypeTest extends BaseEnversJPAFunctionalTestCase { - - private Integer entityId; - private Double bigDecimalValue = 2.2d; - - @Test - @Priority(10) - public void initData() { - // Triggers RevisionType.ADD - EntityManager entityManager = getOrCreateEntityManager(); - try { - entityManager.getTransaction().begin(); - final BigDecimalEntity entity = new BigDecimalEntity( BigDecimal.valueOf( bigDecimalValue ), "Test" ); - System.out.println( entity.getBigDecimal().scale() ); - entityManager.persist( entity ); - entityManager.getTransaction().commit(); - this.entityId = entity.getId(); - } - catch ( Throwable t ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw t; - } - finally { - entityManager.close(); - } - - // Should *not* trigger a revision - entityManager = getOrCreateEntityManager(); - try { - entityManager.getTransaction().begin(); - final BigDecimalEntity entity = entityManager.find( BigDecimalEntity.class, entityId ); - entity.setData( "Updated" ); - entity.setBigDecimal( BigDecimal.valueOf( bigDecimalValue ) ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - catch ( Throwable t ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw t; - } - finally { - entityManager.close(); - } - - // Triggers RevisionType.MOD - entityManager = getOrCreateEntityManager(); - try { - entityManager.getTransaction().begin(); - final BigDecimalEntity entity = entityManager.find( BigDecimalEntity.class, entityId ); - entity.setData( "Updated2" ); - entity.setBigDecimal( BigDecimal.valueOf( bigDecimalValue + 1d ) ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - catch ( Throwable t ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw t; - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( BigDecimalEntity.class, entityId ) ); - } - - @Test - public void testRevisionHistory() { - final BigDecimalEntity rev1 = getAuditReader().find( BigDecimalEntity.class, entityId, 1 ); - assertTrue( BigDecimal.valueOf( bigDecimalValue ).compareTo( rev1.getBigDecimal() ) == 0 ); - assertNull( rev1.getData() ); - - final BigDecimalEntity rev2 = getAuditReader().find( BigDecimalEntity.class, entityId, 2 ); - assertTrue( BigDecimal.valueOf( bigDecimalValue + 1d ).compareTo( rev2.getBigDecimal() ) == 0 ); - assertNull( rev2.getData() ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { BigDecimalEntity.class }; - } - - @Entity(name = "BigDecimalEntity") - @Audited - public static class BigDecimalEntity { - @Id - @GeneratedValue - private Integer id; - @Column(precision = 23, scale = 6) - private BigDecimal bigDecimal; - @NotAudited - private String data; - - BigDecimalEntity() { - - } - - BigDecimalEntity(BigDecimal bigDecimal, String data) { - this.bigDecimal = bigDecimal; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public BigDecimal getBigDecimal() { - return bigDecimal; - } - - public void setBigDecimal(BigDecimal bigDecimal) { - this.bigDecimal = bigDecimal; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java deleted file mode 100644 index 0ff878012966..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7003") -public class ColumnScalePrecisionTest extends BaseEnversJPAFunctionalTestCase { - private Table auditTable = null; - private Table originalTable = null; - private Long id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { ScalePrecisionEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - ScalePrecisionEntity entity = new ScalePrecisionEntity( 13.0 ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - auditTable = metadata().getEntityBinding( "org.hibernate.orm.test.envers.integration.basic.ScalePrecisionEntity_AUD" ) - .getTable(); - originalTable = metadata().getEntityBinding( "org.hibernate.orm.test.envers.integration.basic.ScalePrecisionEntity" ) - .getTable(); - } - - @Test - public void testColumnScalePrecision() { - Column testColumn = new Column( "wholeNumber" ); - Column scalePrecisionAuditColumn = auditTable.getColumn( testColumn ); - Column scalePrecisionColumn = originalTable.getColumn( testColumn ); - - Assert.assertNotNull( scalePrecisionAuditColumn ); - Assert.assertEquals( scalePrecisionColumn.getPrecision(), scalePrecisionAuditColumn.getPrecision() ); - Assert.assertEquals( scalePrecisionColumn.getScale(), scalePrecisionAuditColumn.getScale() ); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( ScalePrecisionEntity.class, id ) ); - } - - @Test - public void testHistoryOfScalePrecisionEntity() { - ScalePrecisionEntity ver1 = new ScalePrecisionEntity( 13.0, id ); - - Assert.assertEquals( ver1, getAuditReader().find( ScalePrecisionEntity.class, id, 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java deleted file mode 100644 index 8b14aaf45227..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Delete extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity2.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - BasicTestEntity2 bte1 = new BasicTestEntity2( "x", "a" ); - BasicTestEntity2 bte2 = new BasicTestEntity2( "y", "b" ); - BasicTestEntity2 bte3 = new BasicTestEntity2( "z", "c" ); - em.persist( bte1 ); - em.persist( bte2 ); - em.persist( bte3 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - bte1 = em.find( BasicTestEntity2.class, bte1.getId() ); - bte2 = em.find( BasicTestEntity2.class, bte2.getId() ); - bte3 = em.find( BasicTestEntity2.class, bte3.getId() ); - bte1.setStr1( "x2" ); - bte2.setStr2( "b2" ); - em.remove( bte3 ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - bte2 = em.find( BasicTestEntity2.class, bte2.getId() ); - em.remove( bte2 ); - - em.getTransaction().commit(); - - // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); - - bte1 = em.find( BasicTestEntity2.class, bte1.getId() ); - em.remove( bte1 ); - - em.getTransaction().commit(); - - id1 = bte1.getId(); - id2 = bte2.getId(); - id3 = bte3.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id1 ) ); - - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id2 ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id3 ) ); - } - - @Test - public void testHistoryOfId1() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id1, "x", null ); - BasicTestEntity2 ver2 = new BasicTestEntity2( id1, "x2", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 4 ) == null; - } - - @Test - public void testHistoryOfId2() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id2, "y", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id2, 3 ) == null; - assert getAuditReader().find( BasicTestEntity2.class, id2, 4 ) == null; - } - - @Test - public void testHistoryOfId3() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id3, "z", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id3, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id3, 2 ) == null; - assert getAuditReader().find( BasicTestEntity2.class, id3, 3 ) == null; - assert getAuditReader().find( BasicTestEntity2.class, id3, 4 ) == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java deleted file mode 100644 index 1fc036a7dc49..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.OracleDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.RequiresDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7246") -@RequiresDialect(OracleDialect.class) -public class EmptyStringTest extends BaseEnversJPAFunctionalTestCase { - private Integer emptyId = null; - private Integer nullId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - StrTestEntity emptyEntity = new StrTestEntity( "" ); - em.persist( emptyEntity ); - StrTestEntity nullEntity = new StrTestEntity( null ); - em.persist( nullEntity ); - em.getTransaction().commit(); - - emptyId = emptyEntity.getId(); - nullId = nullEntity.getId(); - - em.close(); - em = getEntityManager(); - - // Should not generate revision after NULL to "" modification and vice versa on Oracle. - em.getTransaction().begin(); - emptyEntity = em.find( StrTestEntity.class, emptyId ); - emptyEntity.setStr( null ); - em.merge( emptyEntity ); - nullEntity = em.find( StrTestEntity.class, nullId ); - nullEntity.setStr( "" ); - em.merge( nullEntity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, emptyId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, nullId ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java deleted file mode 100644 index 3c676b2fd2cf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class GlobalVersioned extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity4.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity4 bte1 = new BasicTestEntity4( "x", "y" ); - em.persist( bte1 ); - id1 = bte1.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - bte1 = em.find( BasicTestEntity4.class, id1 ); - bte1.setStr1( "a" ); - bte1.setStr2( "b" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity4.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - BasicTestEntity4 ver1 = new BasicTestEntity4( id1, "x", "y" ); - BasicTestEntity4 ver2 = new BasicTestEntity4( id1, "a", "b" ); - - assert getAuditReader().find( BasicTestEntity4.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity4.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java deleted file mode 100644 index c264628cc0c3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ManyOperationsInTransaction extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - @Test - - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - BasicTestEntity1 bte1 = new BasicTestEntity1( "x", 1 ); - BasicTestEntity1 bte2 = new BasicTestEntity1( "y", 20 ); - em.persist( bte1 ); - em.persist( bte2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - bte1 = em.find( BasicTestEntity1.class, bte1.getId() ); - bte2 = em.find( BasicTestEntity1.class, bte2.getId() ); - BasicTestEntity1 bte3 = new BasicTestEntity1( "z", 300 ); - bte1.setStr1( "x2" ); - bte2.setLong1( 21 ); - em.persist( bte3 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - bte2 = em.find( BasicTestEntity1.class, bte2.getId() ); - bte3 = em.find( BasicTestEntity1.class, bte3.getId() ); - bte2.setStr1( "y3" ); - bte2.setLong1( 22 ); - bte3.setStr1( "z3" ); - - em.getTransaction().commit(); - - id1 = bte1.getId(); - id2 = bte2.getId(); - id3 = bte3.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id1 ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id2 ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id3 ) ); - } - - @Test - public void testHistoryOfId1() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id1, "x2", 1 ); - - assert getAuditReader().find( BasicTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 3 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId2() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id2, "y", 20 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y", 21 ); - BasicTestEntity1 ver3 = new BasicTestEntity1( id2, "y3", 22 ); - - assert getAuditReader().find( BasicTestEntity1.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 2 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 3 ).equals( ver3 ); - } - - @Test - public void testHistoryOfId3() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id3, "z", 300 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id3, "z3", 300 ); - - assert getAuditReader().find( BasicTestEntity1.class, id3, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id3, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 3 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java deleted file mode 100644 index be8fb51e7117..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.List; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.mapping.PersistentClass; - -import org.junit.Assert; -import org.junit.Test; - -import static org.hibernate.envers.internal.tools.Tools.collectionToList; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NoneAudited extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity3.class}; - } - - @Test - public void testRevisionInfoTableNotCreated() { - @SuppressWarnings("unchecked") List pcs = collectionToList( metadata().getEntityBindings() ); - Assert.assertEquals( 1, pcs.size() ); - Assert.assertTrue( pcs.get( 0 ).getClassName().contains( "BasicTestEntity3" ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java deleted file mode 100644 index 510f9bba98e5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotVersioned extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class, BasicTestEntity3.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity3 bte1 = new BasicTestEntity3( "x", "y" ); - em.persist( bte1 ); - id1 = bte1.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - bte1 = em.find( BasicTestEntity3.class, id1 ); - bte1.setStr1( "a" ); - bte1.setStr2( "b" ); - em.getTransaction().commit(); - } - - @Test(expected = NotAuditedException.class) - public void testRevisionsCounts() { - getAuditReader().getRevisions( BasicTestEntity3.class, id1 ); - } - - @Test(expected = NotAuditedException.class) - public void testHistoryOfId1() { - getAuditReader().find( BasicTestEntity3.class, id1, 1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java deleted file mode 100644 index 3896b72a2f7d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NullProperties extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } - - private void modifyEntity(Integer id, String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); - bte1.setLong1( lng ); - bte1.setStr1( str ); - em.getTransaction().commit(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - id2 = addNewEntity( null, 20 ); // rev 2 - - modifyEntity( id1, null, 1 ); // rev 3 - modifyEntity( id2, "y2", 20 ); // rev 4 - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id1 ) ); - - assert Arrays.asList( 2, 4 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id2 ) ); - } - - @Test - public void testHistoryOfId1() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id1, null, 1 ); - - assert getAuditReader().find( BasicTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 4 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId2() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id2, null, 20 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y2", 20 ); - - assert getAuditReader().find( BasicTestEntity1.class, id2, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 4 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java deleted file mode 100644 index 63ec907fcb1d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Map; -import jakarta.persistence.TransactionRequiredException; - -import org.hibernate.Session; -import org.hibernate.dialect.MySQLDialect; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.integration.collection.norevision.Name; -import org.hibernate.orm.test.envers.integration.collection.norevision.Person; - -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-5565") -@SkipForDialect(value = MySQLDialect.class, comment = "The test hangs on") -public class OutsideTransactionTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, Person.class, Name.class}; - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - settings.put( EnversSettings.REVISION_ON_COLLECTION_CHANGE, "true" ); - } - - @Test(expected = TransactionRequiredException.class) - public void testInsertOutsideActiveTransaction() { - Session session = openSession(); - - // Illegal insertion of entity outside of active transaction. - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.flush(); - - session.close(); - } - - @Test(expected = TransactionRequiredException.class) - public void testMergeOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - // Illegal modification of entity state outside of active transaction. - entity.setStr( "modified data" ); - session.merge( entity ); - session.flush(); - - session.close(); - } - - @Test(expected = TransactionRequiredException.class) - public void testDeleteOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - // Illegal removal of entity outside of active transaction. - session.remove( entity ); - session.flush(); - - session.close(); - } - - @Test(expected = TransactionRequiredException.class) - public void testCollectionUpdateOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - Person person = new Person(); - Name name = new Name(); - name.setName( "Name" ); - person.getNames().add( name ); - session.persist( person ); - session.getTransaction().commit(); - - // Illegal collection update outside of active transaction. - person.getNames().remove( name ); - session.merge( person ); - session.flush(); - - session.close(); - } - - @Test(expected = TransactionRequiredException.class) - public void testCollectionRemovalOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - Person person = new Person(); - Name name = new Name(); - name.setName( "Name" ); - person.getNames().add( name ); - session.persist( person ); - session.getTransaction().commit(); - - // Illegal collection removal outside of active transaction. - person.setNames( null ); - session.merge( person ); - session.flush(); - - session.close(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java deleted file mode 100644 index f295ae92f610..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import org.hibernate.Session; -import org.hibernate.action.spi.AfterTransactionCompletionProcess; -import org.hibernate.action.spi.BeforeTransactionCompletionProcess; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.envers.internal.tools.MutableInteger; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.event.service.spi.EventListenerRegistry; -import org.hibernate.event.spi.EventType; -import org.hibernate.event.spi.PostInsertEvent; -import org.hibernate.event.spi.PostInsertEventListener; -import org.hibernate.persister.entity.EntityPersister; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class RegisterUserEventListenersTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @JiraKey(value = "HHH-7478") - public void testTransactionProcessSynchronization() { - final EventListenerRegistry registry = sessionFactory().getServiceRegistry() - .getService( EventListenerRegistry.class ); - final CountingPostInsertTransactionBoundaryListener listener = new CountingPostInsertTransactionBoundaryListener(); - - registry.getEventListenerGroup( EventType.POST_INSERT ).appendListener( listener ); - - Session session = openSession(); - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "str1" ); - session.persist( entity ); - session.getTransaction().commit(); - session.close(); - - // Post insert listener invoked three times - before/after insertion of original data, - // revision entity and audit row. - Assert.assertEquals( 3, listener.getBeforeCount() ); - Assert.assertEquals( 3, listener.getAfterCount() ); - } - - private static class CountingPostInsertTransactionBoundaryListener implements PostInsertEventListener { - private final MutableInteger beforeCounter = new MutableInteger(); - private final MutableInteger afterCounter = new MutableInteger(); - - @Override - public void onPostInsert(PostInsertEvent event) { - event.getSession().getActionQueue().registerProcess( - new BeforeTransactionCompletionProcess() { - @Override - public void doBeforeTransactionCompletion(SessionImplementor session) { - beforeCounter.increase(); - } - } - ); - event.getSession().getActionQueue().registerProcess( - new AfterTransactionCompletionProcess() { - @Override - public void doAfterTransactionCompletion(boolean success, SharedSessionContractImplementor session) { - afterCounter.increase(); - } - } - ); - } - - @Override - public boolean requiresPostCommitHandling(EntityPersister persister) { - return true; - } - - public int getBeforeCount() { - return beforeCounter.get(); - } - - public int getAfterCount() { - return afterCounter.get(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java deleted file mode 100644 index dfd2b86e1026..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Map; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -/** - * Test that when the {@link EnversSettings#GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG} is {@code false} - * that the ignore behavior is used by default rather than throwing {@code EntityNotFoundException}. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8051") -public class RelationTargetNotFoundConfigTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class, Bar.class, FooBar.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG, Boolean.FALSE ); - } - - - @Test - public void testRelationTargetNotFoundAction() { - // Revision 1, initialize the data for test case - doInJPA( this::entityManagerFactory, entityManager -> { - final Bar bar = new Bar( 1 ); - entityManager.persist( bar ); - - final FooBar fooBar1 = new FooBar( 1, "fooBar" ); - entityManager.persist( fooBar1 ); - - final FooBar fooBar2 = new FooBar( 2, "fooBar2" ); - entityManager.persist( fooBar2 ); - - final Foo foo = new Foo( 1, bar, fooBar1, fooBar2 ); - entityManager.persist( foo ); - } ); - - // This test verifies that everything is fine before doing various record manipulation changes. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get(entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - assertNotNull( rev1.getBar() ); - assertNotNull( rev1.getFooBar() ); - assertNotNull( rev1.getFooBar2() ); - } ); - - // Simulate the removal of main data table data by removing FooBar1 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); - } ); - - // This shouldn't fail because the audited entity data is cached in the audit table and exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - assertNotNull( rev1.getFooBar() ); - } ); - - // Simulate the removal of envers data via purge process by removing FooBar2 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); - } ); - - // Test querying history record where the reference audit row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. - assertNull( rev1.getFooBar2() ); - } ); - - // this simulates the removal of a non-audited entity from the main table - doInJPA( this::entityManagerFactory, entityManager -> { - // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); - } ); - - // Test querying history record where the reference non-audited row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException - assertNull( rev1.getBar() ); - } ); - } - - @Audited - @Entity(name = "Foo") - public static class Foo { - @Id - private Integer id; - - @ManyToOne - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Bar bar; - - @ManyToOne - private FooBar fooBar; - - @ManyToOne - private FooBar fooBar2; - - Foo() { - // Required by JPA - } - - Foo(Integer id, Bar bar, FooBar fooBar, FooBar fooBar2) { - this.id = id; - this.bar = bar; - this.fooBar = fooBar; - this.fooBar2 = fooBar2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Bar getBar() { - return bar; - } - - public void setBar(Bar bar) { - this.bar = bar; - } - - public FooBar getFooBar() { - return fooBar; - } - - public void setFooBar(FooBar fooBar) { - this.fooBar = fooBar; - } - - public FooBar getFooBar2() { - return fooBar2; - } - - public void setFooBar2(FooBar fooBar2) { - this.fooBar2 = fooBar2; - } - } - - @Entity(name = "Bar") - public static class Bar { - @Id - private Integer id; - - Bar() { - // Required by JPA - } - - Bar(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Audited - @Entity(name = "FooBar") - public static class FooBar { - @Id - private Integer id; - private String name; - - FooBar() { - // Required by JPA - } - - FooBar(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java deleted file mode 100644 index c99fa09446b7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.Entity; -import jakarta.persistence.EntityNotFoundException; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; - -/** - * Test that when using the legacy default behavior, any {@code EntityNotFoundException} will - * continue to be thrown, ala preserving pre 6.0 behavior. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8051") -public class RelationTargetNotFoundLegacyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class, Bar.class, FooBar.class }; - } - - @Test - public void testRelationTargetNotFoundAction() { - // Revision 1, initialize the data for test case - doInJPA( this::entityManagerFactory, entityManager -> { - final Bar bar = new Bar( 1 ); - entityManager.persist( bar ); - - final FooBar fooBar1 = new FooBar( 1, "fooBar" ); - entityManager.persist( fooBar1 ); - - final FooBar fooBar2 = new FooBar( 2, "fooBar2" ); - entityManager.persist( fooBar2 ); - - final Foo foo = new Foo( 1, bar, fooBar1, fooBar2 ); - entityManager.persist( foo ); - } ); - - // This test verifies that everything is fine before doing various record manipulation changes. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get(entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - assertNotNull( rev1.getBar() ); - assertNotNull( rev1.getFooBar() ); - assertNotNull( rev1.getFooBar2() ); - } ); - - // Simulate the removal of main data table data by removing FooBar1 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); - } ); - - // This shouldn't fail because the audited entity data is cached in the audit table and exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - assertNotNull( rev1.getFooBar() ); - } ); - - // Simulate the removal of envers data via purge process by removing FooBar2 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); - } ); - - // Test querying history record where the reference audit row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - try { - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. - assertNull( rev1.getFooBar2() ); - fail( "This expected an EntityNotFoundException to be thrown" ); - } - catch ( Exception e ) { - assertTyping(EntityNotFoundException.class, e ); - } - } ); - - // this simulates the removal of a non-audited entity from the main table - doInJPA( this::entityManagerFactory, entityManager -> { - // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); - } ); - - // Test querying history record where the reference non-audited row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - try { - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException - assertNull( rev1.getBar() ); - fail( "This expected an EntityNotFoundException to be thrown" ); - } - catch ( Exception e ) { - assertTyping( EntityNotFoundException.class, e ); - } - } ); - } - - @Audited - @Entity(name = "Foo") - public static class Foo { - @Id - private Integer id; - - @ManyToOne - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Bar bar; - - @ManyToOne - private FooBar fooBar; - - @ManyToOne - private FooBar fooBar2; - - Foo() { - // Required by JPA - } - - Foo(Integer id, Bar bar, FooBar fooBar, FooBar fooBar2) { - this.id = id; - this.bar = bar; - this.fooBar = fooBar; - this.fooBar2 = fooBar2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Bar getBar() { - return bar; - } - - public void setBar(Bar bar) { - this.bar = bar; - } - - public FooBar getFooBar() { - return fooBar; - } - - public void setFooBar(FooBar fooBar) { - this.fooBar = fooBar; - } - - public FooBar getFooBar2() { - return fooBar2; - } - - public void setFooBar2(FooBar fooBar2) { - this.fooBar2 = fooBar2; - } - } - - @Entity(name = "Bar") - public static class Bar { - @Id - private Integer id; - - Bar() { - // Required by JPA - } - - Bar(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Audited - @Entity(name = "FooBar") - public static class FooBar { - @Id - private Integer id; - private String name; - - FooBar() { - // Required by JPA - } - - FooBar(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java deleted file mode 100644 index 3553d16241a1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.RelationTargetNotFoundAction; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -/** - * Test that when using the override behavior for {@link RelationTargetNotFoundAction#IGNORE} that - * when {@code EntityNotFoundException} would be thrown, they're actually ignored. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8051") -public class RelationTargetNotFoundTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class, Bar.class, FooBar.class }; - } - - @Test - public void testRelationTargetNotFoundAction() { - // Revision 1, initialize the data for test case - doInJPA( this::entityManagerFactory, entityManager -> { - final Bar bar = new Bar( 1 ); - entityManager.persist( bar ); - - final FooBar fooBar1 = new FooBar( 1, "fooBar" ); - entityManager.persist( fooBar1 ); - - final FooBar fooBar2 = new FooBar( 2, "fooBar2" ); - entityManager.persist( fooBar2 ); - - final Foo foo = new Foo( 1, bar, fooBar1, fooBar2 ); - entityManager.persist( foo ); - } ); - - // This test verifies that everything is fine before doing various record manipulation changes. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get(entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - assertNotNull( rev1.getBar() ); - assertNotNull( rev1.getFooBar() ); - assertNotNull( rev1.getFooBar2() ); - } ); - - // Simulate the removal of main data table data by removing FooBar1 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); - } ); - - // This shouldn't fail because the audited entity data is cached in the audit table and exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - assertNotNull( rev1.getFooBar() ); - } ); - - // Simulate the removal of envers data via purge process by removing FooBar2 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); - } ); - - // Test querying history record where the reference audit row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. - assertNull( rev1.getFooBar2() ); - } ); - - // this simulates the removal of a non-audited entity from the main table - doInJPA( this::entityManagerFactory, entityManager -> { - // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); - } ); - - // Test querying history record where the reference non-audited row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); - assertNotNull( rev1 ); - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException - assertNull( rev1.getBar() ); - } ); - } - - @Audited(targetNotFoundAction = RelationTargetNotFoundAction.IGNORE) - @Entity(name = "Foo") - public static class Foo { - @Id - private Integer id; - - @ManyToOne - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Bar bar; - - @ManyToOne - private FooBar fooBar; - - @ManyToOne - private FooBar fooBar2; - - Foo() { - // Required by JPA - } - - Foo(Integer id, Bar bar, FooBar fooBar, FooBar fooBar2) { - this.id = id; - this.bar = bar; - this.fooBar = fooBar; - this.fooBar2 = fooBar2; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Bar getBar() { - return bar; - } - - public void setBar(Bar bar) { - this.bar = bar; - } - - public FooBar getFooBar() { - return fooBar; - } - - public void setFooBar(FooBar fooBar) { - this.fooBar = fooBar; - } - - public FooBar getFooBar2() { - return fooBar2; - } - - public void setFooBar2(FooBar fooBar2) { - this.fooBar2 = fooBar2; - } - } - - @Entity(name = "Bar") - public static class Bar { - @Id - private Integer id; - - Bar() { - // Required by JPA - } - - Bar(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Audited - @Entity(name = "FooBar") - public static class FooBar { - @Id - private Integer id; - private String name; - - FooBar() { - // Required by JPA - } - - FooBar(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ScalePrecisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ScalePrecisionEntity.java deleted file mode 100644 index 87bab3d1d2f5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ScalePrecisionEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class ScalePrecisionEntity implements Serializable { - @Id - @GeneratedValue - private Long id; - - @Column(precision = 3, scale = 0) - private Double wholeNumber; - - public ScalePrecisionEntity() { - } - - public ScalePrecisionEntity(Double wholeNumber) { - this.wholeNumber = wholeNumber; - } - - public ScalePrecisionEntity(Double wholeNumber, Long id) { - this.id = id; - this.wholeNumber = wholeNumber; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ScalePrecisionEntity) ) { - return false; - } - - ScalePrecisionEntity that = (ScalePrecisionEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( wholeNumber != null ? !wholeNumber.equals( that.wholeNumber ) : that.wholeNumber != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (wholeNumber != null ? wholeNumber.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ScalePrecisionEntity(id = " + id + ", wholeNumber = " + wholeNumber + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Double getWholeNumber() { - return wholeNumber; - } - - public void setWholeNumber(Double wholeNumber) { - this.wholeNumber = wholeNumber; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java deleted file mode 100644 index 45bf40ea126d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Simple extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - IntTestEntity ite = new IntTestEntity( 10 ); - em.persist( ite ); - id1 = ite.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ite = em.find( IntTestEntity.class, id1 ); - ite.setNumber( 20 ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( IntTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - IntTestEntity ver1 = new IntTestEntity( 10, id1 ); - IntTestEntity ver2 = new IntTestEntity( 20, id1 ); - - Assert.assertEquals( ver1, getAuditReader().find( IntTestEntity.class, id1, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( IntTestEntity.class, id1, 2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java deleted file mode 100644 index 9bf99afe51d7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SingleOperationInTransaction extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } - - private void modifyEntity(Integer id, String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); - bte1.setLong1( lng ); - bte1.setStr1( str ); - em.getTransaction().commit(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - id2 = addNewEntity( "y", 20 ); // rev 2 - id3 = addNewEntity( "z", 30 ); // rev 3 - - modifyEntity( id1, "x2", 2 ); // rev 4 - modifyEntity( id2, "y2", 20 ); // rev 5 - modifyEntity( id1, "x3", 3 ); // rev 6 - modifyEntity( id1, "x3", 3 ); // no rev - modifyEntity( id2, "y3", 21 ); // rev 7 - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 4, 6 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id1 ) ); - - assert Arrays.asList( 2, 5, 7 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id2 ) ); - - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id3 ) ); - } - - @Test - public void testRevisionsDates() { - for ( int i = 1; i < 7; i++ ) { - assert getAuditReader().getRevisionDate( i ).getTime() <= - getAuditReader().getRevisionDate( i + 1 ).getTime(); - } - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testNotExistingRevision() { - getAuditReader().getRevisionDate( 8 ); - } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalRevision() { - getAuditReader().getRevisionDate( 0 ); - } - - @Test - public void testHistoryOfId1() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id1, "x2", 2 ); - BasicTestEntity1 ver3 = new BasicTestEntity1( id1, "x3", 3 ); - - assert getAuditReader().find( BasicTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 4 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 5 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 6 ).equals( ver3 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 7 ).equals( ver3 ); - } - - @Test - public void testHistoryOfId2() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id2, "y", 20 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y2", 20 ); - BasicTestEntity1 ver3 = new BasicTestEntity1( id2, "y3", 21 ); - - assert getAuditReader().find( BasicTestEntity1.class, id2, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 4 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 5 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 6 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 7 ).equals( ver3 ); - } - - @Test - public void testHistoryOfId3() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id3, "z", 30 ); - - assert getAuditReader().find( BasicTestEntity1.class, id3, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id3, 2 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id3, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 4 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 5 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 6 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 7 ).equals( ver1 ); - } - - @Test - public void testHistoryOfNotExistingEntity() { - assert getAuditReader().find( BasicTestEntity1.class, id1 + id2 + id3, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id1 + id2 + id3, 7 ) == null; - } - - @Test - public void testRevisionsOfNotExistingEntity() { - assert getAuditReader().getRevisions( BasicTestEntity1.class, id1 + id2 + id3 ).size() == 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java deleted file mode 100644 index 86f6f7414ed7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.IntTestEntity; -import org.hibernate.internal.SessionImpl; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Tomasz Dziurko (tdziurko at gmail dot com) - */ -public class TransactionRollbackBehaviour extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Test - public void testAuditRecordsRollbackWithAutoClear() { - testAuditRecordsRollbackBehavior( false, true ); - } - - @Test - public void testAuditRecordsRollbackWithNoAutoClear() { - testAuditRecordsRollbackBehavior( false, false ); - } - - @Test - @JiraKey(value = "HHH-8189") - public void testFlushedAuditRecordsRollback() { - // default auto-clear behavior - testAuditRecordsRollbackBehavior( true, null ); - } - - private void testAuditRecordsRollbackBehavior(boolean flush, Boolean autoClear) { - EntityManager entityManager = getEntityManager(); - try { - if ( autoClear != null ) { - entityManager.unwrap( SessionImpl.class ).setAutoClear( autoClear ); - } - - // persist and rollback - entityManager.getTransaction().begin(); - IntTestEntity rollbackEntity = new IntTestEntity( 30 ); - entityManager.persist( rollbackEntity ); - if ( flush ) { - entityManager.flush(); - } - Integer rollbackId = rollbackEntity.getId(); - entityManager.getTransaction().rollback(); - - // persist and commit - entityManager.getTransaction().begin(); - IntTestEntity commitEntity = new IntTestEntity( 50 ); - entityManager.persist( commitEntity ); - if ( flush ) { - entityManager.flush(); - } - Integer commitId = commitEntity.getId(); - entityManager.getTransaction().commit(); - - List revisionsForSavedClass = getAuditReader().getRevisions( - IntTestEntity.class, - commitId - ); - assertEquals( "There should be one revision for inserted entity.", 1, revisionsForSavedClass.size() ); - - List revisionsForRolledbackClass = getAuditReader().getRevisions( - IntTestEntity.class, - rollbackId - ); - assertEquals( "There should be no revision for rolled back entity.", 0, revisionsForRolledbackClass.size() ); - } - finally { - entityManager.close(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java deleted file mode 100644 index b889f201ab56..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class UnversionedPropertiesChange extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity2.class}; - } - - private Integer addNewEntity(String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = new BasicTestEntity2( str1, str2 ); - em.persist( bte2 ); - em.getTransaction().commit(); - - return bte2.getId(); - } - - private void modifyEntity(Integer id, String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id ); - bte2.setStr1( str1 ); - bte2.setStr2( str2 ); - em.getTransaction().commit(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", "a" ); // rev 1 - modifyEntity( id1, "x", "a" ); // no rev - modifyEntity( id1, "y", "b" ); // rev 2 - modifyEntity( id1, "y", "c" ); // no rev - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id1, "x", null ); - BasicTestEntity2 ver2 = new BasicTestEntity2( id1, "y", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java deleted file mode 100644 index 1a61f4ed716f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class UnversionedProperty extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UnversionedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - UnversionedEntity ue1 = new UnversionedEntity( "a1", "b1" ); - em.persist( ue1 ); - id1 = ue1.getId(); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ue1 = em.find( UnversionedEntity.class, id1 ); - ue1.setData1( "a2" ); - ue1.setData2( "b2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( UnversionedEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - UnversionedEntity rev1 = new UnversionedEntity( id1, "a1", null ); - UnversionedEntity rev2 = new UnversionedEntity( id1, "a2", null ); - - assert getAuditReader().find( UnversionedEntity.class, id1, 1 ).equals( rev1 ); - assert getAuditReader().find( UnversionedEntity.class, id1, 2 ).equals( rev2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java deleted file mode 100644 index 8d3141f63dc1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.blob; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import org.hamcrest.Matchers; -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.dialect.SQLServerDialect; -import org.hibernate.engine.jdbc.proxy.BlobProxy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -import java.io.BufferedInputStream; -import java.io.InputStream; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.sql.Blob; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.fail; - -/** - * @author Chris Cranford - */ -public class BasicBlobTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Asset.class}; - } - - @Test - @Priority(10) - public void testGenerateProxyNoStream() throws URISyntaxException { - final Path path = Path.of( Thread.currentThread().getContextClassLoader() - .getResource( "org/hibernate/orm/test/envers/integration/blob/blob.txt" ).toURI() ); - doInJPA( this::entityManagerFactory, entityManager -> { - final Asset asset = new Asset(); - asset.setFileName( "blob.txt" ); - - try (final InputStream stream = new BufferedInputStream( Files.newInputStream( path ) )) { - assertThat( stream.markSupported(), Matchers.is( true ) ); - - // We use the method readAllBytes instead of passing the raw stream to the proxy - // since this is the only guaranteed way that will work across all dialects in a - // deterministic way. Postgres and Sybase will automatically close the stream - // after the blob has been written by the driver, which prevents Envers from - // then writing the contents of the stream to the audit table. - // - // If the driver and dialect are known not to close the input stream after the - // contents have been written by the driver, then it's safe to pass the stream - // here instead and the stream will be automatically marked and reset so that - // Envers can serialize the data after Hibernate has done so. Dialects like - // H2, MySQL, Oracle, SQL Server work this way. - // - // - Blob blob = BlobProxy.generateProxy( stream.readAllBytes() ); - - asset.setData( blob ); - entityManager.persist( asset ); - } - catch (Exception e) { - e.printStackTrace(); - fail( "Failed to persist the entity" ); - } - } ); - - } - - @Test - @Priority(10) - @SkipForDialect(value = PostgreSQLDialect.class, - comment = "The driver closes the stream, so it cannot be reused by envers") - @SkipForDialect(value = SQLServerDialect.class, - comment = "The driver closes the stream, so it cannot be reused by envers") - public void testGenerateProxyStream() throws URISyntaxException { - final Path path = Path.of( Thread.currentThread().getContextClassLoader() - .getResource( "org/hibernate/orm/test/envers/integration/blob/blob.txt" ).toURI() ); - - try (final InputStream stream = new BufferedInputStream( Files.newInputStream( path ) )) { - doInJPA( this::entityManagerFactory, entityManager -> { - final Asset asset = new Asset(); - asset.setFileName( "blob.txt" ); - - assertThat( stream.markSupported(), Matchers.is( true ) ); - - // We use the method readAllBytes instead of passing the raw stream to the proxy - // since this is the only guaranteed way that will work across all dialects in a - // deterministic way. Postgres and Sybase will automatically close the stream - // after the blob has been written by the driver, which prevents Envers from - // then writing the contents of the stream to the audit table. - // - // If the driver and dialect are known not to close the input stream after the - // contents have been written by the driver, then it's safe to pass the stream - // here instead and the stream will be automatically marked and reset so that - // Envers can serialize the data after Hibernate has done so. Dialects like - // H2, MySQL, Oracle, SQL Server work this way. - // - // - Blob blob = BlobProxy.generateProxy( stream, 9192L ); - - asset.setData( blob ); - entityManager.persist( asset ); - } ); - } - catch (Exception e) { - e.printStackTrace(); - fail( "Failed to persist the entity" ); - } - } - - @Audited - @Entity(name = "Asset") - public static class Asset { - @Id - @GeneratedValue - private Integer id; - private String fileName; - private Blob data; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFileName() { - return fileName; - } - - public void setFileName(String fileName) { - this.fileName = fileName; - } - - public Blob getData() { - return data; - } - - public void setData(Blob data) { - this.data = data; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java deleted file mode 100644 index affab46f41b6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.cache; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings({"ObjectEquality"}) -public class OneToManyCache extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity ing1 = new SetRefIngEntity( 1, "data_ing_1" ); - SetRefIngEntity ing2 = new SetRefIngEntity( 2, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testCacheReferenceAccessAfterFind() { - SetRefEdEntity ed1_rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - SetRefIngEntity ing1_rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity ing2_rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - - // It should be exactly the same object - assert ing1_rev1.getReference() == ed1_rev1; - assert ing2_rev1.getReference() == ed1_rev1; - } - - @Test - public void testCacheReferenceAccessAfterCollectionAccessRev1() { - SetRefEdEntity ed1_rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - // It should be exactly the same object - assert ed1_rev1.getReffering().size() == 2; - for ( SetRefIngEntity setRefIngEntity : ed1_rev1.getReffering() ) { - assert setRefIngEntity.getReference() == ed1_rev1; - } - } - - @Test - public void testCacheReferenceAccessAfterCollectionAccessRev2() { - SetRefEdEntity ed2_rev2 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 2 ); - - assert ed2_rev2.getReffering().size() == 2; - for ( SetRefIngEntity setRefIngEntity : ed2_rev2.getReffering() ) { - assert setRefIngEntity.getReference() == ed2_rev2; - } - } - - @Test - public void testCacheFindAfterCollectionAccessRev1() { - SetRefEdEntity ed1_rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - // Reading the collection - assert ed1_rev1.getReffering().size() == 2; - - SetRefIngEntity ing1_rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity ing2_rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - - for ( SetRefIngEntity setRefIngEntity : ed1_rev1.getReffering() ) { - assert setRefIngEntity == ing1_rev1 || setRefIngEntity == ing2_rev1; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java deleted file mode 100644 index 21c93aadc1ff..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.cache; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefEdEntity; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefIngEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings({"ObjectEquality"}) -public class OneToOneCache extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); - BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); - - BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - } - - @Test - public void testCacheReferenceAccessAfterFindRev1() { - BiRefEdEntity ed1_rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefIngEntity ing1_rev1 = getAuditReader().find( BiRefIngEntity.class, ing1_id, 1 ); - - assert ing1_rev1.getReference() == ed1_rev1; - } - - @Test - public void testCacheReferenceAccessAfterFindRev2() { - BiRefEdEntity ed2_rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - BiRefIngEntity ing1_rev2 = getAuditReader().find( BiRefIngEntity.class, ing1_id, 2 ); - - assert ing1_rev2.getReference() == ed2_rev2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java deleted file mode 100644 index b2f56d4d0129..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.cache; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings({"ObjectEquality"}) -public class QueryCache extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - IntTestEntity ite = new IntTestEntity( 10 ); - em.persist( ite ); - id1 = ite.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - ite = em.find( IntTestEntity.class, id1 ); - ite.setNumber( 20 ); - em.getTransaction().commit(); - } - - @Test - public void testCacheFindAfterRevisionsOfEntityQuery() { - List entsFromQuery = getAuditReader().createQuery() - .forRevisionsOfEntity( IntTestEntity.class, true, false ) - .getResultList(); - - IntTestEntity entFromFindRev1 = getAuditReader().find( IntTestEntity.class, id1, 1 ); - IntTestEntity entFromFindRev2 = getAuditReader().find( IntTestEntity.class, id1, 2 ); - - assert entFromFindRev1 == entsFromQuery.get( 0 ); - assert entFromFindRev2 == entsFromQuery.get( 1 ); - } - - @Test - public void testCacheFindAfterEntitiesAtRevisionQuery() { - IntTestEntity entFromQuery = (IntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .getSingleResult(); - - IntTestEntity entFromFind = getAuditReader().find( IntTestEntity.class, id1, 1 ); - - assert entFromFind == entFromQuery; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java deleted file mode 100644 index 19918818a6e4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.List; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.StringListEntity; -import org.hibernate.orm.test.envers.entities.collection.StringMapEntity; -import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11901") -public class CollectionNullValueTest extends BaseEnversJPAFunctionalTestCase { - private Integer mapId; - private Integer listId; - private Integer setId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StringMapEntity.class, StringListEntity.class, StringSetEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - // Persist map with null values - mapId = doInJPA( this::entityManagerFactory, entityManager -> { - final StringMapEntity sme = new StringMapEntity(); - sme.getStrings().put( "A", "B" ); - sme.getStrings().put( "B", null ); - entityManager.persist( sme ); - - return sme.getId(); - } ); - - // Update map with null values - doInJPA( this::entityManagerFactory, entityManager -> { - final StringMapEntity sme = entityManager.find( StringMapEntity.class, mapId ); - sme.getStrings().put( "C", null ); - sme.getStrings().put( "D", "E" ); - sme.getStrings().remove( "A" ); - entityManager.merge( sme ); - } ); - - // Persist list with null values - listId = doInJPA( this::entityManagerFactory, entityManager -> { - final StringListEntity sle = new StringListEntity(); - sle.getStrings().add( "A" ); - sle.getStrings().add( null ); - entityManager.persist( sle ); - - return sle.getId(); - } ); - - // Update list with null values - doInJPA( this::entityManagerFactory, entityManager -> { - final StringListEntity sle = entityManager.find( StringListEntity.class, listId ); - sle.getStrings().add( null ); - sle.getStrings().add( "D" ); - sle.getStrings().remove( "A" ); - entityManager.merge( sle ); - } ); - - // Persist set with null values - setId = doInJPA( this::entityManagerFactory, entityManager -> { - final StringSetEntity sse = new StringSetEntity(); - sse.getStrings().add( "A" ); - sse.getStrings().add( null ); - entityManager.persist( sse ); - - return sse.getId(); - } ); - - // Update set with null values - doInJPA( this::entityManagerFactory, entityManager -> { - final StringSetEntity sse = entityManager.find( StringSetEntity.class, setId ); - sse.getStrings().add( null ); - sse.getStrings().add( "D" ); - sse.getStrings().remove( "A" ); - entityManager.merge( sse ); - } ); - } - - @Test - public void testStringMapHistory() { - final List revisions = getAuditReader().getRevisions( StringMapEntity.class, mapId ); - assertEquals( Arrays.asList( 1, 2 ), revisions ); - - final StringMapEntity rev1 = getAuditReader().find( StringMapEntity.class, mapId, 1 ); - assertEquals( TestTools.makeMap( "A", "B" ), rev1.getStrings() ); - - final StringMapEntity rev2 = getAuditReader().find( StringMapEntity.class, mapId, 2 ); - assertEquals( TestTools.makeMap( "D", "E" ), rev2.getStrings() ); - } - - @Test - public void testStringListHistory() { - final List revisions = getAuditReader().getRevisions( StringListEntity.class, listId ); - assertEquals( Arrays.asList( 3, 4 ), revisions ); - - final StringListEntity rev3 = getAuditReader().find( StringListEntity.class, listId, 3 ); - assertEquals( TestTools.makeList( "A" ), rev3.getStrings() ); - - // NOTE: the only reason this assertion expects a null element is because the collection is indexed. - // ORM will return a list that consists of { null, "D" } and Envers should effectively mimic that. - final StringListEntity rev4 = getAuditReader().find( StringListEntity.class, listId, 4 ); - assertEquals( TestTools.makeList( null, "D" ), rev4.getStrings() ); - } - - @Test - public void testStringSetHistory() { - final List revisions = getAuditReader().getRevisions( StringSetEntity.class, setId ); - assertEquals( Arrays.asList( 5, 6 ), revisions ); - - final StringSetEntity rev5 = getAuditReader().find( StringSetEntity.class, setId, 5 ); - assertEquals( TestTools.makeSet( "A" ), rev5.getStrings() ); - - final StringSetEntity rev6 = getAuditReader().find( StringSetEntity.class, setId, 6 ); - assertEquals( TestTools.makeSet( "D" ), rev6.getStrings() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java deleted file mode 100644 index 86e123d50cd7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Assert; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-13080") -public class DetachedCollectionChangeTest extends BaseEnversJPAFunctionalTestCase { - @Audited - @Entity(name = "Alert") - public static class Alert { - @Id - @GeneratedValue - private Integer id; - @ManyToMany - private List ruleNames = new ArrayList<>(); - @ElementCollection - private List names = new ArrayList<>(); - @ElementCollection - private Set composites = new HashSet<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getRuleNames() { - return ruleNames; - } - - public void setRuleNames(List ruleNames) { - this.ruleNames = ruleNames; - } - - public List getNames() { - return names; - } - - public void setNames(List names) { - this.names = names; - } - - public Set getComposites() { - return composites; - } - - public void setComposites(Set composites) { - this.composites = composites; - } - } - - @Audited - @Entity(name = "RuleName") - public static class RuleName { - @Id - @GeneratedValue - private Integer id; - private String name; - - public RuleName() { - - } - - public RuleName(String name) { - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - RuleName ruleName = (RuleName) o; - return Objects.equals( id, ruleName.id ) && - Objects.equals( name, ruleName.name ); - } - - @Override - public int hashCode() { - return Objects.hash( id, name ); - } - } - - @Embeddable - public static class CompositeName implements Serializable { - private String value1; - private String value2; - - public CompositeName() { - - } - - public CompositeName(String value1, String value2) { - this.value1 = value1; - this.value2 = value2; - } - - public String getValue1() { - return value1; - } - - public void setValue1(String value1) { - this.value1 = value1; - } - - public String getValue2() { - return value2; - } - - public void setValue2(String value2) { - this.value2 = value2; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Alert.class, RuleName.class }; - } - - private Integer ruleName1Id; - private Integer ruleName2Id; - private Integer alertId; - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - RuleName ruleName1 = new RuleName(); - RuleName ruleName2 = new RuleName(); - - CompositeName compositeName1 = new CompositeName( "First1", "Last1" ); - CompositeName compositeName2 = new CompositeName( "First2", "Last2" ); - - Alert alert = new Alert(); - alert.getRuleNames().add( ruleName1 ); - alert.getRuleNames().add( ruleName2 ); - alert.getNames().add( "N1" ); - alert.getNames().add( "N2" ); - alert.getComposites().add( compositeName1 ); - alert.getComposites().add( compositeName2 ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( ruleName1 ); - em.persist( ruleName2 ); - em.persist( alert ); - em.getTransaction().commit(); - - alertId = alert.id; - ruleName1Id = ruleName1.id; - ruleName2Id = ruleName2.id; - } - - @Test - @Priority(9) - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); - } - - @Test - @Priority(8) - public void testClearAndAddWithinTransactionDoesNotChangeAnything() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final Alert alert = em.find( Alert.class, alertId ); - - List ruleNamesClone = new ArrayList<>( alert.getRuleNames() ); - List namesClone = new ArrayList<>( alert.getNames() ); - List compositeNamesClones = new ArrayList<>( alert.getComposites() ); - - alert.getRuleNames().clear(); - alert.getRuleNames().addAll( ruleNamesClone ); - - alert.getNames().clear(); - alert.getNames().addAll( namesClone ); - - alert.getComposites().clear(); - alert.getComposites().addAll( compositeNamesClones ); - - em.persist( alert ); - em.getTransaction().commit(); - - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); - } - - @Test - @Priority(7) - public void testClearAddDetachedOutsideTransaction() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final RuleName ruleName1 = em.find( RuleName.class, ruleName1Id ); - final RuleName ruleName2 = em.find( RuleName.class, ruleName2Id ); - - final CompositeName compositeName1 = new CompositeName( "First1", "Last1" ); - final CompositeName compositeName2 = new CompositeName( "First2", "Last2" ); - - List ruleNamesClone = Arrays.asList( ruleName1, ruleName2 ); - List namesClone = Arrays.asList( "N1", "N2" ); - List compositeNamesClone = Arrays.asList( compositeName1, compositeName2 ); - - em.getTransaction().rollback(); - - em.getTransaction().begin(); - Alert alert = em.find( Alert.class, alertId ); - - alert.getRuleNames().clear(); - alert.getRuleNames().addAll( ruleNamesClone ); - - alert.getNames().clear(); - alert.getNames().addAll( namesClone ); - - alert.getComposites().clear(); - alert.getComposites().addAll( compositeNamesClone ); - - em.persist( alert ); - em.getTransaction().commit(); - - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); - } - - @Test - @Priority(6) - public void testClearAddOneWithinTransaction() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - Alert alert = em.find( Alert.class, alertId ); - - List ruleNamesClone = new ArrayList<>( alert.getRuleNames() ); - List namesClone = new ArrayList<>( alert.getNames() ); - List compositeNamesClones = new ArrayList<>( alert.getComposites() ); - - alert.getRuleNames().clear(); - alert.getRuleNames().add( ruleNamesClone.get( 0 ) ); - - alert.getNames().clear(); - alert.getNames().add( namesClone.get( 0 ) ); - - alert.getComposites().clear(); - alert.getComposites().add( compositeNamesClones.get( 0 ) ); - - em.persist( alert ); - em.getTransaction().commit(); - - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java deleted file mode 100644 index b5bc3cc76083..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java +++ /dev/null @@ -1,412 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Query; -import jakarta.transaction.Status; -import jakarta.transaction.TransactionManager; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * Test the audit history of a detached entity with multiple collections that is - * merged back into the persistence context. - * - * @author Erik-Berndt Scheper - */ -@JiraKey(value = "HHH-6349") -@SkipForDialect(value = OracleDialect.class, - comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, - comment = "Altibase does not support identity key generation") -public class DetachedMultipleCollectionChangeTest extends BaseEnversJPAFunctionalTestCase { - private TransactionManager tm = null; - - private Long mceId1 = null; - private Long re1Id1 = null; - private Long re1Id2 = null; - private Long re1Id3 = null; - private Long re2Id1 = null; - private Long re2Id2 = null; - private Long re2Id3 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MultipleCollectionEntity.class, - MultipleCollectionRefEntity1.class, - MultipleCollectionRefEntity2.class - }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); - } - - @Test - @Priority(10) - public void initData() throws Exception { - EntityManager em; - MultipleCollectionEntity mce; - MultipleCollectionRefEntity1 re1_1, updatedRe1_1, re1_2, re1_3; - MultipleCollectionRefEntity2 re2_1, updatedRe2_1, re2_2, re2_3; - - tm.begin(); - try { - em = createIsolatedEntityManager(); - em.joinTransaction(); - mce = new MultipleCollectionEntity(); - mce.setText( "MultipleCollectionEntity-1" ); - em.persist( mce ); - mceId1 = mce.getId(); - } - finally { - tryCommit( tm ); - } - assertNotNull( mceId1 ); - - tm.begin(); - try { - em = createIsolatedEntityManager(); - em.joinTransaction(); - - re1_1 = new MultipleCollectionRefEntity1(); - re1_1.setText( "MultipleCollectionRefEntity1-1" ); - re1_1.setMultipleCollectionEntity( mce ); - - re1_2 = new MultipleCollectionRefEntity1(); - re1_2.setText( "MultipleCollectionRefEntity1-2" ); - re1_2.setMultipleCollectionEntity( mce ); - - mce.addRefEntity1( re1_1 ); - mce.addRefEntity1( re1_2 ); - - re2_1 = new MultipleCollectionRefEntity2(); - re2_1.setText( "MultipleCollectionRefEntity2-1" ); - re2_1.setMultipleCollectionEntity( mce ); - - re2_2 = new MultipleCollectionRefEntity2(); - re2_2.setText( "MultipleCollectionRefEntity2-2" ); - re2_2.setMultipleCollectionEntity( mce ); - - mce.addRefEntity2( re2_1 ); - mce.addRefEntity2( re2_2 ); - - mce = em.merge( mce ); - } - finally { - tryCommit( tm ); - } - for ( MultipleCollectionRefEntity1 refEnt1 : mce.getRefEntities1() ) { - if ( refEnt1.equals( re1_1 ) ) { - re1Id1 = refEnt1.getId(); - } - else if ( refEnt1.equals( re1_2 ) ) { - re1Id2 = refEnt1.getId(); - } - else { - throw new IllegalStateException( "unexpected instance" ); - } - } - for ( MultipleCollectionRefEntity2 refEnt2 : mce.getRefEntities2() ) { - if ( refEnt2.equals( re2_1 ) ) { - re2Id1 = refEnt2.getId(); - } - else if ( refEnt2.equals( re2_2 ) ) { - re2Id2 = refEnt2.getId(); - } - else { - throw new IllegalStateException( "unexpected instance" ); - } - } - assertNotNull( re1Id1 ); - assertNotNull( re1Id2 ); - assertNotNull( re2Id1 ); - assertNotNull( re2Id2 ); - - tm.begin(); - try { - em = createIsolatedEntityManager(); - em.joinTransaction(); - - assertEquals( 2, mce.getRefEntities1().size() ); - - mce.removeRefEntity1( re1_2 ); - assertEquals( 1, mce.getRefEntities1().size() ); - - updatedRe1_1 = mce.getRefEntities1().get( 0 ); - assertEquals( re1_1, updatedRe1_1 ); - updatedRe1_1.setText( "MultipleCollectionRefEntity1-1-updated" ); - - re1_3 = new MultipleCollectionRefEntity1(); - re1_3.setText( "MultipleCollectionRefEntity1-3" ); - re1_3.setMultipleCollectionEntity( mce ); - mce.addRefEntity1( re1_3 ); - assertEquals( 2, mce.getRefEntities1().size() ); - - assertEquals( 2, mce.getRefEntities2().size() ); - - mce.removeRefEntity2( re2_2 ); - assertEquals( 1, mce.getRefEntities2().size() ); - - updatedRe2_1 = mce.getRefEntities2().get( 0 ); - assertEquals( re2_1, updatedRe2_1 ); - updatedRe2_1.setText( "MultipleCollectionRefEntity2-1-updated" ); - - re2_3 = new MultipleCollectionRefEntity2(); - re2_3.setText( "MultipleCollectionRefEntity2-3" ); - re2_3.setMultipleCollectionEntity( mce ); - mce.addRefEntity2( re2_3 ); - assertEquals( 2, mce.getRefEntities2().size() ); - - mce = em.merge( mce ); - - } - finally { - tryCommit( tm ); - } - for ( MultipleCollectionRefEntity1 adres : mce.getRefEntities1() ) { - if ( adres.equals( re1_3 ) ) { - re1Id3 = adres.getId(); - } - } - for ( MultipleCollectionRefEntity2 partner : mce.getRefEntities2() ) { - if ( partner.equals( re2_3 ) ) { - re2Id3 = partner.getId(); - } - } - assertNotNull( re1Id3 ); - assertNotNull( re2Id3 ); - } - - @Test - public void testRevisionsCounts() throws Exception { - List mceId1Revs = getAuditReader().getRevisions( MultipleCollectionEntity.class, mceId1 ); - List re1Id1Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity1.class, re1Id1 ); - List re1Id2Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity1.class, re1Id2 ); - List re1Id3Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity1.class, re1Id3 ); - List re2Id1Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity2.class, re2Id1 ); - List re2Id2Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity2.class, re2Id2 ); - List re2Id3Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity2.class, re2Id3 ); - - assertEquals( Arrays.asList( 1, 2, 3 ), mceId1Revs ); - assertEquals( Arrays.asList( 2, 3 ), re1Id1Revs ); - assertEquals( Arrays.asList( 2, 3 ), re1Id2Revs ); - assertEquals( Arrays.asList( 3 ), re1Id3Revs ); - assertEquals( Arrays.asList( 2, 3 ), re2Id1Revs ); - assertEquals( Arrays.asList( 2, 3 ), re2Id2Revs ); - assertEquals( Arrays.asList( 3 ), re2Id3Revs ); - } - - @Test - @SkipForDialect(value = CockroachDialect.class, - comment = "requires serial_normalization=sql_sequence setting") - @SkipForDialect(value = OracleDialect.class, - comment = "Oracle does not support identity key generation") - public void testAuditJoinTable() throws Exception { - List mceRe1AuditJoinTableInfos = getAuditJoinTableRows( - "MCE_RE1_AUD", "MCE_ID", - "aud.originalId.MultipleCollectionEntity_id", "RE1_ID", - "aud.originalId.refEntities1_id", "aud.originalId.REV", - "aud.originalId.REV.id", "aud.REVTYPE" - ); - List mceRe2AuditJoinTableInfos = getAuditJoinTableRows( - "MCE_RE2_AUD", "MCE_ID", - "aud.originalId.MultipleCollectionEntity_id", "RE2_ID", - "aud.originalId.refEntities2_id", "aud.originalId.REV", - "aud.originalId.REV.id", "aud.REVTYPE" - ); - - assertEquals( 4, mceRe1AuditJoinTableInfos.size() ); - assertEquals( 4, mceRe2AuditJoinTableInfos.size() ); - - SequenceIdRevisionEntity rev2 = new SequenceIdRevisionEntity(); - rev2.setId( 2 ); - SequenceIdRevisionEntity rev3 = new SequenceIdRevisionEntity(); - rev3.setId( 3 ); - - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 1L ), - mceRe1AuditJoinTableInfos.get( 0 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 2L ), - mceRe1AuditJoinTableInfos.get( 1 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev3, RevisionType.DEL, "MCE_ID", 1L, "RE1_ID", 2L ), - mceRe1AuditJoinTableInfos.get( 2 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev3, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 3L ), - mceRe1AuditJoinTableInfos.get( 3 ) - ); - - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 1L ), - mceRe2AuditJoinTableInfos.get( 0 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 2L ), - mceRe2AuditJoinTableInfos.get( 1 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev3, RevisionType.DEL, "MCE_ID", 1L, "RE2_ID", 2L ), - mceRe2AuditJoinTableInfos.get( 2 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev3, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 3L ), - mceRe2AuditJoinTableInfos.get( 3 ) - ); - } - - private List getAuditJoinTableRows( - String middleEntityName, String joinColumnIdName, - String joinColumnIdProp, String inverseJoinColumnIdName, - String inverseJoinColumnIdProp, String revProp, String revIdProp, - String revTypeProp) throws Exception { - StringBuilder qryBuilder = new StringBuilder( "select " ); - qryBuilder.append( "aud " ); - qryBuilder.append( ", " ).append( joinColumnIdProp ).append( " as joinColumnId" ); - qryBuilder.append( ", " ).append( inverseJoinColumnIdProp ).append( " as inverseJoinColumnId" ); - qryBuilder.append( ", " ).append( revProp ).append( " as rev" ); - qryBuilder.append( ", " ).append( revIdProp ).append( " as revId" ); - qryBuilder.append( ", " ).append( revTypeProp ).append( " as revType" ); - qryBuilder.append( " from " ).append( middleEntityName ).append( " aud " ); - qryBuilder.append( " order by joinColumnId asc, inverseJoinColumnId asc, revId asc" ); - - String query = qryBuilder.toString(); - - EntityManager em = createIsolatedEntityManager(); - Query qry = em.createQuery( query ); - - @SuppressWarnings("unchecked") - List auditJoinTableRows = qry.getResultList(); - List result = new ArrayList( auditJoinTableRows.size() ); - - for ( Object[] auditJoinTableRow : auditJoinTableRows ) { - Long joinColumnId = (Long) auditJoinTableRow[1]; - Long inverseJoinColumnId = (Long) auditJoinTableRow[2]; - SequenceIdRevisionEntity rev = (SequenceIdRevisionEntity) auditJoinTableRow[3]; - RevisionType revType = (RevisionType) auditJoinTableRow[5]; - - AuditJoinTableInfo info = new AuditJoinTableInfo( - middleEntityName, rev, revType, joinColumnIdName, joinColumnId, - inverseJoinColumnIdName, inverseJoinColumnId - ); - result.add( info ); - } - - return result; - } - - private static class AuditJoinTableInfo { - private final String name; - private final Integer revId; - private final RevisionType revType; - private final String joinColumnName; - private final Long joinColumnId; - private final String inverseJoinColumnName; - private final Long inverseJoinColumnId; - - private AuditJoinTableInfo( - String name, SequenceIdRevisionEntity rev, - RevisionType revType, String joinColumnName, Long joinColumnId, - String inverseJoinColumnName, Long inverseJoinColumnId) { - this.name = name; - this.revId = rev.getId(); - this.revType = revType; - this.joinColumnName = joinColumnName; - this.joinColumnId = joinColumnId; - this.inverseJoinColumnName = inverseJoinColumnName; - this.inverseJoinColumnId = inverseJoinColumnId; - } - - @Override - public String toString() { - return "AuditJoinTableInfo [name=" + name + ", revId=" + revId - + ", revType=" + revType + ", " + joinColumnName + "=" - + joinColumnId + ", " + inverseJoinColumnName + "=" - + inverseJoinColumnId + "]"; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditJoinTableInfo) ) { - return false; - } - - AuditJoinTableInfo that = (AuditJoinTableInfo) o; - - if ( inverseJoinColumnId != null ? - !inverseJoinColumnId.equals( that.inverseJoinColumnId ) : - that.inverseJoinColumnId != null ) { - return false; - } - if ( joinColumnId != null ? !joinColumnId.equals( that.joinColumnId ) : that.joinColumnId != null ) { - return false; - } - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - if ( revId != null ? !revId.equals( that.revId ) : that.revId != null ) { - return false; - } - if ( revType != that.revType ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (revId != null ? revId.hashCode() : 0); - result = 31 * result + (revType != null ? revType.hashCode() : 0); - result = 31 * result + (joinColumnId != null ? joinColumnId.hashCode() : 0); - result = 31 * result + (inverseJoinColumnId != null ? inverseJoinColumnId.hashCode() : 0); - return result; - } - } - - public static void tryCommit(TransactionManager tm) throws Exception { - if ( tm.getStatus() == Status.STATUS_MARKED_ROLLBACK ) { - tm.rollback(); - } - else { - tm.commit(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java deleted file mode 100644 index 9c7981ec2d22..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableSetEntity; -import org.hibernate.orm.test.envers.entities.components.Component3; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class EmbeddableSet extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EmbeddableSetEntity.class }; - } - - @Test - @JiraKey(value = "HHH-9199") - public void testRemoval() { - EntityManager em = getEntityManager(); - - final Component3 comp1 = new Component3( "comp1", null, null ); - final Component3 comp2 = new Component3( "comp2", null, null ); - - EmbeddableSetEntity entity = new EmbeddableSetEntity(); - - em.getTransaction().begin(); - - entity.getComponentSet().add( comp1 ); - entity.getComponentSet().add( comp2 ); - - em.persist( entity ); - - em.getTransaction().commit(); - - em.getTransaction().begin(); - - entity.getComponentSet().remove( comp1 ); - - em.getTransaction().commit(); - - EmbeddableSetEntity rev1 = getAuditReader().find( EmbeddableSetEntity.class, entity.getId(), 1 ); - EmbeddableSetEntity rev2 = getAuditReader().find( EmbeddableSetEntity.class, entity.getId(), 2 ); - assertEquals( "Unexpected components", TestTools.makeSet( comp1, comp2 ), rev1.getComponentSet() ); - assertEquals( "Unexpected components", TestTools.makeSet( comp2 ), rev2.getComponentSet() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java deleted file mode 100644 index eb710e0f6fe3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.FailureExpected; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11841") -public class EntityMapCompositeElementTest extends BaseEnversJPAFunctionalTestCase { - - private Category category; - private Item item; - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager-> { - final Item item = new Item( "The Item" ); - entityManager.persist( item ); - - final Category category = new Category( "The Category" ); - category.setDescription( "The description" ); - category.setValue( item, new Value( "The Value", 4711L ) ); - category.setText( item, "The text" ); - entityManager.persist( category ); - - this.category = category; - this.item = item; - } ); - } - - @Test - @FailureExpected(jiraKey = "HHH-11841", message = "Reverted fix in HHH-12018 and will be fixed in HHH-12043") - public void testRevisionHistory() { - final AuditReader reader = getAuditReader(); - - AuditQuery categoryQuery = reader.createQuery().forRevisionsOfEntity( Category.class, false, true ) - .addOrder( AuditEntity.revisionProperty( "timestamp" ).asc() ) - .add( AuditEntity.id().eq( category.getId() ) ); - - @SuppressWarnings( "unchecked" ) - List history = (List) categoryQuery.getResultList(); - assertNotNull( history ); - assertEquals( 1, history.size() ); - - final Category category = (Category) reader.createQuery().forEntitiesAtRevision( Category.class, 1 ) - .add( AuditEntity.property( "id" ).eq( this.category.getId() ) ) - .setMaxResults( 1 ) - .getSingleResult(); - - assertEquals( this.category.getName(), category.getName() ); - assertEquals( this.category.getDescription(), category.getDescription() ); - assertEquals( "The text", category.getText( this.item ) ); - - final Value value = category.getValue( this.item ); - assertEquals( "The Value", value.getText() ); - assertEquals( Long.valueOf( 4711L ), value.getNumberValue() ); - } - - @Override - protected String[] getMappings() { - return new String[] { - "mappings/collections/Category.hbm.xml", - "mappings/collections/Item.hbm.xml" - }; - } - - @Audited - public static class Category { - private Long id; - private String name; - private String description; - private Map textItem = new HashMap<>(); - private Map categoryItem = new HashMap<>(); - - Category() { - - } - - Category(String name) { - this.name = name; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public Map getTextItem() { - return textItem; - } - - public void setTextItem(Map textItem) { - this.textItem = textItem; - } - - public Map getCategoryItem() { - return categoryItem; - } - - public void setCategoryItem(Map categoryItem) { - this.categoryItem = categoryItem; - } - - public void setValue(Item key, Value value) { - this.categoryItem.put( key, value ); - } - - public Value getValue(Item key) { - return this.categoryItem.get( key ); - } - - public void setText(Item key, String value) { - this.textItem.put( key, value ); - } - - public String getText(Item key) { - return this.textItem.get( key ); - } - } - - @Audited - public static class Item { - private Long id; - private String name; - - Item() { - - } - - Item(String name) { - this.name = name; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Item item = (Item) o; - - return id != null ? id.equals( item.id ) : item.id == null; - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - } - - public static class Value implements Serializable { - private String text; - private Long numberValue; - - Value() { - - } - - Value(String text, Long numberValue) { - this.text = text; - this.numberValue = numberValue; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - public Long getNumberValue() { - return numberValue; - } - - public void setNumberValue(Long numberValue) { - this.numberValue = numberValue; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java deleted file mode 100644 index 3f7c6208f8a8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * Tests an entity mapping using an entity as a map-key and map-value. - * - * This only fails on {@code DefaultAuditStrategy} because the {@code ValidityAuditStrategy} does - * not make use of the related-id data of the middle table like the default audit strategy. - * - * This test verifies both strategies work, but the failure is only applicable for the default strategy. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11892") -public class EntityMapTest extends BaseEnversJPAFunctionalTestCase { - - private A a; - private B b1; - private B b2; - private C c1; - private C c2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { A.class, B.class, C.class }; - } - - @MappedSuperclass - public static abstract class AbstractEntity { - @Id - @GeneratedValue - private Integer id; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - AbstractEntity that = (AbstractEntity) o; - - return id != null ? id.equals( that.id ) : that.id == null; - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - } - - @Entity(name = "A") - @Audited - public static class A extends AbstractEntity { - @ElementCollection - private Map map = new HashMap<>(); - - public Map getMap() { - return map; - } - - public void setMap(Map map) { - this.map = map; - } - } - - @Entity(name = "B") - @Audited - public static class B extends AbstractEntity { - - } - - @Entity(name = "C") - @Audited - public static class C extends AbstractEntity { - - } - - @Test - @Priority(10) - public void initData() { - // add b/c key-pair to the map and save a entity. - doInJPA( this::entityManagerFactory, entityManager -> { - final A a = new A(); - - final B b = new B(); - final C c = new C(); - entityManager.persist( b ); - entityManager.persist( c ); - - a.getMap().put( b, c ); - entityManager.persist( a ); - - this.a = a; - this.b1 = b; - this.c1 = c; - } ); - - // add a new b/c key-pair to the map - doInJPA( this::entityManagerFactory, entityManager -> { - final A a = entityManager.find( A.class, this.a.getId() ); - - final B b = new B(); - final C c = new C(); - entityManager.persist( b ); - entityManager.persist( c ); - - a.getMap().put( b, c ); - entityManager.merge( a ); - - this.b2 = b; - this.c2 = c; - } ); - - // Remove b1 from the map - doInJPA( this::entityManagerFactory, entityManager -> { - final A a = entityManager.find( A.class, this.a.getId() ); - a.getMap().remove( this.b1 ); - entityManager.merge( a ); - } ); - } - - @Test - public void testRevisionHistory() { - doInJPA( this::entityManagerFactory, entityManager -> { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( A.class, a.getId() ) ); - - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( B.class, b1.getId() ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( C.class, c1.getId() ) ); - - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( B.class, b2.getId() ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( C.class, c2.getId() ) ); - } ); - } - - @Test - public void testRevision1() { - final A rev1 = getAuditReader().find( A.class, this.a.getId(), 1 ); - assertEquals( 1, rev1.getMap().size() ); - assertEquals( TestTools.makeMap( this.b1, this.c1 ), rev1.getMap() ); - } - - @Test - public void testRevision2() { - final A rev2 = getAuditReader().find( A.class, this.a.getId(), 2 ); - assertEquals( 2, rev2.getMap().size() ); - assertEquals( TestTools.makeMap( this.b1, this.c1, this.b2, this.c2 ), rev2.getMap() ); - } - - @Test - public void testRevision3() { - final A rev3 = getAuditReader().find( A.class, this.a.getId(), 3 ); - assertEquals( 1, rev3.getMap().size() ); - assertEquals( TestTools.makeMap( this.b2, this.c2 ), rev3.getMap() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java deleted file mode 100644 index d2ae5d44515a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12018") -public class EntitySameMapKeyMultiMapValueTest extends BaseEnversJPAFunctionalTestCase { - - private Integer otherEntityId; - private Integer someEntityId; - - @Entity(name = "SomeEntity") - @Audited - public static class SomeEntity { - @Id - @GeneratedValue - private Integer id; - - @ElementCollection - private Map map = new HashMap<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getMap() { - return map; - } - - public void setMap(Map map) { - this.map = map; - } - - enum Status { - A, B - }; - } - - @Entity(name = "OtherEntity") - @Audited - public static class OtherEntity { - @Id - @GeneratedValue - private Integer id; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SomeEntity.class, OtherEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - final SomeEntity someEntity = new SomeEntity(); - final OtherEntity otherEntity = new OtherEntity(); - entityManager.persist( otherEntity ); - - someEntity.getMap().put( otherEntity, SomeEntity.Status.A ); - entityManager.persist( someEntity ); - - this.otherEntityId = otherEntity.getId(); - this.someEntityId = someEntity.getId(); - - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - final SomeEntity someEntity = entityManager.find( SomeEntity.class, someEntityId ); - final OtherEntity otherEntity = entityManager.find( OtherEntity.class, otherEntityId ); - someEntity.getMap().put( otherEntity, SomeEntity.Status.B ); - entityManager.merge( someEntity ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - final SomeEntity someEntity = entityManager.find( SomeEntity.class, someEntityId ); - someEntity.getMap().clear(); - entityManager.merge( someEntity ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( OtherEntity.class, otherEntityId ) ); - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( SomeEntity.class, someEntityId ) ); - } - - @Test - public void blockTest() { - final AuditReader reader = getAuditReader(); - System.out.println( "Halt" ); - } - - @Test - public void testRevisionOne() { - final SomeEntity someEntity = getAuditReader().find( SomeEntity.class, someEntityId, 1 ); - assertNotNull( someEntity ); - assertFalse( someEntity.getMap().isEmpty() ); - assertEquals( 1, someEntity.getMap().size() ); - - final OtherEntity otherEntity = getAuditReader().find( OtherEntity.class, otherEntityId, 1 ); - assertNotNull( otherEntity ); - - final Map.Entry entry = someEntity.getMap().entrySet().iterator().next(); - assertEquals( otherEntity, entry.getKey() ); - assertEquals( SomeEntity.Status.A, entry.getValue() ); - } - - @Test - public void testRevisionTwo() { - final SomeEntity someEntity = getAuditReader().find( SomeEntity.class, someEntityId, 2 ); - assertNotNull( someEntity ); - assertFalse( someEntity.getMap().isEmpty() ); - assertEquals( 1, someEntity.getMap().size() ); - - final OtherEntity otherEntity = getAuditReader().find( OtherEntity.class, otherEntityId, 2 ); - assertNotNull( otherEntity ); - - final Map.Entry entry = someEntity.getMap().entrySet().iterator().next(); - assertEquals( otherEntity, entry.getKey() ); - assertEquals( SomeEntity.Status.B, entry.getValue() ); - } - - @Test - public void testRevisionThree() { - final SomeEntity someEntity = getAuditReader().find( SomeEntity.class, someEntityId, 3 ); - assertNotNull( someEntity ); - assertTrue( someEntity.getMap().isEmpty() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java deleted file mode 100644 index 2c92d7ba2c46..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EnumMapEntity; -import org.hibernate.orm.test.envers.entities.collection.EnumMapType; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-6374") -public class EnumMapTest extends BaseEnversJPAFunctionalTestCase { - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EnumMapEntity.class, - EnumMapType.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // revision 1 - EnumMapEntity entity = new EnumMapEntity(); - entity.getTypes().put( EnumMapEntity.EnumType.TYPE_A, new EnumMapType( "A" ) ); - entity.getTypes().put( EnumMapEntity.EnumType.TYPE_B, new EnumMapType( "B" ) ); - em.getTransaction().begin(); - em.persist( entity ); - em.getTransaction().commit(); - // revision 2 - em.getTransaction().begin(); - entity = em.find( EnumMapEntity.class, entity.getId() ); - entity.getTypes().remove( EnumMapEntity.EnumType.TYPE_A ); - entity.getTypes().put( EnumMapEntity.EnumType.TYPE_C, new EnumMapType( "C" ) ); - em.getTransaction().commit(); - entityId = entity.getId(); - } - finally { - em.close(); - } - } - - @Test - public void testRevisionsCount() { - assertEquals( 2, getAuditReader().getRevisions( EnumMapEntity.class, entityId ).size() ); - } - - @Test - public void testAuditEnumMapCollection() { - EnumMapEntity rev1 = getAuditReader().find( EnumMapEntity.class, entityId, 1 ); - assertTrue( rev1.getTypes().keySet().containsAll( - Arrays.asList( EnumMapEntity.EnumType.TYPE_A, EnumMapEntity.EnumType.TYPE_B ) - ) ); - EnumMapEntity rev2 = getAuditReader().find( EnumMapEntity.class, entityId, 2 ); - assertTrue( rev2.getTypes().keySet().containsAll( - Arrays.asList( EnumMapEntity.EnumType.TYPE_B, EnumMapEntity.EnumType.TYPE_C ) - ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java deleted file mode 100644 index 256a1f25a430..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.sql.Types; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import jakarta.persistence.EntityManager; -import org.assertj.core.api.Assertions; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.metamodel.mapping.CompositeIdentifierMapping; -import org.hibernate.metamodel.mapping.EntityMappingType; -import org.hibernate.metamodel.mapping.JdbcMapping; -import org.hibernate.metamodel.mapping.PluralAttributeMapping; -import org.hibernate.metamodel.spi.MappingMetamodelImplementor; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity; -import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E1; -import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E2; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.type.SqlTypes; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class EnumSet extends BaseEnversJPAFunctionalTestCase { - private Integer sse1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EnumSetEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.PREFER_NATIVE_ENUM_TYPES, "false" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EnumSetEntity sse1 = new EnumSetEntity(); - - // Revision 1 (sse1: initialy 1 element) - em.getTransaction().begin(); - - sse1.getEnums1().add( E1.X ); - sse1.getEnums2().add( E2.A ); - - em.persist( sse1 ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 1 element/removing a non-existing element) - em.getTransaction().begin(); - - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); - - sse1.getEnums1().add( E1.Y ); - sse1.getEnums2().remove( E2.B ); - - em.getTransaction().commit(); - - // Revision 3 (sse1: removing 1 element/adding an exisiting element) - em.getTransaction().begin(); - - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); - - sse1.getEnums1().remove( E1.X ); - sse1.getEnums2().add( E2.A ); - - em.getTransaction().commit(); - - // - - sse1_id = sse1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( EnumSetEntity.class, sse1_id ) ); - } - - @Test - public void testHistoryOfSse1() { - EnumSetEntity rev1 = getAuditReader().find( EnumSetEntity.class, sse1_id, 1 ); - EnumSetEntity rev2 = getAuditReader().find( EnumSetEntity.class, sse1_id, 2 ); - EnumSetEntity rev3 = getAuditReader().find( EnumSetEntity.class, sse1_id, 3 ); - - assert rev1.getEnums1().equals( TestTools.makeSet( E1.X ) ); - assert rev2.getEnums1().equals( TestTools.makeSet( E1.X, E1.Y ) ); - assert rev3.getEnums1().equals( TestTools.makeSet( E1.Y ) ); - - assert rev1.getEnums2().equals( TestTools.makeSet( E2.A ) ); - assert rev2.getEnums2().equals( TestTools.makeSet( E2.A ) ); - assert rev3.getEnums2().equals( TestTools.makeSet( E2.A ) ); - } - - @Test - @JiraKey(value = "HHH-7780") - public void testEnumRepresentation() { - EntityManager entityManager = getEntityManager(); - - verifyModel( entityManager ); - - { - final String qry = "SELECT enums1 FROM EnumSetEntity_enums1_AUD ORDER BY REV ASC"; - List enums1 = entityManager.createNativeQuery( qry, String.class ).getResultList(); - Assertions.assertThat( enums1 ).isEqualTo( List.of( "X", "Y", "X" ) ); - } - - { - final String qry = "SELECT enums2 FROM EnumSetEntity_enums2_AUD ORDER BY REV ASC"; - String enum2 = (String) entityManager.createNativeQuery( qry, String.class ).getSingleResult(); - // Compare the String value to account for, as an example, Oracle returning a BigDecimal instead of an int. - Assertions.assertThat( enum2 ).isEqualTo( "0" ); - } - - entityManager.close(); - } - - private void verifyModel(EntityManager entityManager) { - final MappingMetamodelImplementor mappingMetamodel = entityManager.unwrap( SessionImplementor.class ) - .getFactory() - .getRuntimeMetamodels() - .getMappingMetamodel(); - - { - final EntityMappingType entityMapping = mappingMetamodel.getEntityDescriptor( EnumSetEntity.class ); - final PluralAttributeMapping attributeMapping = (PluralAttributeMapping) entityMapping.findDeclaredAttributeMapping( "enums1" ); - verifyMapping( attributeMapping.getElementDescriptor().getJdbcMapping( 0 ) ); - } - - { - final EntityMappingType entityMapping = mappingMetamodel.getEntityDescriptor( "EnumSetEntity_enums1_AUD" ); - final CompositeIdentifierMapping cidMapping = (CompositeIdentifierMapping) entityMapping.getIdentifierMapping(); - verifyMapping( cidMapping.getEmbeddableTypeDescriptor().findAttributeMapping( "element" ).getJdbcMapping( 0 ) ); - } - - } - - private void verifyMapping(JdbcMapping jdbcMapping) { - assertThat( jdbcMapping.getJdbcType().getJdbcTypeCode() ).isIn( Types.VARCHAR, Types.NVARCHAR, SqlTypes.ENUM ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java deleted file mode 100644 index 90936f025f04..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7940") -public class IndexColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Parent p = new Parent( 1 ); - p.getChildren().add( "child1" ); - p.getChildren().add( "child2" ); - entityManager.persist( p ); - } ); - - // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // should remove child with id 1 - p.getChildren().remove( 0 ); - entityManager.merge( p ); - } ); - - // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // add child with id 3 - p.getChildren().add( 0, "child3" ); - entityManager.merge( p ); - } ); - - // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - p.getChildren().clear(); - entityManager.merge( p ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - } - - @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child1", "child2" ), p.getChildren() ); - } - - @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( Arrays.asList( "child2" ), p.getChildren() ); - } - - @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child3", "child2" ), p.getChildren() ); - } - - @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); - } - - @Audited - @Entity(name = "Parent") - public static class Parent { - @Id - private Integer id; - - @ElementCollection - @OrderColumn(name = "`index`") - private List children = new ArrayList(); - - Parent() { - - } - - Parent(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Parent parent = (Parent) o; - - return id != null ? id.equals( parent.id ) : parent.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "Parent{" + - "id=" + id + - ", children=" + children + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java deleted file mode 100644 index 8bc1914b8b0d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7940") -public class OrderColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Parent p = new Parent( 1 ); - p.getChildren().add( "child1" ); - p.getChildren().add( "child2" ); - entityManager.persist( p ); - } ); - - // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // should remove child with id 1 - p.getChildren().remove( 0 ); - entityManager.merge( p ); - } ); - - // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // add child with id 3 - p.getChildren().add( 0, "child3" ); - entityManager.merge( p ); - } ); - - // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - p.getChildren().clear(); - entityManager.merge( p ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - } - - @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child1", "child2" ), p.getChildren() ); - } - - @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( Arrays.asList( "child2" ), p.getChildren() ); - } - - @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child3", "child2" ), p.getChildren() ); - } - - @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); - } - - @Audited - @Entity(name = "Parent") - public static class Parent { - @Id - private Integer id; - - @ElementCollection - @OrderColumn - private List children = new ArrayList(); - - Parent() { - - } - - Parent(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Parent parent = (Parent) o; - - return id != null ? id.equals( parent.id ) : parent.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "Parent{" + - "id=" + id + - ", children=" + children + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java deleted file mode 100644 index 1d0e63276ba0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.StringListEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class StringList extends BaseEnversJPAFunctionalTestCase { - private Integer sle1_id; - private Integer sle2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringListEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StringListEntity sle1 = new StringListEntity(); - StringListEntity sle2 = new StringListEntity(); - - // Revision 1 (sle1: initialy empty, sle2: initialy 2 elements) - em.getTransaction().begin(); - - sle2.getStrings().add( "sle2_string1" ); - sle2.getStrings().add( "sle2_string2" ); - - em.persist( sle1 ); - em.persist( sle2 ); - - em.getTransaction().commit(); - - // Revision 2 (sle1: adding 2 elements, sle2: adding an existing element) - em.getTransaction().begin(); - - sle1 = em.find( StringListEntity.class, sle1.getId() ); - sle2 = em.find( StringListEntity.class, sle2.getId() ); - - sle1.getStrings().add( "sle1_string1" ); - sle1.getStrings().add( "sle1_string2" ); - - sle2.getStrings().add( "sle2_string1" ); - - em.getTransaction().commit(); - - // Revision 3 (sle1: replacing an element at index 0, sle2: removing an element at index 0) - em.getTransaction().begin(); - - sle1 = em.find( StringListEntity.class, sle1.getId() ); - sle2 = em.find( StringListEntity.class, sle2.getId() ); - - sle1.getStrings().set( 0, "sle1_string3" ); - - sle2.getStrings().remove( 0 ); - - em.getTransaction().commit(); - - // - - sle1_id = sle1.getId(); - sle2_id = sle2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( StringListEntity.class, sle1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( StringListEntity.class, sle2_id ) ); - } - - @Test - public void testHistoryOfSle1() { - StringListEntity rev1 = getAuditReader().find( StringListEntity.class, sle1_id, 1 ); - StringListEntity rev2 = getAuditReader().find( StringListEntity.class, sle1_id, 2 ); - StringListEntity rev3 = getAuditReader().find( StringListEntity.class, sle1_id, 3 ); - - assert rev1.getStrings().equals( Collections.EMPTY_LIST ); - assert rev2.getStrings().equals( TestTools.makeList( "sle1_string1", "sle1_string2" ) ); - assert rev3.getStrings().equals( TestTools.makeList( "sle1_string3", "sle1_string2" ) ); - } - - @Test - public void testHistoryOfSse2() { - StringListEntity rev1 = getAuditReader().find( StringListEntity.class, sle2_id, 1 ); - StringListEntity rev2 = getAuditReader().find( StringListEntity.class, sle2_id, 2 ); - StringListEntity rev3 = getAuditReader().find( StringListEntity.class, sle2_id, 3 ); - - assert rev1.getStrings().equals( TestTools.makeList( "sle2_string1", "sle2_string2" ) ); - assert rev2.getStrings().equals( TestTools.makeList( "sle2_string1", "sle2_string2", "sle2_string1" ) ); - assert rev3.getStrings().equals( TestTools.makeList( "sle2_string2", "sle2_string1" ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java deleted file mode 100644 index d8936c0fd065..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.StringMapEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class StringMap extends BaseEnversJPAFunctionalTestCase { - private Integer sme1_id; - private Integer sme2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringMapEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StringMapEntity sme1 = new StringMapEntity(); - StringMapEntity sme2 = new StringMapEntity(); - - // Revision 1 (sme1: initialy empty, sme2: initialy 1 mapping) - em.getTransaction().begin(); - - sme2.getStrings().put( "1", "a" ); - - em.persist( sme1 ); - em.persist( sme2 ); - - em.getTransaction().commit(); - - // Revision 2 (sme1: adding 2 mappings, sme2: no changes) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().put( "1", "a" ); - sme1.getStrings().put( "2", "b" ); - - em.getTransaction().commit(); - - // Revision 3 (sme1: removing an existing mapping, sme2: replacing a value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "1" ); - sme2.getStrings().put( "1", "b" ); - - em.getTransaction().commit(); - - // No revision (sme1: removing a non-existing mapping, sme2: replacing with the same value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "3" ); - sme2.getStrings().put( "1", "b" ); - - em.getTransaction().commit(); - - // - - sme1_id = sme1.getId(); - sme2_id = sme2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( StringMapEntity.class, sme1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( StringMapEntity.class, sme2_id ) ); - } - - @Test - public void testHistoryOfSse1() { - StringMapEntity rev1 = getAuditReader().find( StringMapEntity.class, sme1_id, 1 ); - StringMapEntity rev2 = getAuditReader().find( StringMapEntity.class, sme1_id, 2 ); - StringMapEntity rev3 = getAuditReader().find( StringMapEntity.class, sme1_id, 3 ); - StringMapEntity rev4 = getAuditReader().find( StringMapEntity.class, sme1_id, 4 ); - - assert rev1.getStrings().equals( Collections.EMPTY_MAP ); - assert rev2.getStrings().equals( TestTools.makeMap( "1", "a", "2", "b" ) ); - assert rev3.getStrings().equals( TestTools.makeMap( "2", "b" ) ); - assert rev4.getStrings().equals( TestTools.makeMap( "2", "b" ) ); - } - - @Test - public void testHistoryOfSse2() { - StringMapEntity rev1 = getAuditReader().find( StringMapEntity.class, sme2_id, 1 ); - StringMapEntity rev2 = getAuditReader().find( StringMapEntity.class, sme2_id, 2 ); - StringMapEntity rev3 = getAuditReader().find( StringMapEntity.class, sme2_id, 3 ); - StringMapEntity rev4 = getAuditReader().find( StringMapEntity.class, sme2_id, 4 ); - - assert rev1.getStrings().equals( TestTools.makeMap( "1", "a" ) ); - assert rev2.getStrings().equals( TestTools.makeMap( "1", "a" ) ); - assert rev3.getStrings().equals( TestTools.makeMap( "1", "b" ) ); - assert rev4.getStrings().equals( TestTools.makeMap( "1", "b" ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java deleted file mode 100644 index 4bd52ea4d823..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Lob; - -import org.hibernate.dialect.HANADialect; -import org.hibernate.dialect.DB2Dialect; -import org.hibernate.community.dialect.DerbyDialect; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.dialect.SybaseDialect; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-9834") -@SkipForDialect(OracleDialect.class) -@SkipForDialect(value = PostgreSQLDialect.class, jiraKey = "HHH-11477", comment = "@Lob field in HQL predicate fails with error about text = bigint") -@SkipForDialect(value = HANADialect.class, comment = "HANA doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = SybaseDialect.class, comment = "Sybase doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = DB2Dialect.class, comment = "DB2 jdbc driver doesn't support setNString") -@SkipForDialect(value = DerbyDialect.class, comment = "Derby jdbc driver doesn't support setNString") -public class StringMapLobTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Simple.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = new Simple( 1, "Simple" ); - simple.getEmbeddedMap().put( "1", "One" ); - simple.getEmbeddedMap().put( "2", "Two" ); - entityManager.persist( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().put( "3", "Three" ); - entityManager.merge( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().remove( "1" ); - simple.getEmbeddedMap().remove( "2" ); - entityManager.merge( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().remove( "3" ); - simple.getEmbeddedMap().put( "3", "Three-New" ); - entityManager.merge( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().clear(); - entityManager.merge( simple ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( Simple.class, 1 ) ); - } - - @Test - public void testRevisionHistory() { - final Simple rev1 = getAuditReader().find( Simple.class, 1, 1 ); - assertEquals( 2, rev1.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .entries(), - rev1.getEmbeddedMap().entrySet() - ); - - final Simple rev2 = getAuditReader().find( Simple.class, 1, 2 ); - assertEquals( 3, rev2.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .add( "3", "Three" ) - .entries(), - rev2.getEmbeddedMap().entrySet() - ); - - final Simple rev3 = getAuditReader().find( Simple.class, 1, 3 ); - assertEquals( 1, rev3.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three" ) - .entries(), - rev3.getEmbeddedMap().entrySet() - ); - - final Simple rev4 = getAuditReader().find( Simple.class, 1, 4 ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three-New" ) - .entries(), - rev4.getEmbeddedMap().entrySet() - ); - - final Simple rev5 = getAuditReader().find( Simple.class, 1, 5 ); - assertEquals( 0, rev5.getEmbeddedMap().size() ); - } - - @Entity(name = "Simple") - @Audited - public static class Simple { - @Id - private Integer id; - private String name; - - @ElementCollection - @Lob - private Map embeddedMap = new HashMap(); - - Simple() { - - } - - Simple(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getEmbeddedMap() { - return embeddedMap; - } - - public void setEmbeddedMap(Map embeddedMap) { - this.embeddedMap = embeddedMap; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java deleted file mode 100644 index 82a503d160c7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Lob; - -import org.hibernate.annotations.Nationalized; -import org.hibernate.dialect.HANADialect; -import org.hibernate.dialect.DB2Dialect; -import org.hibernate.community.dialect.DerbyDialect; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.dialect.SybaseDialect; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-9834") -@SkipForDialect(OracleDialect.class) -@SkipForDialect(value = PostgreSQLDialect.class, jiraKey = "HHH-11477", comment = "@Lob field in HQL predicate fails with error about text = bigint") -@SkipForDialect(value = HANADialect.class, comment = "HANA doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = SybaseDialect.class, comment = "Sybase doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = DB2Dialect.class, comment = "DB2 jdbc driver doesn't support setNString") -@SkipForDialect(value = DerbyDialect.class, comment = "Derby jdbc driver doesn't support setNString") -public class StringMapNationalizedLobTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Simple.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = new Simple( 1, "Simple" ); - simple.getEmbeddedMap().put( "1", "One" ); - simple.getEmbeddedMap().put( "2", "Two" ); - entityManager.persist( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().put( "3", "Three" ); - entityManager.merge( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().remove( "1" ); - simple.getEmbeddedMap().remove( "2" ); - entityManager.merge( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().remove( "3" ); - simple.getEmbeddedMap().put( "3", "Three-New" ); - entityManager.merge( simple ); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, 1 ); - simple.getEmbeddedMap().clear(); - entityManager.merge( simple ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( Simple.class, 1 ) ); - } - - @Test - public void testRevisionHistory() { - final Simple rev1 = getAuditReader().find( Simple.class, 1, 1 ); - assertEquals( 2, rev1.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .entries(), - rev1.getEmbeddedMap().entrySet() - ); - - final Simple rev2 = getAuditReader().find( Simple.class, 1, 2 ); - assertEquals( 3, rev2.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .add( "3", "Three" ) - .entries(), - rev2.getEmbeddedMap().entrySet() - ); - - final Simple rev3 = getAuditReader().find( Simple.class, 1, 3 ); - assertEquals( 1, rev3.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three" ) - .entries(), - rev3.getEmbeddedMap().entrySet() - ); - - final Simple rev4 = getAuditReader().find( Simple.class, 1, 4 ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three-New" ) - .entries(), - rev4.getEmbeddedMap().entrySet() - ); - - final Simple rev5 = getAuditReader().find( Simple.class, 1, 5 ); - assertEquals( 0, rev5.getEmbeddedMap().size() ); - } - - @Entity(name = "Simple") - @Audited - public static class Simple { - @Id - private Integer id; - private String name; - - @ElementCollection - @Lob - @Nationalized - private Map embeddedMap = new HashMap(); - - Simple() { - - } - - Simple(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getEmbeddedMap() { - return embeddedMap; - } - - public void setEmbeddedMap(Map embeddedMap) { - this.embeddedMap = embeddedMap; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java deleted file mode 100644 index 65490cf068a6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection; - -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class StringSet extends BaseEnversJPAFunctionalTestCase { - private Integer sse1_id; - private Integer sse2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StringSetEntity sse1 = new StringSetEntity(); - StringSetEntity sse2 = new StringSetEntity(); - - // Revision 1 (sse1: initialy empty, sse2: initialy 2 elements) - em.getTransaction().begin(); - - sse2.getStrings().add( "sse2_string1" ); - sse2.getStrings().add( "sse2_string2" ); - - em.persist( sse1 ); - em.persist( sse2 ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 2 elements, sse2: adding an existing element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().add( "sse1_string1" ); - sse1.getStrings().add( "sse1_string2" ); - - sse2.getStrings().add( "sse2_string1" ); - - em.getTransaction().commit(); - - // Revision 3 (sse1: removing a non-existing element, sse2: removing one element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().remove( "sse1_string3" ); - sse2.getStrings().remove( "sse2_string1" ); - - em.getTransaction().commit(); - - // - - sse1_id = sse1.getId(); - sse2_id = sse2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StringSetEntity.class, sse1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( StringSetEntity.class, sse2_id ) ); - } - - @Test - public void testHistoryOfSse1() { - StringSetEntity rev1 = getAuditReader().find( StringSetEntity.class, sse1_id, 1 ); - StringSetEntity rev2 = getAuditReader().find( StringSetEntity.class, sse1_id, 2 ); - StringSetEntity rev3 = getAuditReader().find( StringSetEntity.class, sse1_id, 3 ); - - assert rev1.getStrings().equals( Collections.EMPTY_SET ); - assert rev2.getStrings().equals( TestTools.makeSet( "sse1_string1", "sse1_string2" ) ); - assert rev3.getStrings().equals( TestTools.makeSet( "sse1_string1", "sse1_string2" ) ); - } - - @Test - public void testHistoryOfSse2() { - StringSetEntity rev1 = getAuditReader().find( StringSetEntity.class, sse2_id, 1 ); - StringSetEntity rev2 = getAuditReader().find( StringSetEntity.class, sse2_id, 2 ); - StringSetEntity rev3 = getAuditReader().find( StringSetEntity.class, sse2_id, 3 ); - - assert rev1.getStrings().equals( TestTools.makeSet( "sse2_string1", "sse2_string2" ) ); - assert rev2.getStrings().equals( TestTools.makeSet( "sse2_string1", "sse2_string2" ) ); - assert rev3.getStrings().equals( TestTools.makeSet( "sse2_string2" ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java deleted file mode 100644 index b21e702efd5f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6613") -public class BasicEmbeddableCollection extends BaseEnversJPAFunctionalTestCase { - private int id = -1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DarkCharacter.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - empty element collection - em.getTransaction().begin(); - DarkCharacter darkCharacter = new DarkCharacter( 1, 1 ); - em.persist( darkCharacter ); - em.getTransaction().commit(); - - id = darkCharacter.getId(); - - // Revision 2 - adding collection element - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().add( new Name( "Action", "Hank" ) ); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); - - // Revision 3 - adding another collection element - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().add( new Name( "Green", "Lantern" ) ); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); - - // Revision 4 - removing single collection element - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().remove( new Name( "Action", "Hank" ) ); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); - - // Revision 5 - removing all collection elements - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().clear(); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCount() { - Assert.assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( DarkCharacter.class, id ) ); - } - - @Test - public void testHistoryOfCharacter() { - DarkCharacter darkCharacter = new DarkCharacter( id, 1 ); - - DarkCharacter ver1 = getAuditReader().find( DarkCharacter.class, id, 1 ); - - Assert.assertEquals( darkCharacter, ver1 ); - Assert.assertEquals( 0, ver1.getNames().size() ); - - darkCharacter.getNames().add( new Name( "Action", "Hank" ) ); - DarkCharacter ver2 = getAuditReader().find( DarkCharacter.class, id, 2 ); - - Assert.assertEquals( darkCharacter, ver2 ); - Assert.assertEquals( darkCharacter.getNames(), ver2.getNames() ); - - darkCharacter.getNames().add( new Name( "Green", "Lantern" ) ); - DarkCharacter ver3 = getAuditReader().find( DarkCharacter.class, id, 3 ); - - Assert.assertEquals( darkCharacter, ver3 ); - Assert.assertEquals( darkCharacter.getNames(), ver3.getNames() ); - - darkCharacter.getNames().remove( new Name( "Action", "Hank" ) ); - DarkCharacter ver4 = getAuditReader().find( DarkCharacter.class, id, 4 ); - - Assert.assertEquals( darkCharacter, ver4 ); - Assert.assertEquals( darkCharacter.getNames(), ver4.getNames() ); - - darkCharacter.getNames().clear(); - DarkCharacter ver5 = getAuditReader().find( DarkCharacter.class, id, 5 ); - - Assert.assertEquals( darkCharacter, ver5 ); - Assert.assertEquals( darkCharacter.getNames(), ver5.getNames() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/DarkCharacter.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/DarkCharacter.java deleted file mode 100644 index c9cfe5eeb2e9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/DarkCharacter.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class DarkCharacter implements Serializable { - @Id - private int id; - - @ElementCollection - private Set names = new HashSet(); - - private int kills; - - public DarkCharacter() { - } - - public DarkCharacter(int id, int kills) { - this.id = id; - this.kills = kills; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DarkCharacter) ) { - return false; - } - - DarkCharacter character = (DarkCharacter) o; - - if ( id != character.id ) { - return false; - } - if ( kills != character.kills ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + kills; - return result; - } - - @Override - public String toString() { - return "DarkCharacter(id = " + id + ", kills = " + kills + ")"; - } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public int getKills() { - return kills; - } - - public void setKills(int kills) { - this.kills = kills; - } - - public Set getNames() { - return names; - } - - public void setNames(Set names) { - this.names = names; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java deleted file mode 100644 index d2415602087d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1; -import org.hibernate.orm.test.envers.entities.components.Component3; -import org.hibernate.orm.test.envers.entities.components.Component4; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@JiraKey(value = "HHH-6613") -public class EmbeddableList1 extends BaseEnversJPAFunctionalTestCase { - private Integer ele1_id = null; - - private final Component4 c4_1 = new Component4( "c41", "c41_value", "c41_description" ); - private final Component4 c4_2 = new Component4( "c42", "c42_value2", "c42_description" ); - private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); - private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EmbeddableListEntity1 ele1 = new EmbeddableListEntity1(); - - // Revision 1 (ele1: initially 1 element in both collections) - em.getTransaction().begin(); - ele1.getComponentList().add( c3_1 ); - em.persist( ele1 ); - em.getTransaction().commit(); - - // Revision (still 1) (ele1: removing non-existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); - - // Revision 2 (ele1: adding one element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_2 ); - em.getTransaction().commit(); - - // Revision 3 (ele1: adding one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_1 ); - em.getTransaction().commit(); - - // Revision 4 (ele1: removing one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); - - ele1_id = ele1.getId(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - EmbeddableListEntity1.class, - ele1_id - ) - ); - } - - @Test - public void testHistoryOfEle1() { - EmbeddableListEntity1 rev1 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 1 ); - EmbeddableListEntity1 rev2 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 2 ); - EmbeddableListEntity1 rev3 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 3 ); - EmbeddableListEntity1 rev4 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 4 ); - - assertEquals( Collections.singletonList( c3_1 ), rev1.getComponentList() ); - assertEquals( Arrays.asList( c3_1, c3_2 ), rev2.getComponentList() ); - assertEquals( Arrays.asList( c3_1, c3_2, c3_1 ), rev3.getComponentList() ); - assertEquals( Arrays.asList( c3_1, c3_1 ), rev4.getComponentList() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java deleted file mode 100644 index 0951eb4ecd2c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestNoProxyEntity; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity2; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneEagerComponent; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * Checks if many-to-one relations inside an embedded component list are being audited. - * - * @author thiagolrc - */ -@JiraKey(value = "HHH-6613") -public class EmbeddableList2 extends BaseEnversJPAFunctionalTestCase { - private Integer ele_id1 = null; - - private StrTestNoProxyEntity entity1 = new StrTestNoProxyEntity( "strTestEntity1" ); - private StrTestNoProxyEntity entity2 = new StrTestNoProxyEntity( "strTestEntity2" ); - private StrTestNoProxyEntity entity3 = new StrTestNoProxyEntity( "strTestEntity3" ); - private StrTestNoProxyEntity entity4 = new StrTestNoProxyEntity( "strTestEntity3" ); - private StrTestNoProxyEntity entity4Copy = null; - - private ManyToOneEagerComponent manyToOneComponent1 = new ManyToOneEagerComponent( entity1, "dataComponent1" ); - private ManyToOneEagerComponent manyToOneComponent2 = new ManyToOneEagerComponent( entity2, "dataComponent2" ); - private ManyToOneEagerComponent manyToOneComponent4 = new ManyToOneEagerComponent( entity4, "dataComponent4" ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity2.class, StrTestNoProxyEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 (ele1: saving a list with 1 many-to-one component) - em.getTransaction().begin(); - EmbeddableListEntity2 ele1 = new EmbeddableListEntity2(); - em.persist( entity1 ); //persisting the entities referenced by the components - em.persist( entity2 ); - ele1.getComponentList().add( manyToOneComponent1 ); - em.persist( ele1 ); - em.getTransaction().commit(); - ele_id1 = ele1.getId(); - - // Revision 2 (ele1: changing the component) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList().clear(); - ele1.getComponentList().add( manyToOneComponent2 ); - em.getTransaction().commit(); - - //Revision 3 (ele1: putting back the many-to-one component to the list) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList().add( manyToOneComponent1 ); - em.getTransaction().commit(); - - // Revision 4 (ele1: changing the component's entity) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - em.persist( entity3 ); - ele1.getComponentList().get( ele1.getComponentList().indexOf( manyToOneComponent2 ) ).setEntity( entity3 ); - ele1.getComponentList() - .get( ele1.getComponentList().indexOf( manyToOneComponent2 ) ) - .setData( "dataComponent3" ); - em.getTransaction().commit(); - - // Revision 5 (ele1: adding a new many-to-one component) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - em.persist( entity4 ); - entity4Copy = new StrTestNoProxyEntity( entity4.getStr(), entity4.getId() ); - ele1.getComponentList().add( manyToOneComponent4 ); - em.getTransaction().commit(); - - // Revision 6 (ele1: changing the component's entity properties) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList() - .get( ele1.getComponentList().indexOf( manyToOneComponent4 ) ) - .getEntity() - .setStr( "sat4" ); - em.getTransaction().commit(); - - // Revision 7 (ele1: removing component) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList().remove( ele1.getComponentList().indexOf( manyToOneComponent4 ) ); - em.getTransaction().commit(); - - // Revision 8 (ele1: removing all) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - em.remove( ele1 ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 7, 8 ), - getAuditReader().getRevisions( EmbeddableListEntity2.class, ele_id1 ) - ); - assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity1.getId() ) - ); - assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity2.getId() ) - ); - assertEquals( - Arrays.asList( 4 ), getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity3.getId() ) - ); - assertEquals( - Arrays.asList( 5, 6 ), - getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity4.getId() ) - ); - } - - @Test - public void testManyToOneComponentList() { - // Revision 1: many-to-one component1 in the list - EmbeddableListEntity2 rev1 = getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 1 ); - assertNotNull( "Revision not found", rev1 ); - assertTrue( "The component collection was not audited", rev1.getComponentList().size() > 0 ); - assertEquals( - "The component primitive property was not audited", - "dataComponent1", rev1.getComponentList().get( 0 ).getData() - ); - assertEquals( - "The component manyToOne reference was not audited", - entity1, rev1.getComponentList().get( 0 ).getEntity() - ); - } - - @Test - public void testHistoryOfEle1() { - // Revision 1: many-to-one component in the list - assertEquals( - Arrays.asList( new ManyToOneEagerComponent( entity1, "dataComponent1" ) ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 1 ).getComponentList() - ); - - // Revision 2: many-to-one component in the list - assertEquals( - Arrays.asList( new ManyToOneEagerComponent( entity2, "dataComponent2" ) ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 2 ).getComponentList() - ); - - // Revision 3: two many-to-one components in the list - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity2, "dataComponent2" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 3 ).getComponentList() - ); - - // Revision 4: second component edited and first one in the list - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 4 ).getComponentList() - ); - - // Revision 5: fourth component added in the list - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ), - new ManyToOneEagerComponent( entity4Copy, "dataComponent4" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 5 ).getComponentList() - ); - - // Revision 6: changing fourth component property - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ), - new ManyToOneEagerComponent( entity4, "dataComponent4" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 6 ).getComponentList() - ); - - // Revision 7: removing component number four - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 7 ).getComponentList() - ); - - assertNull( getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 8 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java deleted file mode 100644 index 394d7f05d8e3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestNoProxyEntity; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity3; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneEagerComponent; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import java.util.Arrays; - -import static org.junit.Assert.assertEquals; - -/** - * @author Cankut Guven - */ -@JiraKey(value = "HHH-11364") -public class EmbeddableList3 extends BaseEnversJPAFunctionalTestCase { - private Integer ele3_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EmbeddableListEntity3.class, StrTestNoProxyEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - ele3_id = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - EmbeddableListEntity3 ele3 = new EmbeddableListEntity3(); - ele3.getComponentList().add( new ManyToOneEagerComponent( null, "data" ) ); - entityManager.persist( ele3 ); - return ele3.getId(); - } ); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( EmbeddableListEntity3.class, ele3_id) ); - } - - @Test - public void testCollectionOfEmbeddableWithNullJoinColumn() { - final EmbeddableListEntity3 ele3 = getAuditReader().find( EmbeddableListEntity3.class, ele3_id, 1 ); - assertEquals( "Expected there to be elements in the list", 1, ele3.getComponentList().size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java deleted file mode 100644 index c013fb6cb198..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableMapEntity; -import org.hibernate.orm.test.envers.entities.components.Component3; -import org.hibernate.orm.test.envers.entities.components.Component4; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@JiraKey(value = "HHH-6613") -public class EmbeddableMap extends BaseEnversJPAFunctionalTestCase { - private Integer eme1_id = null; - private Integer eme2_id = null; - - private final Component4 c4_1 = new Component4( "c41", "c41_value", "c41_description" ); - private final Component4 c4_2 = new Component4( "c42", "c42_value2", "c42_description" ); - private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); - private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableMapEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EmbeddableMapEntity eme1 = new EmbeddableMapEntity(); - EmbeddableMapEntity eme2 = new EmbeddableMapEntity(); - - // Revision 1 (eme1: initialy empty, eme2: initialy 1 mapping) - em.getTransaction().begin(); - eme2.getComponentMap().put( "1", c3_1 ); - em.persist( eme1 ); - em.persist( eme2 ); - em.getTransaction().commit(); - - // Revision 2 (eme1: adding 2 mappings, eme2: no changes) - em.getTransaction().begin(); - eme1 = em.find( EmbeddableMapEntity.class, eme1.getId() ); - eme2 = em.find( EmbeddableMapEntity.class, eme2.getId() ); - eme1.getComponentMap().put( "1", c3_1 ); - eme1.getComponentMap().put( "2", c3_2 ); - em.getTransaction().commit(); - - // Revision 3 (eme1: removing an existing mapping, eme2: replacing a value) - em.getTransaction().begin(); - eme1 = em.find( EmbeddableMapEntity.class, eme1.getId() ); - eme2 = em.find( EmbeddableMapEntity.class, eme2.getId() ); - eme1.getComponentMap().remove( "1" ); - eme2.getComponentMap().put( "1", c3_2 ); - em.getTransaction().commit(); - - // No revision (eme1: removing a non-existing mapping, eme2: replacing with the same value) - em.getTransaction().begin(); - eme1 = em.find( EmbeddableMapEntity.class, eme1.getId() ); - eme2 = em.find( EmbeddableMapEntity.class, eme2.getId() ); - eme1.getComponentMap().remove( "3" ); - eme2.getComponentMap().put( "1", c3_2 ); - em.getTransaction().commit(); - - eme1_id = eme1.getId(); - eme2_id = eme2.getId(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( - EmbeddableMapEntity.class, - eme1_id - ) - ); - Assert.assertEquals( - Arrays.asList( 1, 3 ), getAuditReader().getRevisions( - EmbeddableMapEntity.class, - eme2_id - ) - ); - } - - @Test - public void testHistoryOfEme1() { - EmbeddableMapEntity rev1 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 1 ); - EmbeddableMapEntity rev2 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 2 ); - EmbeddableMapEntity rev3 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 3 ); - EmbeddableMapEntity rev4 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 4 ); - - Assert.assertEquals( Collections.EMPTY_MAP, rev1.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_1, "2", c3_2 ), rev2.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "2", c3_2 ), rev3.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "2", c3_2 ), rev4.getComponentMap() ); - } - - @Test - public void testHistoryOfEme2() { - EmbeddableMapEntity rev1 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 1 ); - EmbeddableMapEntity rev2 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 2 ); - EmbeddableMapEntity rev3 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 3 ); - EmbeddableMapEntity rev4 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 4 ); - - Assert.assertEquals( TestTools.makeMap( "1", c3_1 ), rev1.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_1 ), rev2.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_2 ), rev3.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_2 ), rev4.getComponentMap() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java deleted file mode 100644 index ce672a1f3dbd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableSetEntity; -import org.hibernate.orm.test.envers.entities.components.Component3; -import org.hibernate.orm.test.envers.entities.components.Component4; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Kristoffer Lundberg (kristoffer at cambio dot se) - */ -@JiraKey(value = "HHH-6613") -public class EmbeddableSet extends BaseEnversJPAFunctionalTestCase { - private Integer ese1_id = null; - - private final Component4 c4_1 = new Component4( "c41", "c41_value", "c41_description" ); - private final Component4 c4_2 = new Component4( "c42", "c42_value2", "c42_description" ); - private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); - private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - private final Component3 c3_3 = new Component3( "c33", c4_1, c4_2 ); - private final Component3 c3_4 = new Component3( "c34", c4_1, c4_2 ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EmbeddableSetEntity ese1 = new EmbeddableSetEntity(); - - // Revision 1 (ese1: initially two elements) - em.getTransaction().begin(); - ese1.getComponentSet().add( c3_1 ); - ese1.getComponentSet().add( c3_3 ); - em.persist( ese1 ); - em.getTransaction().commit(); - - // Revision (still 1) (ese1: removing non-existing element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_2 ); - em.getTransaction().commit(); - - // Revision 2 (ese1: adding one element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_2 ); - em.getTransaction().commit(); - - // Revision (still 2) (ese1: adding one existing element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_1 ); - em.getTransaction().commit(); - - // Revision 3 (ese1: removing one existing element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_2 ); - em.getTransaction().commit(); - - // Revision 4 (ese1: adding two elements) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_2 ); - ese1.getComponentSet().add( c3_4 ); - em.getTransaction().commit(); - - // Revision 5 (ese1: removing two elements) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_2 ); - ese1.getComponentSet().remove( c3_4 ); - em.getTransaction().commit(); - - // Revision 6 (ese1: removing and adding two elements) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_1 ); - ese1.getComponentSet().remove( c3_3 ); - ese1.getComponentSet().add( c3_2 ); - ese1.getComponentSet().add( c3_4 ); - em.getTransaction().commit(); - - // Revision 7 (ese1: adding one element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_1 ); - em.getTransaction().commit(); - - ese1_id = ese1.getId(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 6, 7 ), getAuditReader().getRevisions( - EmbeddableSetEntity.class, - ese1_id - ) - ); - } - - @Test - public void testHistoryOfEse1() { - EmbeddableSetEntity rev1 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 1 ); - EmbeddableSetEntity rev2 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 2 ); - EmbeddableSetEntity rev3 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 3 ); - EmbeddableSetEntity rev4 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 4 ); - EmbeddableSetEntity rev5 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 5 ); - EmbeddableSetEntity rev6 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 6 ); - EmbeddableSetEntity rev7 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 7 ); - - assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev1.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_2, c3_3 ), rev2.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev3.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_2, c3_3, c3_4 ), rev4.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev5.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_2, c3_4 ), rev6.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_2, c3_4, c3_1 ), rev7.getComponentSet() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Item.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Item.java deleted file mode 100644 index 17ff79a89dda..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Item.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Chris Cranford - */ -@Embeddable -@Audited -public class Item { - private String name; - - @ManyToOne - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Type type; - - Item() { - - } - - Item(String name, Type type) { - this.name = name; - this.type = type; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Type getType() { - return type; - } - - public void setType(Type type) { - this.type = type; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + ( type != null ? type.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || getClass() != object.getClass() ) { - return false; - } - - Item that = (Item) object; - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - return !( type != null ? !type.equals( that.type ) : that.type != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java deleted file mode 100644 index 424743f9d2fb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -/** - * This test verifies that when a list-based {@link ElementCollection} of {@link Embeddable} objects - * are audited that the same number of audit rows are generated regardless whether the embeddable - * implements proper {@code equals} and {@code hashCode} methods. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12607") -public class ListEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - final Emb emb1 = new Emb( "value1" ); - final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = new TestEntity( 1 ); - e.setEmbs1( new ArrayList<>() ); - e.getEmbs1().add( emb1 ); - e.getEmbs1().add( emb2 ); - entityManager.persist( e ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = entityManager.find( TestEntity.class, 1 ); - for ( Emb emb : e.getEmbs1() ) { - if ( emb.getValue().equals( "value1" ) ) { - e.getEmbs1().remove( emb ); - break; - } - } - e.getEmbs1().add( new Emb( "value3" ) ); - } ); - } - - @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } - } - - @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } - } - - @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value1" ); - assertHasEmbeddableWithValue( e, "value2" ); - } - - @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value3" ); - assertHasEmbeddableWithValue( e, "value2" ); - } - - private static void assertHasEmbeddableWithValue(TestEntity entity, String value) { - for ( Emb embeddable : entity.getEmbs1() ) { - if ( embeddable.getValue().equals( value ) ) { - return; - } - } - fail( "Failed to find embeddable with value [" + value + "]" ); - } - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @ElementCollection - @OrderColumn - private List embs1; - - public TestEntity() { - - } - - public TestEntity(Integer id) { - this.id = id; - } - - public List getEmbs1() { - return embs1; - } - - public void setEmbs1(List embs1) { - this.embs1 = embs1; - } - } - - @Embeddable - public static class Emb implements Serializable { - @Column(name = "val") - private String value; - - public Emb() { - - } - - public Emb(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Emb emb = (Emb) o; - return Objects.equals( value, emb.value ); - } - - @Override - public int hashCode() { - return Objects.hash( value ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java deleted file mode 100644 index c316cc7c634e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -/** - * This test verifies that when a list-based {@link ElementCollection} of {@link Embeddable} objects - * are audited that the same number of audit rows are generated regardless whether the embeddable - * implements proper {@code equals} and {@code hashCode} methods. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12607") -public class ListNoEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - final Emb emb1 = new Emb( "value1" ); - final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = new TestEntity( 1 ); - e.setEmbs1( new ArrayList<>() ); - e.getEmbs1().add( emb1 ); - e.getEmbs1().add( emb2 ); - entityManager.persist( e ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = entityManager.find( TestEntity.class, 1 ); - for ( Emb emb : e.getEmbs1() ) { - if ( emb.getValue().equals( "value1" ) ) { - e.getEmbs1().remove( emb ); - break; - } - } - e.getEmbs1().add( new Emb( "value3" ) ); - } ); - } - - @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } - } - - @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } - } - - @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value1" ); - assertHasEmbeddableWithValue( e, "value2" ); - } - - @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value3" ); - assertHasEmbeddableWithValue( e, "value2" ); - } - - private static void assertHasEmbeddableWithValue(TestEntity entity, String value) { - for ( Emb embeddable : entity.getEmbs1() ) { - if ( embeddable.getValue().equals( value ) ) { - return; - } - } - fail( "Failed to find embeddable with value [" + value + "]" ); - } - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @ElementCollection - @OrderColumn - private List embs1; - - public TestEntity() { - - } - - public TestEntity(Integer id) { - this.id = id; - } - - public List getEmbs1() { - return embs1; - } - - public void setEmbs1(List embs1) { - this.embs1 = embs1; - } - } - - @Embeddable - public static class Emb implements Serializable { - @Column(name = "val") - private String value; - - public Emb() { - - } - - public Emb(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java deleted file mode 100644 index 82291ac50d44..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * This test verifies that when a map-based {@link ElementCollection} of {@link Embeddable} objects - * are audited that the same number of audit rows are generated regardless whether the embeddable - * implements proper {@code equals} and {@code hashCode} methods. - * - * The {@link ValidityAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | - * +-----+---------+---------------+-----------+--------+--------+ - * | 1 | 0 | 1 | a | 2 | value1 | - * | 1 | 0 | 1 | b | null | value2 | - * | 2 | 0 | 1 | a | null | value3 | - * | 2 | 2 | 1 | a | null | value1 | - * +-----+---------+---------------+-----------+--------+--------+ - * - * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | - * +-----+---------+---------------+-----------+--------+ - * | 1 | 0 | 1 | a | value1 | - * | 1 | 0 | 1 | b | value2 | - * | 2 | 0 | 1 | a | value3 | - * | 2 | 2 | 1 | a | value1 | - * +-----+---------+---------------+-----------+--------+ - * - * This test uses hashcode and equals as a baseline. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12607") -public class MapEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = new TestEntity( 1 ); - e.setEmbs1( new HashMap<>() ); - e.getEmbs1().put( "a", new Emb( "value1" ) ); - e.getEmbs1().put( "b", new Emb( "value2" ) ); - entityManager.persist( e ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = entityManager.find( TestEntity.class, 1 ); - e.getEmbs1().put( "a", new Emb( "value3" ) ); - } ); - } - - @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value1", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); - } - - @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value3", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); - } - - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @ElementCollection - private Map embs1; - - public TestEntity() { - - } - - public TestEntity(Integer id) { - this.id = id; - } - - public Map getEmbs1() { - return embs1; - } - - public void setEmbs1(Map embs1) { - this.embs1 = embs1; - } - } - - @Embeddable - public static class Emb implements Serializable { - @Column(name = "val") - private String value; - - public Emb() { - - } - - public Emb(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Emb emb = (Emb) o; - return Objects.equals( value, emb.value ); - } - - @Override - public int hashCode() { - return Objects.hash( value ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java deleted file mode 100644 index 3fd5f8242379..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * This test verifies that when a map-based {@link ElementCollection} of {@link Embeddable} objects - * are audited that the same number of audit rows are generated regardless whether the embeddable - * implements proper {@code equals} and {@code hashCode} methods. - * - * The {@link ValidityAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | - * +-----+---------+---------------+-----------+--------+--------+ - * | 1 | 0 | 1 | a | 2 | value1 | - * | 1 | 0 | 1 | b | null | value2 | - * | 2 | 0 | 1 | a | null | value3 | - * | 2 | 2 | 1 | a | null | value1 | - * +-----+---------+---------------+-----------+--------+--------+ - * - * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | - * +-----+---------+---------------+-----------+--------+ - * | 1 | 0 | 1 | a | value1 | - * | 1 | 0 | 1 | b | value2 | - * | 2 | 0 | 1 | a | value3 | - * | 2 | 2 | 1 | a | value1 | - * +-----+---------+---------------+-----------+--------+ - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12607") -public class MapNoEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = new TestEntity( 1 ); - e.setEmbs1( new HashMap<>() ); - e.getEmbs1().put( "a", new Emb( "value1" ) ); - e.getEmbs1().put( "b", new Emb( "value2" ) ); - entityManager.persist( e ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = entityManager.find( TestEntity.class, 1 ); - e.getEmbs1().put( "a", new Emb( "value3" ) ); - } ); - } - - @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value1", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); - } - - @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value3", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); - } - - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @ElementCollection - private Map embs1; - - public TestEntity() { - - } - - public TestEntity(Integer id) { - this.id = id; - } - - public Map getEmbs1() { - return embs1; - } - - public void setEmbs1(Map embs1) { - this.embs1 = embs1; - } - } - - @Embeddable - public static class Emb implements Serializable { - @Column(name = "val") - private String value; - - public Emb() { - - } - - public Emb(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Name.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Name.java deleted file mode 100644 index ca5ceb774e3f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Name.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import jakarta.persistence.Embeddable; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Embeddable -@Audited -public class Name implements Serializable { - private String firstName; - private String lastName; - - public Name() { - } - - public Name(String firstName, String lastName) { - this.firstName = firstName; - this.lastName = lastName; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Name) ) { - return false; - } - - Name name = (Name) o; - if ( firstName != null ? !firstName.equals( name.firstName ) : name.firstName != null ) { - return false; - } - if ( lastName != null ? !lastName.equals( name.lastName ) : name.lastName != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = firstName != null ? firstName.hashCode() : 0; - result = 31 * result + (lastName != null ? lastName.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Name(firstName = " + firstName + ", lastName = " + lastName + ")"; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java deleted file mode 100644 index b4f730b7a036..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.Arrays; -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11215") -public class NullPointerExceptionTest extends BaseEnversJPAFunctionalTestCase { - private Integer productId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Product.class, Type.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, ValidityAuditStrategy.class.getName() ); - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - this.productId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = new Product( 1 , "Test" ); - product.getItems().add( new Item( "bread", null ) ); - entityManager.persist( product ); - return product.getId(); - } ); - - // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Type type = new Type( 2, "T2" ); - entityManager.persist( type ); - Product product = entityManager.find( Product.class, productId ); - product.getItems().add( new Item( "bread2", type ) ); - entityManager.merge( product ); - } ); - - // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = entityManager.find( Product.class, productId ); - product.getItems().remove( 0 ); - entityManager.merge( product ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( Product.class, productId ) ); - assertEquals( 1, getAuditReader().find( Product.class, productId, 1 ).getItems().size() ); - assertEquals( 2, getAuditReader().find( Product.class, productId, 2 ).getItems().size() ); - assertEquals( 1, getAuditReader().find( Product.class, productId, 3 ).getItems().size() ); - } - - @Test - public void testRevision1() { - final Product product = getAuditReader().find( Product.class, productId, 1 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); - } - - @Test - public void testRevision2() { - final Product product = getAuditReader().find( Product.class, productId, 2 ); - assertEquals( 2, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); - assertEquals( "bread2", product.getItems().get( 1 ).getName() ); - assertEquals( new Type( 2, "T2" ), product.getItems().get( 1 ).getType() ); - } - - @Test - public void testRevision3() { - final Product product = getAuditReader().find( Product.class, productId, 3 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread2", product.getItems().get( 0 ).getName() ); - assertEquals( new Type( 2, "T2" ), product.getItems().get( 0 ).getType() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Product.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Product.java deleted file mode 100644 index 30be22f490d6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Product.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Product { - @Id - private Integer id; - - private String name; - - @ElementCollection - @CollectionTable(name = "items", joinColumns = @JoinColumn(name = "productId")) - @OrderColumn(name = "position") - private List items = new ArrayList(); - - Product() { - - } - - Product(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( items != null ? items.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null | getClass() != object.getClass() ) { - return false; - } - - Product that = (Product) object; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - return !( items != null ? !items.equals( that.items ) : that.items != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java deleted file mode 100644 index 5f4d1e39e05a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * This test verifies that when a set-based {@link ElementCollection} of {@link Embeddable} objects - * are audited that the same number of audit rows are generated regardless whether the embeddable - * implements proper {@code equals} and {@code hashCode} methods. - * - * The {@link ValidityAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | - * +-----+---------+---------------+-----------+--------+--------+ - * | 1 | 0 | 1 | a | 2 | value1 | - * | 1 | 0 | 1 | b | null | value2 | - * | 2 | 0 | 1 | a | null | value3 | - * | 2 | 2 | 1 | a | null | value1 | - * +-----+---------+---------------+-----------+--------+--------+ - * - * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | - * +-----+---------+---------------+-----------+--------+ - * | 1 | 0 | 1 | a | value1 | - * | 1 | 0 | 1 | b | value2 | - * | 2 | 0 | 1 | a | value3 | - * | 2 | 2 | 1 | a | value1 | - * +-----+---------+---------------+-----------+--------+ - * - * This test uses hashcode and equals as a baseline. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12607") -public class SetEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - final Emb emb1 = new Emb( "value1" ); - final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = new TestEntity( 1 ); - e.setEmbs1( new HashSet<>() ); - e.getEmbs1().add( emb1 ); - e.getEmbs1().add( emb2 ); - entityManager.persist( e ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = entityManager.find( TestEntity.class, 1 ); - e.getEmbs1().remove( emb1 ); - e.getEmbs1().add( new Emb( "value3" ) ); - } ); - } - - @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( e.getEmbs1(), TestTools.makeSet( new Emb( "value1" ), new Emb( "value2" ) ) ); - } - - @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( e.getEmbs1(), TestTools.makeSet( new Emb( "value3" ), new Emb( "value2" ) ) ); - } - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @ElementCollection - private Set embs1; - - public TestEntity() { - - } - - public TestEntity(Integer id) { - this.id = id; - } - - public Set getEmbs1() { - return embs1; - } - - public void setEmbs1(Set embs1) { - this.embs1 = embs1; - } - } - - @Embeddable - public static class Emb implements Serializable { - @Column(name = "val") - private String value; - - public Emb() { - - } - - public Emb(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Emb emb = (Emb) o; - return Objects.equals( value, emb.value ); - } - - @Override - public int hashCode() { - return Objects.hash( value ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java deleted file mode 100644 index 529c356f8fa2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -/** - * This test verifies that when a set-based {@link ElementCollection} of {@link Embeddable} objects - * are audited that the same number of audit rows are generated regardless whether the embeddable - * implements proper {@code equals} and {@code hashCode} methods. - * - * The {@link ValidityAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | - * +-----+---------+---------------+-----------+--------+--------+ - * | 1 | 0 | 1 | a | 2 | value1 | - * | 1 | 0 | 1 | b | null | value2 | - * | 2 | 0 | 1 | a | null | value3 | - * | 2 | 2 | 1 | a | null | value1 | - * +-----+---------+---------------+-----------+--------+--------+ - * - * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * - * +-----+---------+---------------+-----------+--------+ - * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | - * +-----+---------+---------------+-----------+--------+ - * | 1 | 0 | 1 | a | value1 | - * | 1 | 0 | 1 | b | value2 | - * | 2 | 0 | 1 | a | value3 | - * | 2 | 2 | 1 | a | value1 | - * +-----+---------+---------------+-----------+--------+ - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12607") -public class SetNoEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - final Emb emb1 = new Emb( "value1" ); - final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = new TestEntity( 1 ); - e.setEmbs1( new HashSet<>() ); - e.getEmbs1().add( emb1 ); - e.getEmbs1().add( emb2 ); - entityManager.persist( e ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - TestEntity e = entityManager.find( TestEntity.class, 1 ); - for ( Emb emb : e.getEmbs1() ) { - if ( emb.getValue().equals( "value1" ) ) { - e.getEmbs1().remove( emb ); - break; - } - } - e.getEmbs1().add( new Emb( "value3" ) ); - } ); - } - - @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } - } - - @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value1" ); - assertHasEmbeddableWithValue( e, "value2" ); - } - - @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value3" ); - assertHasEmbeddableWithValue( e, "value2" ); - } - - private static void assertHasEmbeddableWithValue(TestEntity entity, String value) { - for ( Emb embeddable : entity.getEmbs1() ) { - if ( embeddable.getValue().equals( value ) ) { - return; - } - } - fail( "Failed to find embeddable with value [" + value + "]" ); - } - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @ElementCollection - private Set embs1; - - public TestEntity() { - - } - - public TestEntity(Integer id) { - this.id = id; - } - - public Set getEmbs1() { - return embs1; - } - - public void setEmbs1(Set embs1) { - this.embs1 = embs1; - } - } - - @Embeddable - public static class Emb implements Serializable { - @Column(name = "val") - private String value; - - public Emb() { - - } - - public Emb(String value) { - this.value = value; - } - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Type.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Type.java deleted file mode 100644 index 7290761369ea..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/Type.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.embeddable; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.annotations.Immutable; - -/** - * @author Chris Cranford - */ -@Entity -@Immutable -public class Type { - @Id - private Integer id; - private String name; - - Type() { - - } - - Type(Integer id) { - this( id, null ); - } - - Type(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || getClass() != object.getClass() ) { - return false; - } - - Type that = (Type) object; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - return !( name != null ? !name.equals( that.name ) : that.name != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java deleted file mode 100644 index 1e8f23f22d25..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.mapkey; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.Component2; -import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ComponentMapKey extends BaseEnversJPAFunctionalTestCase { - private Integer cmke_id; - - private Integer cte1_id; - private Integer cte2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentMapKeyEntity.class, ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ComponentMapKeyEntity imke = new ComponentMapKeyEntity(); - - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - - em.persist( cte1 ); - em.persist( cte2 ); - - imke.getIdmap().put( cte1.getComp1(), cte1 ); - - em.persist( imke ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - imke = em.find( ComponentMapKeyEntity.class, imke.getId() ); - - imke.getIdmap().put( cte2.getComp1(), cte2 ); - - em.getTransaction().commit(); - - // - - cmke_id = imke.getId(); - - cte1_id = cte1.getId(); - cte2_id = cte2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ComponentMapKeyEntity.class, cmke_id ) ); - } - - @Test - public void testHistoryOfImke() { - ComponentTestEntity cte1 = getEntityManager().find( ComponentTestEntity.class, cte1_id ); - ComponentTestEntity cte2 = getEntityManager().find( ComponentTestEntity.class, cte2_id ); - - // These fields are unversioned. - cte1.setComp2( null ); - cte2.setComp2( null ); - - ComponentMapKeyEntity rev1 = getAuditReader().find( ComponentMapKeyEntity.class, cmke_id, 1 ); - ComponentMapKeyEntity rev2 = getAuditReader().find( ComponentMapKeyEntity.class, cmke_id, 2 ); - - assert rev1.getIdmap().equals( TestTools.makeMap( cte1.getComp1(), cte1 ) ); - assert rev2.getIdmap().equals( TestTools.makeMap( cte1.getComp1(), cte1, cte2.getComp1(), cte2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKeyEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKeyEntity.java deleted file mode 100644 index 27fae21b37ea..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKeyEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.mapkey; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.MapKey; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "CompMapKey") -public class ComponentMapKeyEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ManyToMany - @MapKey(name = "comp1") - private Map idmap; - - public ComponentMapKeyEntity() { - idmap = new HashMap(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getIdmap() { - return idmap; - } - - public void setIdmap(Map idmap) { - this.idmap = idmap; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ComponentMapKeyEntity) ) { - return false; - } - - ComponentMapKeyEntity that = (ComponentMapKeyEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "CMKE(id = " + id + ", idmap = " + idmap + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java deleted file mode 100644 index 7d509d662ac5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.mapkey; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class IdMapKey extends BaseEnversJPAFunctionalTestCase { - private Integer imke_id; - - private Integer ste1_id; - private Integer ste2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IdMapKeyEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - IdMapKeyEntity imke = new IdMapKeyEntity(); - - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity( "x" ); - StrTestEntity ste2 = new StrTestEntity( "y" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - imke.getIdmap().put( ste1.getId(), ste1 ); - - em.persist( imke ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); - - ste2 = em.find( StrTestEntity.class, ste2.getId() ); - imke = em.find( IdMapKeyEntity.class, imke.getId() ); - - imke.getIdmap().put( ste2.getId(), ste2 ); - - em.getTransaction().commit(); - - // - - imke_id = imke.getId(); - - ste1_id = ste1.getId(); - ste2_id = ste2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( IdMapKeyEntity.class, imke_id ) ); - } - - @Test - public void testHistoryOfImke() { - StrTestEntity ste1 = getEntityManager().find( StrTestEntity.class, ste1_id ); - StrTestEntity ste2 = getEntityManager().find( StrTestEntity.class, ste2_id ); - - IdMapKeyEntity rev1 = getAuditReader().find( IdMapKeyEntity.class, imke_id, 1 ); - IdMapKeyEntity rev2 = getAuditReader().find( IdMapKeyEntity.class, imke_id, 2 ); - - assert rev1.getIdmap().equals( TestTools.makeMap( ste1.getId(), ste1 ) ); - assert rev2.getIdmap().equals( TestTools.makeMap( ste1.getId(), ste1, ste2.getId(), ste2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKeyEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKeyEntity.java deleted file mode 100644 index 5fa174c24762..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKeyEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.mapkey; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.MapKey; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "IdMapKey") -public class IdMapKeyEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ManyToMany - @MapKey - private Map idmap; - - public IdMapKeyEntity() { - idmap = new HashMap(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getIdmap() { - return idmap; - } - - public void setIdmap(Map idmap) { - this.idmap = idmap; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof IdMapKeyEntity) ) { - return false; - } - - IdMapKeyEntity that = (IdMapKeyEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "IMKE(id = " + id + ", idmap = " + idmap + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java deleted file mode 100644 index 26bcdae0738f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.mapkey; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Id; -import jakarta.persistence.MapKeyColumn; -import jakarta.persistence.MapKeyEnumerated; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-13655") -public class MapKeyEnumeratedNonEntityTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { - - final TestEntity test = new TestEntity(); - test.setId( 1 ); - test.addMapKeyAssociation( TestEnum.ONE, 1 ); - - entityManager.persist( test ); - } ); - - // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final TestEntity test = entityManager.find( TestEntity.class, 1 ); - test.addMapKeyAssociation( TestEnum.TWO, 2 ); - - entityManager.merge( test ); - } ); - - // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final TestEntity test = entityManager.find( TestEntity.class, 1 ); - test.removeMapKeyAssociation( TestEnum.ONE ); - entityManager.merge( test ); - } ); - - // Revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final TestEntity test = entityManager.find( TestEntity.class, 1 ); - test.removeMapKeyAssociation( TestEnum.TWO ); - entityManager.merge( test ); - } ); - } - - @Test - public void testRevisionNumberHistory() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( TestEntity.class, 1 ) ); - } - - @Test - public void testRevisionHistory() { - - final TestEntity rev1 = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 1, rev1.getMapEnumMap().size() ); - assertEquals( TestEnum.ONE, rev1.getMapEnumMap().keySet().iterator().next() ); - - final TestEntity rev2 = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, rev2.getMapEnumMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.ONE, TestEnum.TWO ), rev2.getMapEnumMap().keySet() ); - checkCollection( rev2.getMapEnumMap().values(), 1, 2 ); - - final TestEntity rev3 = getAuditReader().find( TestEntity.class, 1, 3 ); - assertEquals( 1, rev3.getMapEnumMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.TWO ), rev3.getMapEnumMap().keySet() ); - checkCollection( rev2.getMapEnumMap().values(), 2 ); - - final TestEntity rev4 = getAuditReader().find( TestEntity.class, 1, 4 ); - assertEquals( 0, rev4.getMapEnumMap().size() ); - } - - public enum TestEnum { - ONE, - TWO - } - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @MapKeyEnumerated(EnumType.STRING) - @ElementCollection - @CollectionTable(name = "test_Entity_enum_items") - @MapKeyColumn(name = "type", length = 20, nullable = false) - private Map mapEnumMap = new HashMap<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getMapEnumMap() { - return mapEnumMap; - } - - public void setMapEnumMap(Map mapEnumMap) { - this.mapEnumMap = mapEnumMap; - } - - @Override - public String toString() { - return "TestEntity{" + - "id=" + id + - ", mapEnumMap=" + mapEnumMap + - '}'; - } - - public void addMapKeyAssociation(TestEnum key, Integer value) { - mapEnumMap.put( key, value ); - } - - public Integer removeMapKeyAssociation(TestEnum key) { - final Integer value = mapEnumMap.get( key ); - mapEnumMap.remove( key ); - return value; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java deleted file mode 100644 index 86d15fced8f8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.mapkey; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Collectors; - -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MapKeyEnumerated; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11797") -public class MapKeyEnumeratedTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class, MapEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { - final MapEntity map = new MapEntity( "Map1" ); - map.setId( 1 ); - - final TestEntity test = new TestEntity(); - test.setId( 1 ); - test.addMapKeyAssociation( TestEnum.ONE, map ); - - entityManager.persist( test ); - entityManager.persist( map ); - } ); - - // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final MapEntity map = new MapEntity( "Map2" ); - map.setId( 2 ); - - final TestEntity test = entityManager.find( TestEntity.class, 1 ); - test.addMapKeyAssociation( TestEnum.TWO, map ); - - entityManager.persist( map ); - entityManager.merge( test ); - } ); - - // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final TestEntity test = entityManager.find( TestEntity.class, 1 ); - final MapEntity map = test.removeMapKeyAssociation( TestEnum.ONE ); - entityManager.remove( map ); - entityManager.merge( test ); - } ); - - // Revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final TestEntity test = entityManager.find( TestEntity.class, 1 ); - final MapEntity map = test.removeMapKeyAssociation( TestEnum.TWO ); - entityManager.remove( map ); - entityManager.merge( test ); - } ); - } - - @Test - public void testRevisionNumberHistory() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( TestEntity.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( MapEntity.class, 1 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( MapEntity.class, 2 ) ); - } - - @Test - public void testRevisionHistory() { - - final TestEntity rev1 = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 1, rev1.getMapEntityMap().size() ); - assertEquals( TestEnum.ONE, rev1.getMapEntityMap().keySet().iterator().next() ); - - final TestEntity rev2 = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, rev2.getMapEntityMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.ONE, TestEnum.TWO ), rev2.getMapEntityMap().keySet() ); - assertEquals( TestTools.makeSet( 1, 2 ), rev2.getMapEntityMap().values().stream().map( MapEntity::getId ).collect( Collectors.toSet() ) ); - - final TestEntity rev3 = getAuditReader().find( TestEntity.class, 1, 3 ); - assertEquals( 1, rev3.getMapEntityMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.TWO ), rev3.getMapEntityMap().keySet() ); - assertEquals( TestTools.makeSet( 2 ), rev3.getMapEntityMap().values().stream().map( MapEntity::getId ).collect( Collectors.toSet() ) ); - - final TestEntity rev4 = getAuditReader().find( TestEntity.class, 1, 4 ); - assertEquals( 0, rev4.getMapEntityMap().size() ); - } - - public enum TestEnum { - ONE, - TWO - } - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - @Id - private Integer id; - - @OneToMany(mappedBy = "testEntity") - @MapKeyEnumerated(EnumType.STRING) - private Map mapEntityMap = new HashMap<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getMapEntityMap() { - return mapEntityMap; - } - - public void setMapEntityMap(Map mapEntityMap) { - this.mapEntityMap = mapEntityMap; - } - - @Override - public String toString() { - return "TestEntity{" + - "id=" + id + - ", mapEntityMap=" + mapEntityMap + - '}'; - } - - public void addMapKeyAssociation(TestEnum key, MapEntity value) { - mapEntityMap.put( key, value ); - value.setTestEntity( this ); - } - - public MapEntity removeMapKeyAssociation(TestEnum key) { - final MapEntity value = mapEntityMap.get( key ); - value.setTestEntity( null ); - mapEntityMap.remove( key ); - return value; - } - } - - @Entity(name = "MapEntity") - @Audited - public static class MapEntity { - @Id - private Integer id; - - @ManyToOne(optional = false) - private TestEntity testEntity; - - private String data; - - MapEntity() { - - } - - MapEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public TestEntity getTestEntity() { - return testEntity; - } - - public void setTestEntity(TestEntity testEntity) { - this.testEntity = testEntity; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - @Override - public String toString() { - return "MapEntity{" + - "id=" + id + - ", data=" + data + - ", testEntity=" + ( testEntity == null ? null : testEntity.getId() ) + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java deleted file mode 100644 index 254b5fed856a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -public abstract class AbstractCollectionChangeTest extends BaseEnversFunctionalTestCase { - protected Integer personId; - protected Integer parentId; - protected Integer houseId; - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.REVISION_ON_COLLECTION_CHANGE, getCollectionChangeValue() ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, Name.class, Parent.class, Child.class, House.class}; - } - - protected abstract String getCollectionChangeValue(); - - protected abstract List getExpectedPersonRevisions(); - - protected abstract List getExpectedParentRevisions(); - - protected abstract List getExpectedHouseRevisions(); - - @Test - @Priority(10) - public void initData() { - Session session = openSession(); - - // Rev 1 - session.getTransaction().begin(); - Person p = new Person(); - Name n = new Name(); - n.setName( "name1" ); - p.getNames().add( n ); - session.persist( p ); - session.getTransaction().commit(); - - // Rev 2 - session.getTransaction().begin(); - n.setName( "Changed name" ); - session.merge( p ); - session.getTransaction().commit(); - - // Rev 3 - session.getTransaction().begin(); - Name n2 = new Name(); - n2.setName( "name2" ); - p.getNames().add( n2 ); - session.getTransaction().commit(); - - personId = p.getId(); - - // Rev 4 - session.getTransaction().begin(); - Child child1 = new Child(); - Parent parent = new Parent(); - parent.setName( "P1" ); - child1.setParent( parent ); - parent.getChildren().add( child1 ); - session.persist( child1 ); - session.persist( parent ); - session.getTransaction().commit(); - - // Rev 5 - session.getTransaction().begin(); - Child child2 = new Child(); - parent.getChildren().add( child2 ); - child2.setParent( parent ); - session.persist( child2 ); - session.persist( parent ); - session.getTransaction().commit(); - - parentId = parent.getId(); - - // Rev 6 - session.getTransaction().begin(); - House house = new House(); - house.getColors().add( "Red" ); - session.persist( house ); - session.getTransaction().commit(); - - // Rev 7 - session.getTransaction().begin(); - house.getColors().add( "Blue" ); - session.merge( house ); - session.getTransaction().commit(); - - houseId = house.getId(); - - session.close(); - } - - @Test - public void testPersonRevisionCount() { - assert getAuditReader().getRevisions( Person.class, personId ).equals( getExpectedPersonRevisions() ); - } - - @Test - @JiraKey(value = "HHH-10201") - public void testParentRevisionCount() { - assert getAuditReader().getRevisions( Parent.class, parentId ).equals( getExpectedParentRevisions() ); - } - - @Test - @JiraKey(value = "HHH-10201") - public void testHouseRevisionCount() { - assert getAuditReader().getRevisions( House.class, houseId ).equals( getExpectedHouseRevisions() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Child.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Child.java deleted file mode 100644 index b1d8c0b95340..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Child.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Child { - @Id - @GeneratedValue - private Integer id; - private String name; - @ManyToOne - private Parent parent; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java deleted file mode 100644 index 9043e2f205d8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.util.Arrays; -import java.util.List; - -public class CollectionChangeNoRevisionTest extends AbstractCollectionChangeTest { - protected String getCollectionChangeValue() { - return "false"; - } - - @Override - protected List getExpectedPersonRevisions() { - return Arrays.asList( 1 ); - } - - @Override - protected List getExpectedParentRevisions() { - return Arrays.asList( 4 ); - } - - @Override - protected List getExpectedHouseRevisions() { - return Arrays.asList( 6, 7 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java deleted file mode 100644 index 1872298c8152..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.util.Arrays; -import java.util.List; - -public class CollectionChangeRevisionTest extends AbstractCollectionChangeTest { - @Override - protected String getCollectionChangeValue() { - return "true"; - } - - @Override - protected List getExpectedPersonRevisions() { - return Arrays.asList( 1, 3 ); - } - - @Override - protected List getExpectedParentRevisions() { - return Arrays.asList( 4, 5 ); - } - - @Override - protected List getExpectedHouseRevisions() { - return Arrays.asList( 6, 7 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/House.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/House.java deleted file mode 100644 index c160c5b3298d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/House.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class House { - @Id - @GeneratedValue - private Integer id; - @ElementCollection - private List colors = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getColors() { - return colors; - } - - public void setColors(List colors) { - this.colors = colors; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Name.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Name.java deleted file mode 100644 index b8afb424ff86..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Name.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -@Audited -@Entity -public class Name implements Serializable { - @Id - @GeneratedValue - private Integer id; - - private String name; - @ManyToOne - @JoinColumn(name = "person_id", insertable = false, updatable = false) - private Person person; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Parent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Parent.java deleted file mode 100644 index 9a0b3811557c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Parent.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Parent { - @Id - @GeneratedValue - private Integer id; - private String name; - @OneToMany(mappedBy = "parent") - private List children = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Person.java deleted file mode 100644 index 2a111c7d50f6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/Person.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.collection.norevision; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; - -@Audited -@Entity -public class Person implements Serializable { - @Id - @GeneratedValue - private Integer id; - @AuditMappedBy(mappedBy = "person") - @OneToMany(cascade = CascadeType.ALL) - @JoinColumn(name = "person_id") - private Set names; - - public Person() { - names = new HashSet(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getNames() { - return names; - } - - public void setNames(Set names) { - this.names = names; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java deleted file mode 100644 index 3cb3109b9b73..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.Component2; -import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Components extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - private Integer id4; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a", "b" ), new Component2( "x", "y" ) ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "a2", "b2" ), new Component2( - "x2", - "y2" - ) - ); - ComponentTestEntity cte3 = new ComponentTestEntity( - new Component1( "a3", "b3" ), new Component2( - "x3", - "y3" - ) - ); - ComponentTestEntity cte4 = new ComponentTestEntity( null, null ); - - em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte3 ); - em.persist( cte4 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp1( new Component1( "a'", "b'" ) ); - cte2.getComp1().setStr1( "a2'" ); - cte3.getComp2().setStr6( "y3'" ); - cte4.setComp1( new Component1() ); - cte4.getComp1().setStr1( "n" ); - cte4.setComp2( new Component2() ); - cte4.getComp2().setStr5( "m" ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp2( new Component2( "x'", "y'" ) ); - cte3.getComp1().setStr2( "b3'" ); - cte4.setComp1( null ); - cte4.setComp2( null ); - - em.getTransaction().commit(); - - // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - - em.remove( cte2 ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - id2 = cte2.getId(); - id3 = cte3.getId(); - id4 = cte4.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id1 ) ); - - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id2 ) ); - - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id3 ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id4 ) ); - } - - @Test - public void testHistoryOfId1() { - ComponentTestEntity ver1 = new ComponentTestEntity( id1, new Component1( "a", "b" ), null ); - ComponentTestEntity ver2 = new ComponentTestEntity( id1, new Component1( "a'", "b'" ), null ); - - assert getAuditReader().find( ComponentTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 4 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId2() { - ComponentTestEntity ver1 = new ComponentTestEntity( id2, new Component1( "a2", "b2" ), null ); - ComponentTestEntity ver2 = new ComponentTestEntity( id2, new Component1( "a2'", "b2" ), null ); - - assert getAuditReader().find( ComponentTestEntity.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 3 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 4 ) == null; - } - - @Test - public void testHistoryOfId3() { - ComponentTestEntity ver1 = new ComponentTestEntity( id3, new Component1( "a3", "b3" ), null ); - ComponentTestEntity ver2 = new ComponentTestEntity( id3, new Component1( "a3", "b3'" ), null ); - - assert getAuditReader().find( ComponentTestEntity.class, id3, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 2 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 3 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 4 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId4() { - ComponentTestEntity ver1 = new ComponentTestEntity( id4, null, null ); - ComponentTestEntity ver2 = new ComponentTestEntity( id4, new Component1( "n", null ), null ); - ComponentTestEntity ver3 = new ComponentTestEntity( id4, null, null ); - - assert getAuditReader().find( ComponentTestEntity.class, id4, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 3 ).equals( ver3 ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 4 ).equals( ver3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java deleted file mode 100644 index 3316a25f44d5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java +++ /dev/null @@ -1,484 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.DefaultValueComponent1; -import org.hibernate.orm.test.envers.entities.components.DefaultValueComponent2; -import org.hibernate.orm.test.envers.entities.components.DefaultValueComponentTestEntity; - -import org.junit.Test; - -import org.jboss.logging.Logger; - -/** - * Test class for components with default values. - * - * @author Erik-Berndt Scheper - * @see - * Hibernate JIRA - */ -public class DefaultValueComponents extends BaseEnversJPAFunctionalTestCase { - private static final Logger log = Logger.getLogger( DefaultValueComponents.class ); - - private Integer id0; - private Integer id1; - private Integer id2; - private Integer id3; - private Integer id4; - private Integer id5; - private Integer id6; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DefaultValueComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - DefaultValueComponentTestEntity cte0 = DefaultValueComponentTestEntity - .of( null ); - - DefaultValueComponentTestEntity cte1 = DefaultValueComponentTestEntity - .of( DefaultValueComponent1.of( "c1-str1", null ) ); - - DefaultValueComponentTestEntity cte2 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - "c1-str1", DefaultValueComponent2 - .of( "c2-str1", "c2-str2" ) - ) - ); - - DefaultValueComponentTestEntity cte3 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - "c2-str1", "c2-str2" - ) - ) - ); - - DefaultValueComponentTestEntity cte4 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - null, "c2-str2" - ) - ) - ); - - DefaultValueComponentTestEntity cte5 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - "c2-str1", null - ) - ) - ); - - DefaultValueComponentTestEntity cte6 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - null, null - ) - ) - ); - - em.persist( cte0 ); - em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte3 ); - em.persist( cte4 ); - em.persist( cte5 ); - em.persist( cte6 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte0 = em.find( DefaultValueComponentTestEntity.class, cte0.getId() ); - cte1 = em.find( DefaultValueComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( DefaultValueComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( DefaultValueComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( DefaultValueComponentTestEntity.class, cte4.getId() ); - cte5 = em.find( DefaultValueComponentTestEntity.class, cte5.getId() ); - cte6 = em.find( DefaultValueComponentTestEntity.class, cte6.getId() ); - - cte0.setComp1( DefaultValueComponent1.of( "upd-c1-str1", null ) ); - cte1.setComp1( - DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "upd-c2-str2" ) - ) - ); - cte2.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte3.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte4.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte5.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte6.getComp1().getComp2().setStr1( "upd-c2-str1" ); - - em.getTransaction().commit(); - - // afterwards - id0 = cte0.getId(); - id1 = cte1.getId(); - id2 = cte2.getId(); - id3 = cte3.getId(); - id4 = cte4.getId(); - id5 = cte5.getId(); - id6 = cte6.getId(); - } - - @Test - public void testRevisionsCounts() { - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id0 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id1 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id2 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id3 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id4 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id5 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id6 - ).toString() - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id0 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id1 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id2 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id3 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id4 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id5 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id6 - ) - ); - } - - @Test - public void testHistoryOfId0() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id0, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id0, 2 - ); - - log.error( "------------ id0 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - checkCorrectlyPersisted( id0, null, null ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( id0, DefaultValueComponent1.of( null, null ) ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( id0, DefaultValueComponent1.of( "upd-c1-str1", null ) ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); - } - - @Test - public void testHistoryOfId1() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id1, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id1, 2 - ); - - log.error( "------------ id1 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - checkCorrectlyPersisted( id1, null, "upd-c2-str1" ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( id1, DefaultValueComponent1.of( "c1-str1", null ) ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id1, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "upd-c2-str2" ) - ) - ); - - assert ent2.equals( expectedVer2 ); - assert ent1.equals( expectedVer1 ); - } - - @Test - public void testHistoryOfId2() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id2, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id2, 2 - ); - - log.error( "------------ id2 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id2, DefaultValueComponent1.of( - "c1-str1", - DefaultValueComponent2.of( "c2-str1", "c2-str2" ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id2, DefaultValueComponent1.of( - "c1-str1", - DefaultValueComponent2.of( "upd-c2-str1", "c2-str2" ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); - } - - @Test - public void testHistoryOfId3() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id3, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id3, 2 - ); - - log.error( "------------ id3 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id3, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "c2-str1", "c2-str2" ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id3, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "c2-str2" ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); - } - - @Test - public void testHistoryOfId4() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id4, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id4, 2 - ); - - log.error( "------------ id4 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id4, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( null, "c2-str2" ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id4, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "c2-str2" ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); - } - - @Test - public void testHistoryOfId5() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id5, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id5, 2 - ); - - log.error( "------------ id5 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id5, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "c2-str1", null ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id5, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", null ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); - } - - @Test - public void testHistoryOfId6() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id6, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id6, 2 - ); - - log.error( "------------ id6 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( id6, DefaultValueComponent1.of( null, null ) ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id6, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", null ) - ) - ); - - assert ent2.equals( expectedVer2 ); - assert ent1.equals( expectedVer1 ); - } - - private void checkCorrectlyPersisted( - Integer expectedId, - String expectedComp2Str1Rev1, String expectedComp2Str1Rev2) { - // Verify that the entity was correctly persisted - EntityManager em = getEntityManager(); - Long entCount = (Long) em.createQuery( - "select count(s) from DefaultValueComponentTestEntity s where s.id = " - + expectedId.toString() - ).getSingleResult(); - Number auditCount = (Number) em.createNativeQuery( - "select count(id) from DefaultValueComponent_AUD s where s.id = " - + expectedId.toString() - ).getSingleResult(); - String comp2Str1Rev1 = (String) em - .createNativeQuery( - "select COMP2_STR1 from DefaultValueComponent_AUD s where REV=1 and s.id = " - + expectedId.toString() - ).getSingleResult(); - String comp2Str1Rev2 = (String) em - .createNativeQuery( - "select COMP2_STR1 from DefaultValueComponent_AUD s where REV=2 and s.id = " - + expectedId.toString() - ).getSingleResult(); - assert Long.valueOf( 1L ).equals( entCount ); - assert Integer.valueOf( 2 ).equals( auditCount.intValue() ); - - if ( expectedComp2Str1Rev1 == null ) { - assert comp2Str1Rev1 == null; - } - else { - assert expectedComp2Str1Rev1.equals( comp2Str1Rev1 ); - } - - if ( expectedComp2Str1Rev2 == null ) { - assert comp2Str1Rev2 == null; - } - else { - assert expectedComp2Str1Rev2.equals( comp2Str1Rev2 ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java deleted file mode 100644 index f0eb74aae12c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components; - -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.UniquePropsEntity; -import org.hibernate.orm.test.envers.entities.components.UniquePropsNotAuditedEntity; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.PersistentClass; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6636") -public class PropertiesGroupTest extends BaseEnversFunctionalTestCase { - private PersistentClass uniquePropsAudit = null; - private PersistentClass uniquePropsNotAuditedAudit = null; - private UniquePropsEntity entityRev1 = null; - private UniquePropsNotAuditedEntity entityNotAuditedRev2 = null; - - @Override - protected String[] getMappings() { - return new String[] { - "mappings/components/UniquePropsEntity.hbm.xml", - "mappings/components/UniquePropsNotAuditedEntity.hbm.xml" - }; - } - - @Test - @Priority(10) - public void initData() { - uniquePropsAudit = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.entities.components.UniquePropsEntity_AUD" - ); - uniquePropsNotAuditedAudit = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.entities.components.UniquePropsNotAuditedEntity_AUD" - ); - - // Revision 1 - Session session = openSession(); - session.getTransaction().begin(); - UniquePropsEntity ent = new UniquePropsEntity(); - ent.setData1( "data1" ); - ent.setData2( "data2" ); - session.persist( ent ); - session.getTransaction().commit(); - - entityRev1 = new UniquePropsEntity( ent.getId(), ent.getData1(), ent.getData2() ); - - // Revision 2 - session.getTransaction().begin(); - UniquePropsNotAuditedEntity entNotAud = new UniquePropsNotAuditedEntity(); - entNotAud.setData1( "data3" ); - entNotAud.setData2( "data4" ); - session.persist( entNotAud ); - session.getTransaction().commit(); - - entityNotAuditedRev2 = new UniquePropsNotAuditedEntity( entNotAud.getId(), entNotAud.getData1(), null ); - } - - @Test - public void testAuditTableColumns() { - Assert.assertNotNull( uniquePropsAudit.getTable().getColumn( new Column( "DATA1" ) ) ); - Assert.assertNotNull( uniquePropsAudit.getTable().getColumn( new Column( "DATA2" ) ) ); - - Assert.assertNotNull( uniquePropsNotAuditedAudit.getTable().getColumn( new Column( "DATA1" ) ) ); - Assert.assertNull( uniquePropsNotAuditedAudit.getTable().getColumn( new Column( "DATA2" ) ) ); - } - - @Test - public void testHistoryOfUniquePropsEntity() { - Assert.assertEquals( entityRev1, getAuditReader().find( UniquePropsEntity.class, entityRev1.getId(), 1 ) ); - } - - @Test - public void testHistoryOfUniquePropsNotAuditedEntity() { - Assert.assertEquals( - entityNotAuditedRev2, - getAuditReader().find( UniquePropsNotAuditedEntity.class, entityNotAuditedRev2.getId(), 2 ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java deleted file mode 100644 index a610dd89acb7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.collections; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.ComponentSetTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Felix Feisst - */ -public class CollectionOfComponents extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentSetTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentSetTestEntity cte1 = new ComponentSetTestEntity(); - - ComponentSetTestEntity cte2 = new ComponentSetTestEntity(); - cte2.getComps().add( new Component1( "string1", null ) ); - - em.persist( cte2 ); - em.persist( cte1 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentSetTestEntity.class, cte1.getId() ); - - cte1.getComps().add( new Component1( "a", "b" ) ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - id2 = cte2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ComponentSetTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - assertEquals( 0, getAuditReader().find( ComponentSetTestEntity.class, id1, 1 ).getComps().size() ); - - Set comps1 = getAuditReader().find( ComponentSetTestEntity.class, id1, 2 ).getComps(); - assertEquals( 1, comps1.size() ); - assertTrue( comps1.contains( new Component1( "a", "b" ) ) ); - } - - @Test - @JiraKey(value = "HHH-8968") - public void testCollectionOfEmbeddableWithNullValue() { - final Component1 componentV1 = new Component1( "string1", null ); - final ComponentSetTestEntity entityV1 = getAuditReader().find( ComponentSetTestEntity.class, id2, 1 ); - assertEquals( "Expected a component", Collections.singleton( componentV1 ), entityV1.getComps() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/AbstractCode.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/AbstractCode.java deleted file mode 100644 index 377ae5d5017d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/AbstractCode.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.collections.mappedsuperclasselement; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.MappedSuperclass; - -/** - * @author Jakob Braeuchi. - */ - -@MappedSuperclass -@Access(AccessType.PROPERTY) -public abstract class AbstractCode { - /** - * Initial Value - */ - protected static final int UNDEFINED = -1; - - private int code = UNDEFINED; - - protected AbstractCode() { - this( UNDEFINED ); - } - - /** - * Constructor with code - */ - public AbstractCode(int code) { - this.code = code; - } - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + code; - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - AbstractCode other = (AbstractCode) obj; - if ( code != other.code ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/Code.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/Code.java deleted file mode 100644 index 7ab40a6743c2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/Code.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.collections.mappedsuperclasselement; - -import jakarta.persistence.Embeddable; - -/** - * @author Jakob Braeuchi. - */ -@Embeddable -public class Code extends AbstractCode { - - public Code() { - } - - public Code(int code) { - super( code ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java deleted file mode 100644 index 2f0b2b6348ae..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.collections.mappedsuperclasselement; - -import java.util.Arrays; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.FailureExpected; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Gail Badner - */ -@JiraKey( value = "HHH-9193" ) -public class CollectionOfMappedSuperclassComponentsTest extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MappedSuperclassComponentSetTestEntity.class, Code.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - MappedSuperclassComponentSetTestEntity cte1 = new MappedSuperclassComponentSetTestEntity(); - - em.persist( cte1 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( MappedSuperclassComponentSetTestEntity.class, cte1.getId() ); - - cte1.getComps().add( new Code( 1 ) ); - cte1.getCompsNotAudited().add( new Code( 100 ) ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2 ), - getAuditReader().getRevisions( MappedSuperclassComponentSetTestEntity.class, id1 ) - ); - } - - @Test - @FailureExpected( jiraKey = "HHH-9193") - public void testHistoryOfId1() { - MappedSuperclassComponentSetTestEntity entity = getAuditReader().find( - MappedSuperclassComponentSetTestEntity.class, - id1, - 1 - ); - assertEquals( 0, entity.getComps().size() ); - assertEquals( 0, entity.getCompsNotAudited().size() ); - - entity = getAuditReader().find( MappedSuperclassComponentSetTestEntity.class, id1, 2 ); - - // TODO: what is the expectation here? The collection is audited, but the embeddable class - // has no data and it extends a mapped-superclass that is not audited. - // currently the collection has 1 element that has value AbstractCode.UNDEFINED - // (which seems wrong). I changed the expected size to 0 which currently fails; is that what - // should be expected? - Set comps1 = entity.getComps(); - assertEquals( 0, comps1.size() ); - - // The contents of entity.getCompsNotAudited() is unspecified, so no need to test. - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/MappedSuperclassComponentSetTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/MappedSuperclassComponentSetTestEntity.java deleted file mode 100644 index 1f5b9127e599..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/MappedSuperclassComponentSetTestEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.collections.mappedsuperclasselement; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table( name = "SupCompSetTestEntity") -@Audited -public class MappedSuperclassComponentSetTestEntity { - @Id - @GeneratedValue - private Integer id; - - @ElementCollection - @CollectionTable(name = "MCompTestEntityComps", joinColumns = @JoinColumn(name = "entity_id")) - private Set comps = new HashSet(); - - @NotAudited - @ElementCollection - @CollectionTable(name = "MCompTestEntityCompsNotAudited", joinColumns = @JoinColumn(name = "entity_id")) - private Set compsNotAudited = new HashSet(); - - public MappedSuperclassComponentSetTestEntity() { - } - - public MappedSuperclassComponentSetTestEntity(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getComps() { - return comps; - } - - public void setComps(Set comps) { - this.comps = comps; - } - - public Set getCompsNotAudited() { - return compsNotAudited; - } - - public void setCompsNotAudited(Set comps) { - this.compsNotAudited = compsNotAudited; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MappedSuperclassComponentSetTestEntity ) ) { - return false; - } - - MappedSuperclassComponentSetTestEntity that = (MappedSuperclassComponentSetTestEntity) o; - - if ( comps != null ? !comps.equals( that.comps ) : that.comps != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (comps != null ? comps.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ComponentSetTestEntity{" + - "id=" + id + - ", comps=" + comps + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AdvancedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AdvancedEntity.java deleted file mode 100644 index da518f62962e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AdvancedEntity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.envers.Audited; - -@Audited -public class AdvancedEntity { - - private Long id; - - private String note; - - private Map dynamicConfiguration = new HashMap(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - public Map getDynamicConfiguration() { - return dynamicConfiguration; - } - - public void setDynamicConfiguration(Map dynamicConfiguration) { - this.dynamicConfiguration = dynamicConfiguration; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof AdvancedEntity ) ) { - return false; - } - - AdvancedEntity that = (AdvancedEntity) o; - - if ( dynamicConfiguration != null ? !dynamicConfiguration.equals( that.dynamicConfiguration ) : that.dynamicConfiguration != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - result = 31 * result + ( dynamicConfiguration != null ? dynamicConfiguration.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "AdvancedEntity{" + - "id=" + id + - ", note='" + note + '\'' + - ", dynamicConfiguration=" + dynamicConfiguration + - '}'; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/Age.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/Age.java deleted file mode 100644 index 0ce3aab40be6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/Age.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -public class Age { - - private int ageInYears; - - public Age() { - } - - public Age(int ageInYears) { - this.ageInYears = ageInYears; - } - - public int getAgeInYears() { - return ageInYears; - } - - public void setAgeInYears(int ageInYears) { - this.ageInYears = ageInYears; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof Age ) ) { - return false; - } - - Age age = (Age) o; - - if ( ageInYears != age.ageInYears ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return ageInYears; - } - - @Override - public String toString() { - return "Age{" + - "ageInYears=" + ageInYears + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AgeType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AgeType.java deleted file mode 100644 index 842ea607d022..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AgeType.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.io.Serializable; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; - -import org.hibernate.HibernateException; -import org.hibernate.type.descriptor.WrapperOptions; -import org.hibernate.usertype.UserType; - -public class AgeType implements UserType { - - @Override - public int getSqlType() { - return Types.INTEGER; - } - - @Override - public Class returnedClass() { - return Age.class; - } - - @Override - public boolean equals(Age x, Age y) throws HibernateException { - return x != null ? x.equals( y ) : y == null; - } - - @Override - public int hashCode(Age x) throws HibernateException { - return x != null ? x.hashCode() : 1; - } - - @Override - public Age nullSafeGet(ResultSet rs, int position, WrapperOptions options) - throws SQLException { - return new Age( rs.getInt( position ) ); - } - - @Override - public void nullSafeSet(PreparedStatement st, Age value, int index, WrapperOptions options) - throws SQLException { - st.setInt( index, value.getAgeInYears() ); - } - - @Override - public Age deepCopy(Age value) throws HibernateException { - return new Age( value.getAgeInYears() ); - } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public Serializable disassemble(Age value) throws HibernateException { - return null; - } - - @Override - public Age assemble(Serializable cached, Object owner) throws HibernateException { - return null; - } - - @Override - public Age replace(Age original, Age target, Object owner) throws HibernateException { - return null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentEntity.java deleted file mode 100644 index d4947670dc2e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.envers.Audited; - -@Audited -public class AuditedDynamicComponentEntity implements Serializable { - private long id; - private String note; - private Map customFields = new HashMap(); - private SimpleEntity simpleEntity; - - public AuditedDynamicComponentEntity() { - } - - public AuditedDynamicComponentEntity(long id, String note) { - this.id = id; - this.note = note; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof AuditedDynamicComponentEntity ) ) { - return false; - } - - AuditedDynamicComponentEntity that = (AuditedDynamicComponentEntity) o; - - if ( id != that.id ) { - return false; - } - if ( customFields != null ? !customFields.equals( that.customFields ) : that.customFields != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) ( id ^ ( id >>> 32 ) ); - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - result = 31 * result + ( customFields != null ? customFields.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "AuditedDynamicMapComponent(id = " + id + ", note = " + note + ", customFields = " + customFields + ")"; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - public Map getCustomFields() { - return customFields; - } - - public void setCustomFields(Map customFields) { - this.customFields = customFields; - } - - - public SimpleEntity getSimpleEntity() { - return simpleEntity; - } - - public void setSimpleEntity(SimpleEntity simpleEntity) { - this.simpleEntity = simpleEntity; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java deleted file mode 100644 index f21168f5d0b1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.Arrays; -import java.util.List; - -import org.hibernate.MappingException; -import org.hibernate.Session; -import org.hibernate.cfg.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.internal.tools.StringTools; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.service.ServiceRegistry; - -import org.hibernate.testing.ServiceRegistryBuilder; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - * @author Lukasz Zuchowski (author at zuchos dot com) - */ -@JiraKey("HHH-8049") -public class AuditedDynamicComponentTest extends BaseEnversFunctionalTestCase { - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapAudited.hbm.xml" }; - } - - //@Test - public void testAuditedDynamicComponentFailure() throws URISyntaxException { - final Configuration config = new Configuration(); - final URL hbm = Thread.currentThread().getContextClassLoader().getResource( - "mappings/dynamicComponents/mapAudited.hbm.xml" - ); - config.addFile( new File( hbm.toURI() ) ); - - final String auditStrategy = getAuditStrategy(); - if ( !StringTools.isEmpty( auditStrategy ) ) { - config.setProperty( EnversSettings.AUDIT_STRATEGY, auditStrategy ); - } - - final ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() ); - try { - config.buildSessionFactory( serviceRegistry ).close(); - Assert.fail( "MappingException expected" ); - } - catch ( MappingException e ) { - Assert.assertEquals( - "Audited dynamic-component properties are not supported. Consider applying @NotAudited annotation to " - + AuditedDynamicComponentEntity.class.getName() + "#customFields.", - e.getMessage() - ); - } - finally { - ServiceRegistryBuilder.destroy( serviceRegistry ); - } - } - - @Test - @Priority(10) - public void initData() { - Session session = openSession(); - - SimpleEntity simpleEntity = new SimpleEntity( 1L, "Very simple entity" ); - - // Revision 1 - session.getTransaction().begin(); - session.persist( simpleEntity ); - session.getTransaction().commit(); - - // Revision 2 - session.getTransaction().begin(); - AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - entity.getCustomFields().put( "prop3", simpleEntity ); - entity.getCustomFields().put( "prop4", true ); - session.persist( entity ); - session.getTransaction().commit(); - - // revision 3 - session.getTransaction().begin(); - SimpleEntity simpleEntity2 = new SimpleEntity( 2L, "Not so simple entity" ); - session.persist( simpleEntity2 ); - entity = session.get( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().put( "prop3", simpleEntity2 ); - session.merge( entity ); - session.getTransaction().commit(); - - // Revision 4 - session.getTransaction().begin(); - entity = session.get( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().put( "prop1", 2 ); - entity.getCustomFields().put( "prop4", false ); - session.merge( entity ); - session.getTransaction().commit(); - - // Revision 5 - session.getTransaction().begin(); - entity = session.getReference( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().remove( "prop2" ); - session.merge( entity ); - session.getTransaction().commit(); - - // Revision 6 - session.getTransaction().begin(); - entity = session.getReference( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().clear(); - session.merge( entity ); - session.getTransaction().commit(); - - // Revision 7 - session.getTransaction().begin(); - entity = session.getReference( AuditedDynamicComponentEntity.class, entity.getId() ); - session.remove( entity ); - session.getTransaction().commit(); - - session.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 2, 3, 4, 5, 6, 7 ), - getAuditReader().getRevisions( AuditedDynamicComponentEntity.class, 1L ) - ); - } - - @Test - public void testHistoryOfId1() { - // Revision 2 - AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - entity.getCustomFields().put( "prop3", new SimpleEntity( 1L, "Very simple entity" ) ); - entity.getCustomFields().put( "prop4", true ); - AuditedDynamicComponentEntity ver2 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 2 - ); - Assert.assertEquals( entity, ver2 ); - - // Revision 3 - SimpleEntity simpleEntity2 = new SimpleEntity( 2L, "Not so simple entity" ); - entity.getCustomFields().put( "prop3", simpleEntity2 ); - AuditedDynamicComponentEntity ver3 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 3 - ); - Assert.assertEquals( entity, ver3 ); - - // Revision 4 - entity.getCustomFields().put( "prop1", 2 ); - entity.getCustomFields().put( "prop4", false ); - AuditedDynamicComponentEntity ver4 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 4 - ); - Assert.assertEquals( entity, ver4 ); - - // Revision 5 - entity.getCustomFields().put( "prop2", null ); - AuditedDynamicComponentEntity ver5 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 5 - ); - Assert.assertEquals( entity, ver5 ); - - // Revision 5 - entity.getCustomFields().put( "prop1", null ); - entity.getCustomFields().put( "prop2", null ); - entity.getCustomFields().put( "prop3", null ); - entity.getCustomFields().put( "prop4", null ); - AuditedDynamicComponentEntity ver6 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 6 - ); - Assert.assertEquals( entity, ver6 ); - } - - - @Test - public void testOfQueryOnDynamicComponent() { - //given (and result of initData() - AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - entity.getCustomFields().put( "prop3", new SimpleEntity( 1L, "Very simple entity" ) ); - entity.getCustomFields().put( "prop4", true ); - - //when - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 2 ) - .add( AuditEntity.property( "customFields_prop1" ).le( 20 ) ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - - //when - resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 2 ) - .add( AuditEntity.property( "customFields_prop3" ).eq( new SimpleEntity( 1L, "Very simple entity" ) ) ) - .getResultList(); - - - //then - entity = (AuditedDynamicComponentEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 4 ) - .getResultList().get( 0 ); - entity.getCustomFields().put( "prop2", null ); - - resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 5 ) - .add( AuditEntity.property( "customFields_prop2" ).isNull() ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/InternalComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/InternalComponent.java deleted file mode 100644 index 8e835b91f383..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/InternalComponent.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -public class InternalComponent { - - private String property; - - public InternalComponent() { - } - - public InternalComponent(String property) { - this.property = property; - } - - public String getProperty() { - return property; - } - - public void setProperty(String property) { - this.property = property; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof InternalComponent ) ) { - return false; - } - - InternalComponent that = (InternalComponent) o; - - if ( property != null ? !property.equals( that.property ) : that.property != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return property != null ? property.hashCode() : 0; - } - - @Override - public String toString() { - return "InternalComponent{" + - "property='" + property + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/ManyToManyEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/ManyToManyEntity.java deleted file mode 100644 index 845137970914..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/ManyToManyEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import org.hibernate.envers.Audited; - -@Audited -public class ManyToManyEntity { - - private Long id; - private String note; - - public ManyToManyEntity() { - } - - public ManyToManyEntity(Long id, String note) { - this.id = id; - this.note = note; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof ManyToManyEntity ) ) { - return false; - } - - ManyToManyEntity that = (ManyToManyEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "ManyToManyEntity{" + - "id=" + id + - ", note='" + note + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/ManyToOneEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/ManyToOneEntity.java deleted file mode 100644 index 1c4425e69be5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/ManyToOneEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import org.hibernate.envers.Audited; - -@Audited -public class ManyToOneEntity { - - private Long id; - private String note; - - public ManyToOneEntity() { - } - - public ManyToOneEntity(Long id, String note) { - this.id = id; - this.note = note; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof ManyToOneEntity ) ) { - return false; - } - - ManyToOneEntity that = (ManyToOneEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "ManyToOneEntity{" + - "id=" + id + - ", note='" + note + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java deleted file mode 100644 index 7328ec06bc69..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.util.Arrays; - -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey("HHH-8049") -public class NotAuditedDynamicComponentTest extends BaseEnversFunctionalTestCase { - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapNotAudited.hbm.xml" }; - } - - @Test - @Priority(10) - public void initData() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - NotAuditedDynamicMapComponent entity = new NotAuditedDynamicMapComponent( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - session.persist( entity ); - session.getTransaction().commit(); - - // No revision - session.getTransaction().begin(); - entity = session.get( NotAuditedDynamicMapComponent.class, entity.getId() ); - entity.getCustomFields().put( "prop1", 0 ); - session.merge( entity ); - session.getTransaction().commit(); - - // Revision 2 - session.getTransaction().begin(); - entity = session.get( NotAuditedDynamicMapComponent.class, entity.getId() ); - entity.setNote( "updated note" ); - session.merge( entity ); - session.getTransaction().commit(); - - // Revision 3 - session.getTransaction().begin(); - entity = session.getReference( NotAuditedDynamicMapComponent.class, entity.getId() ); - session.remove( entity ); - session.getTransaction().commit(); - - session.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3 ), - getAuditReader().getRevisions( NotAuditedDynamicMapComponent.class, 1L ) - ); - } - - @Test - public void testHistoryOfId1() { - // Revision 1 - NotAuditedDynamicMapComponent entity = new NotAuditedDynamicMapComponent( 1L, "static field value" ); - NotAuditedDynamicMapComponent ver1 = getAuditReader().find( - NotAuditedDynamicMapComponent.class, - entity.getId(), - 1 - ); - Assert.assertEquals( entity, ver1 ); - // Assume empty NotAuditedDynamicMapComponent#customFields map, because dynamic-component is not audited. - Assert.assertTrue( ver1.getCustomFields().isEmpty() ); - - // Revision 2 - entity.setNote( "updated note" ); - NotAuditedDynamicMapComponent ver2 = getAuditReader().find( - NotAuditedDynamicMapComponent.class, - entity.getId(), - 2 - ); - Assert.assertEquals( entity, ver2 ); - // Assume empty NotAuditedDynamicMapComponent#customFields map, because dynamic-component is not audited. - Assert.assertTrue( ver2.getCustomFields().isEmpty() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicMapComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicMapComponent.java deleted file mode 100644 index 28581c901291..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicMapComponent.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -public class NotAuditedDynamicMapComponent implements Serializable { - private long id; - private String note; - private Map customFields = new HashMap(); - - public NotAuditedDynamicMapComponent() { - } - - public NotAuditedDynamicMapComponent(long id, String note) { - this.id = id; - this.note = note; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof NotAuditedDynamicMapComponent ) ) { - return false; - } - - NotAuditedDynamicMapComponent that = (NotAuditedDynamicMapComponent) o; - - if ( id != that.id ) { - return false; - } - if ( customFields != null ? !customFields.equals( that.customFields ) : that.customFields != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) ( id ^ ( id >>> 32 ) ); - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - result = 31 * result + ( customFields != null ? customFields.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "NotAuditedDynamicMapComponent(id = " + id + ", note = " + note + ", customFields = " + customFields + ")"; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - @NotAudited // Dynamic components are not supported for audition. - public Map getCustomFields() { - return customFields; - } - - public void setCustomFields(Map customFields) { - this.customFields = customFields; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/OneToOneEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/OneToOneEntity.java deleted file mode 100644 index 85274d4095bf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/OneToOneEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import org.hibernate.envers.Audited; - -@Audited -public class OneToOneEntity { - - private Long id; - private String note; - - public OneToOneEntity() { - } - - public OneToOneEntity(Long id, String note) { - this.id = id; - this.note = note; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof OneToOneEntity ) ) { - return false; - } - - OneToOneEntity that = (OneToOneEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "OneToOneEntity{" + - "id=" + id + - ", note='" + note + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/PlainComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/PlainComponent.java deleted file mode 100644 index 40d03dc42279..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/PlainComponent.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.util.ArrayList; -import java.util.List; - -public class PlainComponent { - - private String componentNote; - private List manyToManyList = new ArrayList(); - private OneToOneEntity oneToOneEntity; - private ManyToOneEntity manyToOneEntity; - private InternalComponent internalComponent; - private List internalComponents; - - public String getComponentNote() { - return componentNote; - } - - public void setComponentNote(String componentNote) { - this.componentNote = componentNote; - } - - public List getManyToManyList() { - return manyToManyList; - } - - public void setManyToManyList(List manyToManyList) { - this.manyToManyList = manyToManyList; - } - - public OneToOneEntity getOneToOneEntity() { - return oneToOneEntity; - } - - public void setOneToOneEntity(OneToOneEntity oneToOneEntity) { - this.oneToOneEntity = oneToOneEntity; - } - - public ManyToOneEntity getManyToOneEntity() { - return manyToOneEntity; - } - - public void setManyToOneEntity(ManyToOneEntity manyToOneEntity) { - this.manyToOneEntity = manyToOneEntity; - } - - public InternalComponent getInternalComponent() { - return internalComponent; - } - - public void setInternalComponent(InternalComponent internalComponent) { - this.internalComponent = internalComponent; - } - - public List getInternalComponents() { - return internalComponents; - } - - public void setInternalComponents(List internalComponents) { - this.internalComponents = internalComponents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof PlainComponent ) ) { - return false; - } - - PlainComponent that = (PlainComponent) o; - - if ( componentNote != null ? !componentNote.equals( that.componentNote ) : that.componentNote != null ) { - return false; - } - if ( internalComponent != null ? !internalComponent.equals( that.internalComponent ) : that.internalComponent != null ) { - return false; - } - if ( internalComponents != null ? !internalComponents.equals( that.internalComponents ) : that.internalComponents != null ) { - return false; - } - if ( manyToManyList != null ? !manyToManyList.equals( that.manyToManyList ) : that.manyToManyList != null ) { - return false; - } - if ( manyToOneEntity != null ? !manyToOneEntity.equals( that.manyToOneEntity ) : that.manyToOneEntity != null ) { - return false; - } - if ( oneToOneEntity != null ? !oneToOneEntity.equals( that.oneToOneEntity ) : that.oneToOneEntity != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = componentNote != null ? componentNote.hashCode() : 0; - result = 31 * result + ( manyToManyList != null ? manyToManyList.hashCode() : 0 ); - result = 31 * result + ( oneToOneEntity != null ? oneToOneEntity.hashCode() : 0 ); - result = 31 * result + ( manyToOneEntity != null ? manyToOneEntity.hashCode() : 0 ); - result = 31 * result + ( internalComponent != null ? internalComponent.hashCode() : 0 ); - result = 31 * result + ( internalComponents != null ? internalComponents.hashCode() : 0 ); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/PlainEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/PlainEntity.java deleted file mode 100644 index 7fd531155db4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/PlainEntity.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import org.hibernate.envers.Audited; - -@Audited -public class PlainEntity { - - private Long id; - private String note; - private PlainComponent component; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - public PlainComponent getComponent() { - return component; - } - - public void setComponent(PlainComponent component) { - this.component = component; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof PlainEntity ) ) { - return false; - } - - PlainEntity that = (PlainEntity) o; - - if ( component != null ? !component.equals( that.component ) : that.component != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( note != null ? !note.equals( that.note ) : that.note != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( note != null ? note.hashCode() : 0 ); - result = 31 * result + ( component != null ? component.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "PlainEntity{" + - "id=" + id + - ", note='" + note + '\'' + - ", component=" + component + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java deleted file mode 100644 index d0f2149125f6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import java.util.ArrayList; -import java.util.List; - -import junit.framework.Assert; -import org.hibernate.Session; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -public class SanityCheckTest extends BaseEnversFunctionalTestCase { - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapSanityCheck.hbm.xml" }; - } - - @Test - @Priority(10) - public void shouldInit() { - Session session = getSession(); - session.getTransaction().begin(); - - ManyToOneEntity manyToOne = getManyToOneEntity(); - ManyToManyEntity manyToMany = getManyToManyEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - - PlainEntity plainEntity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - - session.persist( manyToMany ); - session.persist( manyToOne ); - session.persist( oneToOne ); - session.persist( plainEntity ); - - session.getTransaction().commit(); - session.getTransaction().begin(); - PlainEntity load = (PlainEntity) session.getReference( PlainEntity.class, 1L ); - - Assert.assertEquals( plainEntity, load ); - session.getTransaction().commit(); - - } - - private PlainEntity getPlainEntity(ManyToOneEntity manyToOne, ManyToManyEntity manyToMany, OneToOneEntity oneToOne) { - PlainComponent plainComponent = new PlainComponent(); - List manyToManyEntityList = new ArrayList(); - manyToManyEntityList.add( manyToMany ); - plainComponent.setManyToManyList( manyToManyEntityList ); - plainComponent.setComponentNote( "Note" ); - plainComponent.setOneToOneEntity( oneToOne ); - plainComponent.setManyToOneEntity( manyToOne ); - plainComponent.setInternalComponent( new InternalComponent( "Some val" ) ); - ArrayList internalComponents = new ArrayList(); - internalComponents.add( new InternalComponent( "test" ) ); - plainComponent.setInternalComponents( internalComponents ); - - PlainEntity plainEntity = new PlainEntity(); - plainEntity.setId( 1L ); - plainEntity.setNote( "Plain note" ); - plainEntity.setComponent( plainComponent ); - return plainEntity; - } - - private ManyToOneEntity getManyToOneEntity() { - return new ManyToOneEntity( 1L, "ManyToOne" ); - } - - private OneToOneEntity getOneToOneEntity() { - return new OneToOneEntity( 1L, "OneToOne" ); - } - - private ManyToManyEntity getManyToManyEntity() { - return new ManyToManyEntity( 1L, "ManyToMany" ); - } - - @Test - public void shouldFindRevisionBySimpleProperty() { - ManyToOneEntity manyToOne = getManyToOneEntity(); - ManyToManyEntity manyToMany = getManyToManyEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - - PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - - - //given (and result of shouldInitData() - - //when - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.property( "component_componentNote" ).eq( "Note" ) ) - .getResultList(); - - Assert.assertEquals( entity, resultList.get( 0 ) ); - } - - @Test - public void shouldFindByInternalComponentProperty() { - ManyToOneEntity manyToOne = getManyToOneEntity(); - ManyToManyEntity manyToMany = getManyToManyEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - - PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - - - //given (and result of shouldInitData() - - //when - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( - AuditEntity.property( "component_internalComponent_property" ) - .eq( entity.getComponent().getInternalComponent().getProperty() ) - ) - .getResultList(); - - Assert.assertEquals( entity, resultList.get( 0 ) ); - } - - @Test - public void shouldFailWhenQueryOnManyToMany() { - ManyToManyEntity manyToMany = getManyToManyEntity(); - - //when - - List manyToManyEntities = new ArrayList(); - manyToManyEntities.add( manyToMany ); - try { - getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.property( "component_manyToManyList" ).eq( manyToManyEntities ) ) - .getResultList(); - //then - fail( "This should have generated an AuditException" ); - } - catch ( Exception e ) { - assertTyping( AuditException.class, e ); - assertEquals( - "This type of relation (org.hibernate.orm.test.envers.integration.components.dynamic.PlainEntity." + - "component_manyToManyList) can't be used in audit query restrictions.", - e.getMessage() - ); - } - } - - @Test - public void shouldFailWhenQueryOnManyToOne() { - //when - PlainEntity plainEntity = (PlainEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.relatedId( "component_manyToOneEntity" ).eq( getManyToOneEntity().getId() ) ) - .getResultList().get( 0 ); - - //then - Assert.assertEquals( getManyToOneEntity(), plainEntity.getComponent().getManyToOneEntity() ); - } - - @Test - public void shouldFailWhenQueryOnOneToOne() { - //when - try { - getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.relatedId( "component_oneToOneEntity" ).eq( getOneToOneEntity().getId() ) ) - .getResultList(); - - //then - fail( "This should have generated an IllegalArgumentException" ); - } - catch ( Exception e ) { - assertTyping( IllegalArgumentException.class, e ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SimpleEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SimpleEntity.java deleted file mode 100644 index 3146edf6a3d7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SimpleEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.dynamic; - -import org.hibernate.envers.Audited; - -@Audited -public class SimpleEntity { - - private Long id; - private String simpleProperty; - - private AdvancedEntity parent; - - public SimpleEntity() { - } - - public SimpleEntity(Long id, String simpleProperty) { - this.id = id; - this.simpleProperty = simpleProperty; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getSimpleProperty() { - return simpleProperty; - } - - public void setSimpleProperty(String simpleProperty) { - this.simpleProperty = simpleProperty; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof SimpleEntity that ) ) { - return false; - } - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( simpleProperty != null ? !simpleProperty.equals( that.simpleProperty ) : that.simpleProperty != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( simpleProperty != null ? simpleProperty.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "SimpleEntity{" + - "id=" + id + - ", simpleProperty='" + simpleProperty + '\'' + - '}'; - } - - public AdvancedEntity getParent() { - return parent; - } - - public void setParent(AdvancedEntity parent) { - this.parent = parent; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AbstractAuditedEmbeddable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AbstractAuditedEmbeddable.java deleted file mode 100644 index 8b8314b11f23..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AbstractAuditedEmbeddable.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@MappedSuperclass -@Access(AccessType.FIELD) -@Audited -public abstract class AbstractAuditedEmbeddable { - - /** - * Initial Value - */ - protected static final int UNDEFINED = -1; - - private int code = UNDEFINED; - - - protected AbstractAuditedEmbeddable() { - this( UNDEFINED ); - } - - /** - * Constructor with code - */ - public AbstractAuditedEmbeddable(int code) { - this.code = code; - } - - public int getCode() { - return code; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + code; - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - AbstractAuditedEmbeddable other = (AbstractAuditedEmbeddable) obj; - if ( code != other.code ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AbstractEmbeddable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AbstractEmbeddable.java deleted file mode 100644 index 4b952fa93da5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AbstractEmbeddable.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.MappedSuperclass; - -/** - * @author Jakob Braeuchi. - */ - -@MappedSuperclass -@Access(AccessType.FIELD) -public abstract class AbstractEmbeddable { - - /** - * Initial Value - */ - protected static final int UNDEFINED = -1; - - private int code = UNDEFINED; - - - protected AbstractEmbeddable() { - this( UNDEFINED ); - } - - /** - * Constructor with code - */ - public AbstractEmbeddable(int code) { - this.code = code; - } - - public int getCode() { - return code; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + code; - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - AbstractEmbeddable other = (AbstractEmbeddable) obj; - if ( code != other.code ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredData.java deleted file mode 100644 index 68eedf54de8e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredData.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Embeddable; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Embeddable -@Audited -public class AuditedEmbeddableWithDeclaredData extends AbstractAuditedEmbeddable { - - private String codeArt; - - public AuditedEmbeddableWithDeclaredData(int code, String codeArt) { - super( code ); - this.codeArt = codeArt; - } - - // Needed for @Embeddable - protected AuditedEmbeddableWithDeclaredData() { - this( UNDEFINED, null ); - } - - public String getCodeart() { - return codeArt; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ( ( codeArt == null ) ? 0 : codeArt.hashCode() ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !super.equals( obj ) ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - AuditedEmbeddableWithDeclaredData other = (AuditedEmbeddableWithDeclaredData) obj; - if ( codeArt == null ) { - if ( other.codeArt != null ) { - return false; - } - } - else if ( !codeArt.equals( other.codeArt ) ) { - return false; - } - return true; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java deleted file mode 100644 index 0ee4c3e3e85d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import java.util.List; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Chris Cranford - */ -@JiraKey("HHH-17189") -public class AuditedEmbeddableWithDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { - - private long id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityWithAuditedEmbeddableWithDeclaredData.class, - AbstractAuditedEmbeddable.class, - AuditedEmbeddableWithDeclaredData.class - }; - } - - @Test - @Priority(10) - public void initData() { - this.id = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityWithAuditedEmbeddableWithDeclaredData entity = new EntityWithAuditedEmbeddableWithDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new AuditedEmbeddableWithDeclaredData( 42, "Data" ) ); - - entityManager.persist(entity); - return entity.getId(); - } ); - } - - @Test - public void testEmbeddableThatExtendsAuditedMappedSuperclass() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityWithAuditedEmbeddableWithDeclaredData entity = entityManager.find( - EntityWithAuditedEmbeddableWithDeclaredData.class, - id - ); - - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - - final List revisions = auditReader.getRevisions( EntityWithAuditedEmbeddableWithDeclaredData.class, id ); - assertThat( revisions ).hasSize( 1 ); - - final EntityWithAuditedEmbeddableWithDeclaredData entityRevision1 = auditReader.find( - EntityWithAuditedEmbeddableWithDeclaredData.class, - id, - revisions.get( 0 ) - ); - assertThat( entityRevision1.getName() ).isEqualTo( entity.getName() ); - - // All fields should be audited because the mapped superclass is annotated - assertThat( entity.getValue().getCodeart() ).isEqualTo( entityRevision1.getValue().getCodeart() ); - assertThat( entityRevision1.getValue().getCode() ).isEqualTo( 42 ); - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredData.java deleted file mode 100644 index 5585b55cae4a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredData.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Embeddable; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Embeddable -@Audited -public class AuditedEmbeddableWithNoDeclaredData extends AbstractAuditedEmbeddable { - - public AuditedEmbeddableWithNoDeclaredData(int code) { - super( code ); - } - - // Needed for @Embeddable - protected AuditedEmbeddableWithNoDeclaredData() { - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java deleted file mode 100644 index 149dec7bc550..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import java.util.List; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Chris Cranford - */ -@JiraKey("HHH-17189") -public class AuditedEmbeddableWithNoDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { - - private long id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityWithAuditedEmbeddableWithNoDeclaredData.class, - AbstractAuditedEmbeddable.class, - AuditedEmbeddableWithDeclaredData.class, - AuditedEmbeddableWithNoDeclaredData.class, - }; - } - - @Test - @Priority(10) - public void initData() { - this.id = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityWithAuditedEmbeddableWithNoDeclaredData entity = new EntityWithAuditedEmbeddableWithNoDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new AuditedEmbeddableWithNoDeclaredData( 42 ) ); - - entityManager.persist(entity); - return entity.getId(); - } ); - } - - @Test - public void testEmbeddableThatExtendsAuditedMappedSuperclass() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityWithAuditedEmbeddableWithNoDeclaredData entity = entityManager.find( - EntityWithAuditedEmbeddableWithNoDeclaredData.class, - id - ); - - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); - - final List revisions = auditReader.getRevisions( EntityWithAuditedEmbeddableWithNoDeclaredData.class, id ); - assertThat( revisions ).hasSize( 1 ); - - final EntityWithAuditedEmbeddableWithNoDeclaredData entityRevision1 = auditReader.find( - EntityWithAuditedEmbeddableWithNoDeclaredData.class, - id, - revisions.get( 0 ) - ); - assertThat( entityRevision1.getName() ).isEqualTo( entity.getName() ); - - // All fields should be audited because the mapped superclass is annotated - assertThat( entityRevision1.getValue().getCode() ).isEqualTo( 42 ); - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredData.java deleted file mode 100644 index c3f7754d3a0a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredData.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -/** - * @author Jakob Braeuchi. - * @author Gail Badner - */ - -import jakarta.persistence.Embeddable; - -@Embeddable -public class EmbeddableWithDeclaredData extends AbstractEmbeddable { - - private String codeArt; - - public EmbeddableWithDeclaredData(int code, String codeArt) { - super( code ); - this.codeArt = codeArt; - } - - // Needed for @Embeddable - protected EmbeddableWithDeclaredData() { - this( UNDEFINED, null ); - } - - public String getCodeart() { - return codeArt; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ( ( codeArt == null ) ? 0 : codeArt.hashCode() ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !super.equals( obj ) ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - EmbeddableWithDeclaredData other = (EmbeddableWithDeclaredData) obj; - if ( codeArt == null ) { - if ( other.codeArt != null ) { - return false; - } - } - else if ( !codeArt.equals( other.codeArt ) ) { - return false; - } - return true; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java deleted file mode 100644 index 2e230df0d6d8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.FailureExpected; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Jakob Braeuchi. - * @author Gail Badner - */ -@JiraKey(value = "HHH-9193") -public class EmbeddableWithDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { - private long id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityWithEmbeddableWithDeclaredData.class, AbstractEmbeddable.class, EmbeddableWithDeclaredData.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EntityWithEmbeddableWithDeclaredData entity = new EntityWithEmbeddableWithDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new EmbeddableWithDeclaredData( 42, "TestCodeart" ) ); - - EntityTransaction tx = em.getTransaction(); - tx.begin(); - em.persist( entity ); - tx.commit(); - em.close(); - - id = entity.getId(); - } - - @Test - @FailureExpected( jiraKey = "HHH-9193" ) - public void testEmbeddableThatExtendsMappedSuperclass() { - - // Reload and Compare Revision - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - EntityWithEmbeddableWithDeclaredData entityLoaded = em.find( EntityWithEmbeddableWithDeclaredData.class, id ); - - AuditReader reader = AuditReaderFactory.get( em ); - - List revs = reader.getRevisions( EntityWithEmbeddableWithDeclaredData.class, id ); - Assert.assertEquals( 1, revs.size() ); - - EntityWithEmbeddableWithDeclaredData entityRev1 = reader.find( EntityWithEmbeddableWithDeclaredData.class, id, revs.get( 0 ) ); - em.getTransaction().commit(); - Assert.assertEquals( entityLoaded.getName(), entityRev1.getName() ); - - // only value.codeArt should be audited because it is the only audited field in EmbeddableWithDeclaredData; - // fields in AbstractEmbeddable should not be audited. - Assert.assertEquals( entityLoaded.getValue().getCodeart(), entityRev1.getValue().getCodeart() ); - Assert.assertEquals(0, entityRev1.getValue().getCode() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredData.java deleted file mode 100644 index 6afb2c9600a8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredData.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Embeddable; - -/** - * @author Jakob Braeuchi. - * @author Gail Badner - */ -@Embeddable -public class EmbeddableWithNoDeclaredData extends AbstractEmbeddable { - - public EmbeddableWithNoDeclaredData(int code) { - super( code ); - } - - // Needed for @Embeddable - protected EmbeddableWithNoDeclaredData() { - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java deleted file mode 100644 index 4281aae63bff..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Jakob Braeuchi. - * @author Gail Badner - */ -@JiraKey(value = "HHH-9193") -public class EmbeddableWithNoDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { - private long id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityWithEmbeddableWithNoDeclaredData.class, AbstractEmbeddable.class, EmbeddableWithNoDeclaredData.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EntityWithEmbeddableWithNoDeclaredData entity = new EntityWithEmbeddableWithNoDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new EmbeddableWithNoDeclaredData( 84 ) ); - - EntityTransaction tx = em.getTransaction(); - tx.begin(); - em.persist( entity ); - tx.commit(); - em.close(); - - id = entity.getId(); - } - - @Test - public void testEmbeddableThatExtendsMappedSuperclass() { - - // Reload and Compare Revision - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - EntityWithEmbeddableWithNoDeclaredData entityLoaded = em.find( EntityWithEmbeddableWithNoDeclaredData.class, id ); - - AuditReader reader = AuditReaderFactory.get( em ); - - List revs = reader.getRevisions( EntityWithEmbeddableWithNoDeclaredData.class, id ); - Assert.assertEquals( 1, revs.size() ); - - EntityWithEmbeddableWithNoDeclaredData entityRev1 = reader.find( EntityWithEmbeddableWithNoDeclaredData.class, id, revs.get( 0 ) ); - - em.getTransaction().commit(); - Assert.assertEquals( entityLoaded.getName(), entityRev1.getName() ); - - // value should be null because there is no data in EmbeddableWithNoDeclaredData - // and the fields in AbstractEmbeddable should not be audited. - Assert.assertNull( entityRev1.getValue() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithAuditedEmbeddableWithDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithAuditedEmbeddableWithDeclaredData.java deleted file mode 100644 index 2534f580321d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithAuditedEmbeddableWithDeclaredData.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name="EntEmbWAuditedDeclData") -@Access(AccessType.FIELD) -@Audited -public class EntityWithAuditedEmbeddableWithDeclaredData { - - @Id - @GeneratedValue - private long id; - - @Column(name = "NAME", length = 100) - private String name; - - @Embedded - private AuditedEmbeddableWithDeclaredData value; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AuditedEmbeddableWithDeclaredData getValue() { - return value; - } - - public void setValue(AuditedEmbeddableWithDeclaredData value) { - this.value = value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) ( id ^ ( id >>> 32 ) ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - EntityWithAuditedEmbeddableWithDeclaredData other = (EntityWithAuditedEmbeddableWithDeclaredData) obj; - if ( id != other.id ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithAuditedEmbeddableWithNoDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithAuditedEmbeddableWithNoDeclaredData.java deleted file mode 100644 index 751d0f660fe9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithAuditedEmbeddableWithNoDeclaredData.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name="EntEmbWAuditedNoDeclData") -@Access(AccessType.FIELD) -@Audited -public class EntityWithAuditedEmbeddableWithNoDeclaredData { - - @Id - @GeneratedValue - private long id; - - @Column(name = "NAME", length = 100) - private String name; - - @Embedded - private AuditedEmbeddableWithNoDeclaredData value; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AuditedEmbeddableWithNoDeclaredData getValue() { - return value; - } - - public void setValue(AuditedEmbeddableWithNoDeclaredData value) { - this.value = value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) ( id ^ ( id >>> 32 ) ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - EntityWithAuditedEmbeddableWithNoDeclaredData other = (EntityWithAuditedEmbeddableWithNoDeclaredData) obj; - if ( id != other.id ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithEmbeddableWithDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithEmbeddableWithDeclaredData.java deleted file mode 100644 index 362a688fefee..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithEmbeddableWithDeclaredData.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Jakob Braeuchi. - */ -@Entity -@Table(name="EntEmbWDeclData") -@Access(AccessType.FIELD) -@Audited -public class EntityWithEmbeddableWithDeclaredData { - - @Id - @GeneratedValue - private long id; - - @Column(name = "NAME", length = 100) - private String name; - - @Embedded - private EmbeddableWithDeclaredData value; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public EmbeddableWithDeclaredData getValue() { - return value; - } - - public void setValue(EmbeddableWithDeclaredData value) { - this.value = value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) ( id ^ ( id >>> 32 ) ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - EntityWithEmbeddableWithDeclaredData other = (EntityWithEmbeddableWithDeclaredData) obj; - if ( id != other.id ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithEmbeddableWithNoDeclaredData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithEmbeddableWithNoDeclaredData.java deleted file mode 100644 index b7d2ef030ef8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EntityWithEmbeddableWithNoDeclaredData.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; - - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Jakob Braeuchi. - */ -@Entity -@Table(name="EntEmbWNoDeclData") -@Access(AccessType.FIELD) -@Audited -public class EntityWithEmbeddableWithNoDeclaredData { - - @Id - @GeneratedValue - private long id; - - @Column(name = "NAME", length = 100) - private String name; - - @Embedded - private EmbeddableWithNoDeclaredData value; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public EmbeddableWithNoDeclaredData getValue() { - return value; - } - - public void setValue(EmbeddableWithNoDeclaredData value) { - this.value = value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (int) ( id ^ ( id >>> 32 ) ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - EntityWithEmbeddableWithNoDeclaredData other = (EntityWithEmbeddableWithNoDeclaredData) obj; - if ( id != other.id ) { - return false; - } - return true; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java deleted file mode 100644 index 30f225f29d80..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.relations; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponent; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponentTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ManyToOneInComponent extends BaseEnversJPAFunctionalTestCase { - private Integer mtocte_id1; - private Integer ste_id1; - private Integer ste_id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneComponentTestEntity.class, StrTestEntity.class}; - - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); - - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ManyToOneComponentTestEntity mtocte1 = new ManyToOneComponentTestEntity( - new ManyToOneComponent( - ste1, - "data1" - ) - ); - - em.persist( mtocte1 ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( ManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setEntity( ste2 ); - - em.getTransaction().commit(); - - mtocte_id1 = mtocte1.getId(); - ste_id1 = ste1.getId(); - ste_id2 = ste2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 2, 3 ).equals( - getAuditReader().getRevisions( - ManyToOneComponentTestEntity.class, - mtocte_id1 - ) - ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ste1 = getEntityManager().find( StrTestEntity.class, ste_id1 ); - StrTestEntity ste2 = getEntityManager().find( StrTestEntity.class, ste_id2 ); - - ManyToOneComponentTestEntity ver2 = new ManyToOneComponentTestEntity( - mtocte_id1, new ManyToOneComponent( - ste1, - "data1" - ) - ); - ManyToOneComponentTestEntity ver3 = new ManyToOneComponentTestEntity( - mtocte_id1, new ManyToOneComponent( - ste2, - "data1" - ) - ); - - assert getAuditReader().find( ManyToOneComponentTestEntity.class, mtocte_id1, 1 ) == null; - assert getAuditReader().find( ManyToOneComponentTestEntity.class, mtocte_id1, 2 ).equals( ver2 ); - assert getAuditReader().find( ManyToOneComponentTestEntity.class, mtocte_id1, 3 ).equals( ver3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java deleted file mode 100644 index 2a291ec06549..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.relations; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.components.relations.NotAuditedManyToOneComponent; -import org.hibernate.orm.test.envers.entities.components.relations.NotAuditedManyToOneComponentTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotAuditedManyToOneInComponent extends BaseEnversJPAFunctionalTestCase { - private Integer mtocte_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {NotAuditedManyToOneComponentTestEntity.class, UnversionedStrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // No revision - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - UnversionedStrTestEntity ste1 = new UnversionedStrTestEntity(); - ste1.setStr( "str1" ); - - UnversionedStrTestEntity ste2 = new UnversionedStrTestEntity(); - ste2.setStr( "str2" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); - - // Revision 1 - em = getEntityManager(); - em.getTransaction().begin(); - - NotAuditedManyToOneComponentTestEntity mtocte1 = new NotAuditedManyToOneComponentTestEntity( - new NotAuditedManyToOneComponent( ste1, "data1" ) - ); - - em.persist( mtocte1 ); - - em.getTransaction().commit(); - - // No revision - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( NotAuditedManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setEntity( ste2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( NotAuditedManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setData( "data2" ); - - em.getTransaction().commit(); - - mtocte_id1 = mtocte1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ) - .equals( getAuditReader().getRevisions( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1 ) ); - } - - @Test - public void testHistoryOfId1() { - NotAuditedManyToOneComponentTestEntity ver1 = new NotAuditedManyToOneComponentTestEntity( - mtocte_id1, - new NotAuditedManyToOneComponent( null, "data1" ) - ); - NotAuditedManyToOneComponentTestEntity ver2 = new NotAuditedManyToOneComponentTestEntity( - mtocte_id1, - new NotAuditedManyToOneComponent( null, "data2" ) - ); - - assert getAuditReader().find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java deleted file mode 100644 index c3853c9fb8a4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.components.relations; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponent; -import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponentTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class OneToManyInComponent extends BaseEnversJPAFunctionalTestCase { - private Integer otmcte_id1; - private Integer ste_id1; - private Integer ste_id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {OneToManyComponentTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); - - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - OneToManyComponentTestEntity otmcte1 = new OneToManyComponentTestEntity( new OneToManyComponent( "data1" ) ); - otmcte1.getComp1().getEntities().add( ste1 ); - - em.persist( otmcte1 ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - otmcte1 = em.find( OneToManyComponentTestEntity.class, otmcte1.getId() ); - otmcte1.getComp1().getEntities().add( ste2 ); - - em.getTransaction().commit(); - - otmcte_id1 = otmcte1.getId(); - ste_id1 = ste1.getId(); - ste_id2 = ste2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 2, 3 ).equals( - getAuditReader().getRevisions( - OneToManyComponentTestEntity.class, - otmcte_id1 - ) - ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ste1 = getEntityManager().find( StrTestEntity.class, ste_id1 ); - StrTestEntity ste2 = getEntityManager().find( StrTestEntity.class, ste_id2 ); - - OneToManyComponentTestEntity ver2 = new OneToManyComponentTestEntity( - otmcte_id1, new OneToManyComponent( - "data1" - ) - ); - ver2.getComp1().getEntities().add( ste1 ); - OneToManyComponentTestEntity ver3 = new OneToManyComponentTestEntity( - otmcte_id1, new OneToManyComponent( - "data1" - ) - ); - ver3.getComp1().getEntities().add( ste1 ); - ver3.getComp1().getEntities().add( ste2 ); - - assert getAuditReader().find( OneToManyComponentTestEntity.class, otmcte_id1, 1 ) == null; - assert getAuditReader().find( OneToManyComponentTestEntity.class, otmcte_id1, 2 ).equals( ver2 ); - assert getAuditReader().find( OneToManyComponentTestEntity.class, otmcte_id1, 3 ).equals( ver3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java deleted file mode 100644 index 7e03e9602148..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.customtype; - -import java.util.Map; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.customtype.EnumTypeEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -import jakarta.persistence.EntityManager; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7780") -public class EnumTypeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EnumTypeEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.PREFER_NATIVE_ENUM_TYPES, "false" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - EnumTypeEntity entity = new EnumTypeEntity( EnumTypeEntity.E1.X, EnumTypeEntity.E2.A ); - em.persist( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testEnumRepresentation() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - - final String qry = "SELECT enum1, enum2 FROM EnumTypeEntity_AUD ORDER BY REV ASC"; - Object[] results = (Object[]) entityManager.createNativeQuery( qry, "e1_e2" ).getSingleResult(); - entityManager.getTransaction().commit(); - entityManager.close(); - - Assert.assertNotNull( results ); - Assert.assertEquals( 2, results.length ); - Assert.assertEquals( "X", results[0] ); - // Compare the Strings to account for, as an example, Oracle - // returning a BigDecimal instead of an int. - Assert.assertEquals( "0", results[1] + "" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java deleted file mode 100644 index 864978a818b5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.data; - -import java.util.Arrays; -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.test.integration.data.DateTestEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Dates extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { DateTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - DateTestEntity dte = new DateTestEntity( new Date( 12345000 ) ); - em.persist( dte ); - id1 = dte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - dte = em.find( DateTestEntity.class, id1 ); - dte.setDateValue( new Date( 45678000 ) ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( DateTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - DateTestEntity ver1 = new DateTestEntity( id1, new Date( 12345000 ) ); - DateTestEntity ver2 = new DateTestEntity( id1, new Date( 45678000 ) ); - - Assert.assertEquals( ver1, getAuditReader().find( DateTestEntity.class, id1, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( DateTestEntity.class, id1, 2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java deleted file mode 100644 index 9bada0bc5698..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.data; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.test.integration.data.EnumTestEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Enums extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EnumTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - EnumTestEntity ete = new EnumTestEntity( EnumTestEntity.E1.X, EnumTestEntity.E2.A ); - em.persist( ete ); - id1 = ete.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ete = em.find( EnumTestEntity.class, id1 ); - ete.setEnum1( EnumTestEntity.E1.Y ); - ete.setEnum2( EnumTestEntity.E2.B ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( EnumTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - EnumTestEntity ver1 = new EnumTestEntity( id1, EnumTestEntity.E1.X, EnumTestEntity.E2.A ); - EnumTestEntity ver2 = new EnumTestEntity( id1, EnumTestEntity.E1.Y, EnumTestEntity.E2.B ); - - assert getAuditReader().find( EnumTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( EnumTestEntity.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java deleted file mode 100644 index 6f7c60179342..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.data; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.envers.test.integration.data.LobSerializableTestEntity; -import org.hibernate.envers.test.integration.data.SerObject; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@RequiresDialectFeature(DialectChecks.SupportsExpectedLobUsagePattern.class) -public class LobSerializables extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { LobSerializableTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - if ( getDialect() instanceof PostgreSQLDialect ) { - // In PostgreSQL LOBs cannot be used in auto-commit mode. - options.put( "hibernate.connection.autocommit", "false" ); - } - } - - @Test - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - LobSerializableTestEntity ste = new LobSerializableTestEntity( new SerObject( "d1" ) ); - em.persist( ste ); - id1 = ste.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ste = em.find( LobSerializableTestEntity.class, id1 ); - ste.setObj( new SerObject( "d2" ) ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( LobSerializableTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - LobSerializableTestEntity ver1 = new LobSerializableTestEntity( id1, new SerObject( "d1" ) ); - LobSerializableTestEntity ver2 = new LobSerializableTestEntity( id1, new SerObject( "d2" ) ); - - assert getAuditReader().find( LobSerializableTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( LobSerializableTestEntity.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java deleted file mode 100644 index 7e25d6ede18b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.data; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.test.integration.data.SerObject; -import org.hibernate.envers.test.integration.data.SerializableTestEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Serializables extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SerializableTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - SerializableTestEntity ste = new SerializableTestEntity( new SerObject( "d1" ) ); - em.persist( ste ); - id1 = ste.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ste = em.find( SerializableTestEntity.class, id1 ); - ste.setObj( new SerObject( "d2" ) ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SerializableTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - SerializableTestEntity ver1 = new SerializableTestEntity( id1, new SerObject( "d1" ) ); - SerializableTestEntity ver2 = new SerializableTestEntity( id1, new SerObject( "d2" ) ); - - assert getAuditReader().find( SerializableTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( SerializableTestEntity.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java deleted file mode 100644 index 93b8fc747f1d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.dynamicmodel; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import jakarta.persistence.EntityManager; - -import static org.junit.Assert.assertNotNull; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@JiraKey(value = "HHH-8769") -public class DynamicModelTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicmodel/dynamicModel.hbm.xml" }; - } - - /** - * Tests that an EntityManager can be created when using a dynamic model mapping. - */ - @Test - public void testDynamicModelMapping() { - EntityManager entityManager = getOrCreateEntityManager(); - assertNotNull( "Expected an entity manager to be returned", entityManager ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/Person.java deleted file mode 100644 index 31d74f606edc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/Person.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.auditedEntity; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Person { - - private long id; - - private String name; - - private int age; - - public Person() { - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java deleted file mode 100644 index a9cedd240d24..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.auditedEntity; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.List; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hernán Chanfreau - */ -public class ReadEntityWhitEntityNameTest extends AbstractOneSessionTest { - - private long id_pers1; - private long id_pers2; - private long id_pers3; - - private Person person1_1; - private Person person1_2; - private Person person1_3; - - private Person currentPers1; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/auditedEntity/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 30 ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( "Personaje", pers1 ); - id_pers1 = pers1.getId(); - getSession().getTransaction().commit(); - - //REV 2 - getSession().getTransaction().begin(); - pers1 = (Person) getSession().get( "Personaje", id_pers1 ); - pers1.setAge( 29 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - id_pers2 = pers2.getId(); - getSession().getTransaction().commit(); - - //REV - getSession().getTransaction().begin(); - pers1 = (Person) getSession().get( "Personaje", id_pers1 ); - pers1.setName( "Hernan David" ); - pers2 = (Person) getSession().get( "Personaje", id_pers2 ); - pers2.setAge( 30 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - getSession().persist( "Personaje", pers3 ); - id_pers3 = pers3.getId(); - getSession().getTransaction().commit(); - - getSession().getTransaction().begin(); - currentPers1 = (Person) getSession().get( "Personaje", id_pers1 ); - getSession().getTransaction().commit(); - - } - - - @Test - public void testRetrieveRevisionsWithEntityName() { - List pers1Revs = getAuditReader().getRevisions( Person.class, "Personaje", id_pers1 ); - List pers2Revs = getAuditReader().getRevisions( Person.class, "Personaje", id_pers2 ); - List pers3Revs = getAuditReader().getRevisions( Person.class, "Personaje", id_pers3 ); - - assert (pers1Revs.size() == 3); - assert (pers2Revs.size() == 2); - assert (pers3Revs.size() == 1); - } - - @Test - public void testRetrieveAuditedEntityWithEntityName() { - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - person1_2 = getAuditReader().find( Person.class, "Personaje", id_pers1, 2 ); - person1_3 = getAuditReader().find( Person.class, "Personaje", id_pers1, 3 ); - - assert (person1_1 != null); - assert (person1_2 != null); - assert (person1_3 != null); - - } - - @Test - public void testObtainEntityNameAuditedEntityWithEntityName() { - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - person1_2 = getAuditReader().find( Person.class, "Personaje", id_pers1, 2 ); - person1_3 = getAuditReader().find( Person.class, "Personaje", id_pers1, 3 ); - - String currentPers1EN = getSession().getEntityName( currentPers1 ); - - String person1EN = getAuditReader().getEntityName( person1_1.getId(), 1, person1_1 ); - assert (currentPers1EN.equals( person1EN )); - - String person2EN = getAuditReader().getEntityName( person1_2.getId(), 2, person1_2 ); - assert (currentPers1EN.equals( person2EN )); - - String person3EN = getAuditReader().getEntityName( person1_3.getId(), 3, person1_3 ); - assert (currentPers1EN.equals( person3EN )); - - } - - @Test - public void testRetrieveAuditedEntityWithEntityNameWithNewSession() { - - // force a new session and AR - forceNewSession(); - - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - person1_2 = getAuditReader().find( Person.class, "Personaje", id_pers1, 2 ); - person1_3 = getAuditReader().find( Person.class, "Personaje", id_pers1, 3 ); - - assert (person1_1 != null); - assert (person1_2 != null); - assert (person1_3 != null); - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/Car.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/Car.java deleted file mode 100644 index 8605f17b0a98..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/Car.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited; - -import java.util.List; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Car { - - private long id; - - private int registrationNumber; - - private List owners; - - - public Car() { - } - - public Car(int registrationNumber, List owners) { - this.registrationNumber = registrationNumber; - this.owners = owners; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public List getOwners() { - return owners; - } - - public void setOwners(List owners) { - this.owners = owners; - } - - public int getRegistrationNumber() { - return registrationNumber; - } - - public void setRegistrationNumber(int registrationNumber) { - this.registrationNumber = registrationNumber; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/Person.java deleted file mode 100644 index d13d52e2c8a0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/Person.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited; - -import java.util.List; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Person { - - private long id; - - private String name; - - private int age; - - private List cars; - - public Person() { - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public List getCars() { - return cars; - } - - public void setCars(List cars) { - this.cars = cars; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java deleted file mode 100644 index e5858c68cf92..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hernán Chanfreau - */ -public class ReadEntityWithAuditedManyToManyTest extends AbstractOneSessionTest { - - private long id_car1; - private long id_car2; - - private long id_pers1; - - private Person person1; - private Car car1; - - private Person person1_1; - private Car car1_2; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/manyToManyAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 32 ); - Person pers4 = new Person( "Camomo", 15 ); - - //REV 1 - getSession().getTransaction().begin(); - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - owners.add( pers3 ); - Car car1 = new Car( 5, owners ); - - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers3 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - } - - private void loadDataOnSessionAndAuditReader() { - - car1_2 = getAuditReader().find( Car.class, id_car1, 2 ); - Car car2_2 = getAuditReader().find( Car.class, id_car2, 2 ); - - // navigate through relations to load objects - for ( Person owner : car1_2.getOwners() ) { - for ( Car ownedCar : owner.getCars() ) { - ownedCar.getRegistrationNumber(); - } - } - for ( Person owner : car2_2.getOwners() ) { - for ( Car ownedCar : owner.getCars() ) { - ownedCar.getRegistrationNumber(); - } - } - - car1 = (Car) getSession().get( Car.class, id_car1 ); - person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - } - - - private void checkEntityNames() { - String currPerson1EN = getSession().getEntityName( person1 ); - String currCar1EN = getSession().getEntityName( car1 ); - - String person1_1EN = getAuditReader().getEntityName( id_pers1, 1, person1_1 ); - assert (currPerson1EN.equals( person1_1EN )); - - String car1_2EN = getAuditReader().getEntityName( id_car1, 2, car1_2 ); - assert (currCar1EN.equals( car1_2EN )); - } - - @Test - public void testGetEntityNameManyYoManyWithEntityName() { - - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - } - - - @Test - public void testGetEntityNameManyYoManyWithEntityNameInNewSession() { - //force new session and AR - forceNewSession(); - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/Car.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/Car.java deleted file mode 100644 index 7398a59b773e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/Car.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.oneToManyAudited; - -import java.util.List; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Car { - - private long id; - - private int number; - - private List owners; - - - public Car() { - } - - public Car(int number, List owners) { - this.number = number; - this.owners = owners; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public List getOwners() { - return owners; - } - - public void setOwners(List owners) { - this.owners = owners; - } - - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/Person.java deleted file mode 100644 index c2cd1f55ca4b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/Person.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.oneToManyAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Person { - - private long id; - - private String name; - - private int age; - - public Person() { - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java deleted file mode 100644 index 6a28329a936b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.oneToManyAudited; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hernán Chanfreau - */ -public class ReadEntityWithAuditedCollectionTest extends AbstractOneSessionTest { - - private long id_car1; - private long id_car2; - - private Car currentCar1; - private Person currentPerson1; - - private long id_pers1; - - private Car car1_1; - private Person person1_1; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/oneToManyAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers4 = new Person( "Camomo", 15 ); - - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - Car car1 = new Car( 5, owners ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - - } - - private void loadDataOnSessionAndAuditReader() { - - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); - - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - car1_1 = getAuditReader().find( Car.class, id_car1, 2 ); - Car car2 = getAuditReader().find( Car.class, id_car2, 2 ); - - for ( Person owner : car1_1.getOwners() ) { - owner.getName(); - owner.getAge(); - } - for ( Person owner : car2.getOwners() ) { - owner.getName(); - owner.getAge(); - } - } - - private void checkEntityNames() { - String currCar1EN = getSession().getEntityName( currentCar1 ); - String currPerson1EN = getSession().getEntityName( currentPerson1 ); - - String car1_1EN = getAuditReader().getEntityName( id_car1, 2, car1_1 ); - assert (currCar1EN.equals( car1_1EN )); - - String person1_1EN = getAuditReader().getEntityName( id_pers1, 1, person1_1 ); - assert (currPerson1EN.equals( person1_1EN )); - } - - @Test - public void testObtainEntityNameAuditedCollectionWithEntityName() { - - this.loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - } - - - @Test - public void testObtainEntityNameAuditedCollectionWithEntityNameInNewSession() { - // force a new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/Car.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/Car.java deleted file mode 100644 index 510c3f30c86f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/Car.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.oneToManyNotAudited; - -import java.util.List; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Hernán Chanfreau - */ - -public class Car { - - private long id; - - private int number; - - private List owners; - - - public Car() { - } - - public Car(int number, List owners) { - this.number = number; - this.owners = owners; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - public List getOwners() { - return owners; - } - - public void setOwners(List owners) { - this.owners = owners; - } - - @Audited - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/Person.java deleted file mode 100644 index afc2584e340e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/Person.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.oneToManyNotAudited; - - -/** - * @author Hernán Chanfreau - */ - -public class Person { - - private long id; - - private String name; - - private int age; - - public Person() { - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java deleted file mode 100644 index 7d88c928f291..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.oneToManyNotAudited; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hernán Chanfreau - */ -public class ReadEntityWithAuditedCollectionTest extends AbstractOneSessionTest { - - private long id_car1; - private long id_car2; - - private Car currentCar1; - private Person currentPerson1; - - private long id_pers1; - - private Car car1_1; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/oneToManyNotAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers4 = new Person( "Camomo", 15 ); - - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - Car car1 = new Car( 5, owners ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - - } - - private void loadDataOnSessionAndAuditReader() { - - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); - - car1_1 = getAuditReader().find( Car.class, id_car1, 2 ); - Car car2 = getAuditReader().find( Car.class, id_car2, 2 ); - - for ( Person owner : car1_1.getOwners() ) { - owner.getName(); - owner.getAge(); - } - for ( Person owner : car2.getOwners() ) { - owner.getName(); - owner.getAge(); - } - } - - private void checkEntityNames() { - - String currCar1EN = getSession().getEntityName( currentCar1 ); - String currPerson1EN = getSession().getEntityName( currentPerson1 ); - - String car1_1EN = getAuditReader().getEntityName( id_car1, 2, car1_1 ); - assert (currCar1EN.equals( car1_1EN )); - - String person1_1EN = getSession().getEntityName( currentPerson1 ); - assert (currPerson1EN.equals( person1_1EN )); - } - - @Test - public void testObtainEntityNameCollectionWithEntityNameAndNotAuditedMode() { - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - - } - - @Test - public void testObtainEntityNameCollectionWithEntityNameAndNotAuditedModeInNewSession() { - // force new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/Car.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/Car.java deleted file mode 100644 index 1badce2efad6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/Car.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Car { - - private long id; - - private int number; - - private Person owner; - - private Person driver; - - public Car() { - } - - public Car(int number, Person owner, Person driver) { - this.number = number; - this.owner = owner; - this.driver = driver; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public Person getOwner() { - return owner; - } - - public void setOwner(Person owner) { - this.owner = owner; - } - - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - - public Person getDriver() { - return driver; - } - - public void setDriver(Person driver) { - this.driver = driver; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/Person.java deleted file mode 100644 index 07bccb4c2065..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/Person.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hernán Chanfreau - */ - -@Audited -public class Person { - - private long id; - - private String name; - - private int age; - - public Person() { - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java deleted file mode 100644 index e8f4f4b2b215..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedAudited; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hernán Chanfreau - */ -public class ReadEntityAssociatedAuditedTest extends AbstractOneSessionTest { - - private long id_car1; - private long id_car2; - - private Car currentCar1; - private Car car1; - - private long id_pers1; - private long id_pers2; - - private Person currentPerson1; - private Person person1; - - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 15 ); - Person pers2 = new Person( "Leandro", 19 ); - - Car car1 = new Car( 1, pers1, null ); - Car car2 = new Car( 2, pers2, null ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( "Personaje", pers1 ); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_car1 = car1.getId(); - id_pers1 = pers1.getId(); - - //REV 2 - getSession().getTransaction().begin(); - pers1.setAge( 50 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - id_pers2 = pers2.getId(); - - } - - private void loadDataOnSessionAndAuditReader() { - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); - car1 = getAuditReader().find( Car.class, id_car1, 1 ); - person1 = car1.getOwner(); - - } - - private void checkEntities() { - assert (currentPerson1.getAge() != person1.getAge()); - - Person person2 = (Person) getSession().get( "Personaje", id_pers2 ); - Car car2 = getAuditReader().find( Car.class, id_car2, 2 ); - Person person2_1 = car2.getOwner(); - assert (person2.getAge() == person2_1.getAge()); - } - - - private void checkEntityNames() { - String currentCar1EN = getSession().getEntityName( currentCar1 ); - - String currentPerson1EN = getSession().getEntityName( currentPerson1 ); - - String car1EN = getAuditReader().getEntityName( id_car1, 1, car1 ); - assert (currentCar1EN.equals( car1EN )); - - String person1EN = getAuditReader().getEntityName( id_pers1, 1, person1 ); - assert (currentPerson1EN.equals( person1EN )); - } - - @Test - public void testGetAssociationWithEntityName() { - loadDataOnSessionAndAuditReader(); - checkEntities(); - checkEntityNames(); - } - - - @Test - public void testGetAssociationWithEntityNameInNewSession() { - //force a new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntities(); - - checkEntityNames(); - - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java deleted file mode 100644 index 7bee4f748b49..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedAudited; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class SingleDomainObjectToMultipleTablesTest extends AbstractOneSessionTest { - private long carId = 0; - private long ownerId = 0; - private long driverId = 0; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - - @Test - @Priority(10) - public void initData() { - initializeSession(); - - //REV 1 - getSession().getTransaction().begin(); - Person owner = new Person( "Lukasz", 25 ); - Person driver = new Person( "Kinga", 24 ); - Car car = new Car( 1, owner, driver ); - getSession().persist( "Personaje", owner ); - getSession().persist( "Driveraje", driver ); - getSession().persist( car ); - getSession().getTransaction().commit(); - - carId = car.getId(); - ownerId = owner.getId(); - driverId = driver.getId(); - } - - @Test - @JiraKey(value = "HHH-4648") - public void testSingleDomainObjectToMultipleTablesMapping() { - Car carVer1 = getAuditReader().find( Car.class, carId, 1 ); - Person ownerVer1 = getAuditReader().find( Person.class, "Personaje", ownerId, 1 ); - Person driverVer1 = getAuditReader().find( Person.class, "Driveraje", driverId, 1 ); - - /* Check ids. */ - Assert.assertEquals( ownerVer1.getId(), carVer1.getOwner().getId() ); - Assert.assertEquals( driverVer1.getId(), carVer1.getDriver().getId() ); - - /* Check object properties. */ - Assert.assertEquals( "Lukasz", ownerVer1.getName() ); - Assert.assertEquals( "Kinga", driverVer1.getName() ); - Assert.assertEquals( 1, carVer1.getNumber() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/Car.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/Car.java deleted file mode 100644 index b6a889c7bf07..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/Car.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedNotAudited; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Hernán Chanfreau - */ - -public class Car { - - private long id; - - private int number; - - private Person owner; - - - public Car() { - } - - public Car(int number, Person owner) { - this.number = number; - this.owner = owner; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - public Person getOwner() { - return owner; - } - - public void setOwner(Person owner) { - this.owner = owner; - } - - @Audited - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/Person.java deleted file mode 100644 index 225e8da14c19..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/Person.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedNotAudited; - - -/** - * @author Hernán Chanfreau - */ - -public class Person { - - private long id; - - private String name; - - private int age; - - public Person() { - } - - public Person(String name, int age) { - this.name = name; - this.age = age; - } - - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java deleted file mode 100644 index fad2c8da0475..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedNotAudited; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hernán Chanfreau - */ -public class ReadEntityAssociatedNotAuditedTest extends AbstractOneSessionTest { - - private long id_car1; - private long id_car2; - - private long id_pers1; - private long id_pers2; - - private Car car1; - private Car car2; - private Person person1_1; - private Person person2; - private Person currentPerson1; - private Car currentCar1; - - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/singleAssociatedNotAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 15 ); - Person pers2 = new Person( "Leandro", 19 ); - - Car car1 = new Car( 1, pers1 ); - Car car2 = new Car( 2, pers2 ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( "Personaje", pers1 ); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_car1 = car1.getId(); - id_pers1 = pers1.getId(); - - //REV 2 - getSession().getTransaction().begin(); - pers1.setAge( 50 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - id_pers2 = pers2.getId(); - - } - - private void loadDataOnSessionAndAuditReader() { - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); - person2 = (Person) getSession().get( "Personaje", id_pers2 ); - - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - - car1 = getAuditReader().find( Car.class, id_car1, 1 ); - car2 = getAuditReader().find( Car.class, id_car2, 2 ); - - } - - private void checkEntityNames() { - - String currentCar1EN = getSession().getEntityName( currentCar1 ); - - String car1EN = getAuditReader().getEntityName( id_car1, 1, car1 ); - - assert (currentCar1EN.equals( car1EN )); - - } - - private void checkEntities() { - - person1_1 = car1.getOwner(); - Person person2_1 = car2.getOwner(); - - assert (currentPerson1.getAge() == person1_1.getAge()); - assert (person2.getAge() == person2_1.getAge()); - } - - @Test - public void testObtainEntityNameAssociationWithEntityNameAndNotAuditedMode() { - loadDataOnSessionAndAuditReader(); - - checkEntities(); - - checkEntityNames(); - } - - - @Test - public void testObtainEntityNameAssociationWithEntityNameAndNotAuditedModeInNewSession() { - //force a new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntities(); - - checkEntityNames(); - - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/AbstractFlushTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/AbstractFlushTest.java deleted file mode 100644 index 9758f12a38a1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/AbstractFlushTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.io.IOException; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Before; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractFlushTest extends BaseEnversJPAFunctionalTestCase { - public abstract FlushMode getFlushMode(); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private static Session getSession(EntityManager em) { - Object delegate = em.getDelegate(); - if ( delegate instanceof Session ) { - return (Session) delegate; - } - else if ( delegate instanceof EntityManager ) { - Object delegate2 = ((EntityManager) delegate).getDelegate(); - - if ( delegate2 instanceof Session ) { - return (Session) delegate2; - } - } - - throw new RuntimeException( "Invalid entity manager" ); - } - - @Before - public void initFlush() throws IOException { - Session session = getSession( getEntityManager() ); - session.setHibernateFlushMode( getFlushMode() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java deleted file mode 100644 index 72cfb3b85c86..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey( value = "HHH-8243" ) -public class CommitFlush extends AbstractFlushTest { - private Integer id = null; - - @Override - public FlushMode getFlushMode() { - return FlushMode.COMMIT; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "x" ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - em.getTransaction().begin(); - entity = em.find( StrTestEntity.class, entity.getId() ); - entity.setStr( "y" ); - entity = em.merge( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assertEquals( ver1, getAuditReader().find( StrTestEntity.class, id, 1 ) ); - assertEquals( ver2, getAuditReader().find( StrTestEntity.class, id, 2 ) ); - } - - @Test - public void testCurrent() { - assertEquals( new StrTestEntity( "y", id ), getEntityManager().find( StrTestEntity.class, id ) ); - } - - @Test - public void testRevisionTypes() { - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java deleted file mode 100644 index e5a9fe1e7756..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java +++ /dev/null @@ -1,248 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import static org.junit.Assert.assertEquals; - -import java.util.Arrays; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.FetchType; -import jakarta.persistence.FlushModeType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Version; - -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.JiraKeyGroup; -import org.junit.Test; - -/** - * @author Chris Cranford - */ -@JiraKeyGroup( value = { - @JiraKey(value = "HHH-12826"), - @JiraKey(value = "HHH-12846") -} ) -public class CommitFlushCollectionTest extends BaseEnversJPAFunctionalTestCase { - - @MappedSuperclass - public static abstract class AbstractEntity { - private Long id; - private Long version; - - @Id - @GeneratedValue - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - @Version - @Column(nullable = false) - public Long getVersion() { - return version; - } - - public void setVersion(Long version) { - this.version = version; - } - } - - @Audited - @MappedSuperclass - public static class BaseDocument extends AbstractEntity { - private String number; - private Date date; - - @Column(name = "numberValue", nullable = false) - public String getNumber() { - return number; - } - - public void setNumber(String number) { - this.number = number; - } - - @Column(name = "dateValue", nullable = false) - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - } - - @Audited - @Entity(name = "DocumentA") - public static class DocumentA extends BaseDocument { - private List lines = new LinkedList<>(); - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "document", cascade = CascadeType.ALL, orphanRemoval = true) - @AuditMappedBy(mappedBy = "document") - public List getLines() { - return lines; - } - - public void setLines(List lines) { - this.lines = lines; - } - - public DocumentA addLine(DocumentLineA line) { - if ( line != null ) { - line.setDocument( this ); - getLines().add( line ); - } - return this; - } - } - - @MappedSuperclass - public abstract static class BaseDocumentLine extends AbstractEntity { - private String text; - - @Column(name = "textValue", nullable = false) - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - } - - @Audited - @Entity(name = "DocumentLineA") - public static class DocumentLineA extends BaseDocumentLine { - private DocumentA document; - - @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumn(updatable = false, insertable = true, nullable = false) - public DocumentA getDocument() { - return document; - } - - public void setDocument(DocumentA document) { - this.document = document; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { DocumentA.class, DocumentLineA.class }; - } - - private Long persistDocument(FlushModeType flushModeType) { - final EntityManager entityManager = getOrCreateEntityManager(); - try { - entityManager.setFlushMode( flushModeType ); - - entityManager.getTransaction().begin(); - DocumentA doc = new DocumentA(); - doc.setNumber( "1" ); - doc.setDate( new Date() ); - - DocumentLineA line = new DocumentLineA(); - line.setText( "line1" ); - doc.addLine( line ); - - entityManager.persist( doc ); - entityManager.getTransaction().commit(); - - return doc.getId(); - } - catch ( Exception e ) { - if ( entityManager != null && entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - if ( entityManager != null && entityManager.isOpen() ) { - entityManager.close(); - } - } - } - - private void mergeDocument(FlushModeType flushModeType, Long id) { - final EntityManager entityManager = getOrCreateEntityManager(); - try { - entityManager.setFlushMode( flushModeType ); - - entityManager.getTransaction().begin(); - DocumentA doc = entityManager.find( DocumentA.class, id ); - doc.setDate( new Date() ); - for ( DocumentLineA line : doc.getLines() ) { - line.setText( "Updated" ); - } - - DocumentLineA line = new DocumentLineA(); - line.setText( "line2" ); - doc.addLine( line ); - - entityManager.merge( doc ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager != null && entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - if ( entityManager != null && entityManager.isOpen() ) { - entityManager.close(); - } - } - } - - private Long entityId1; - private Long entityId2; - - @Test - @Priority(10) - public void initData() { - // This failed when using Envers. - entityId1 = persistDocument( FlushModeType.COMMIT ); - - // This worked - entityId2 = persistDocument( FlushModeType.AUTO ); - - // This failed - mergeDocument( FlushModeType.COMMIT, entityId1 ); - - // This worked - mergeDocument( FlushModeType.AUTO, entityId2 ); - } - - @Test - public void testWithFlushModeCommit() { - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( DocumentA.class, entityId1 ) ); - } - - @Test - @Priority(1) - public void testWithFlushModeAuto() { - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( DocumentA.class, entityId2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java deleted file mode 100644 index 632161541302..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import static org.junit.Assert.assertEquals; - -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class CommitFlushSingleRevisionInTransaction extends AbstractFlushTest { - - @Override - public FlushMode getFlushMode() { - return FlushMode.COMMIT; - } - - @Test - @JiraKey(value = "HHH-11575") - public void testSingleRevisionInTransaction() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - - SequenceIdRevisionEntity revisionBeforeFlush = getAuditReader().getCurrentRevision( SequenceIdRevisionEntity.class, true ); - int revisionNumberBeforeFlush = revisionBeforeFlush.getId(); - - em.flush(); - - StrTestEntity entity = new StrTestEntity( "entity" ); - em.persist( entity ); - - em.getTransaction().commit(); - - SequenceIdRevisionEntity entity2Revision = (SequenceIdRevisionEntity) ( (Object[]) getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, false ).add( AuditEntity.id().eq( entity.getId() ) ).getSingleResult() )[1]; - - assertEquals( - "The revision number obtained before the flush and the persisting of the entity should be the same as the revision number of the entity because there should only be one revision number per transaction", - revisionNumberBeforeFlush, - entity2Revision.getId() ); - - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java deleted file mode 100644 index 526c43a9f598..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DoubleFlushAddDel extends AbstractFlushTest { - private Integer id; - - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - - em.flush(); - - em.remove( em.find( StrTestEntity.class, fe.getId() ) ); - - em.flush(); - - em.getTransaction().commit(); - - // - - id = fe.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList().equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - assert getAuditReader().find( StrTestEntity.class, id, 1 ) == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java deleted file mode 100644 index 2faec2ef0ee7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DoubleFlushAddMod extends AbstractFlushTest { - private Integer id; - - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - - em.flush(); - - fe.setStr( "y" ); - - em.flush(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - - fe.setStr( "z" ); - em.flush(); - - em.getTransaction().commit(); - - // - - id = fe.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "y", id ); - StrTestEntity ver2 = new StrTestEntity( "z", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } - - @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java deleted file mode 100644 index 4ae08d3a1d6c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DoubleFlushModDel extends AbstractFlushTest { - private Integer id; - - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - em.flush(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - - fe.setStr( "y" ); - em.flush(); - - em.remove( em.find( StrTestEntity.class, fe.getId() ) ); - em.flush(); - - em.getTransaction().commit(); - - // - - id = fe.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ) == null; - } - - @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.DEL ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java deleted file mode 100644 index 5a8ae0e37215..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DoubleFlushModMod extends AbstractFlushTest { - private Integer id; - - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - em.flush(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - - fe.setStr( "y" ); - em.flush(); - - fe.setStr( "z" ); - em.flush(); - - em.getTransaction().commit(); - - // - - id = fe.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "z", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } - - @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java deleted file mode 100644 index edeeb89a0360..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ManualFlush extends AbstractFlushTest { - private Integer id; - - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - em.flush(); - - em.getTransaction().commit(); - - // No revision - we change the data, but do not flush the session - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - fe.setStr( "y" ); - - em.getTransaction().commit(); - - // Revision 2 - only the first change should be saved - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - fe.setStr( "z" ); - em.flush(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - fe.setStr( "z2" ); - - em.getTransaction().commit(); - - // - - id = fe.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "z", id ); - - assertEquals( ver1, getAuditReader().find( StrTestEntity.class, id, 1 ) ); - assertEquals( ver2, getAuditReader().find( StrTestEntity.class, id, 2 ) ); - } - - @Test - public void testCurrent() { - assertEquals( new StrTestEntity( "z", id ), getEntityManager().find( StrTestEntity.class, id ) ); - } - - @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java deleted file mode 100644 index c447b0163b90..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.util.Map; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7017") -public class ManualFlushAutoCommitDisabled extends ManualFlush { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( "hibernate.connection.autocommit", "false" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java deleted file mode 100644 index 9cf7460093ad..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.generated; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-10841") -public class GeneratedColumnTest extends BaseEnversJPAFunctionalTestCase { - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SimpleEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getOrCreateEntityManager(); - try { - // Revision 1 - SimpleEntity se = new SimpleEntity(); - se.setData( "data" ); - entityManager.getTransaction().begin(); - entityManager.persist( se ); - entityManager.getTransaction().commit(); - entityManager.clear(); - entityId = se.getId(); - - // Revision 2 - entityManager.getTransaction().begin(); - se = entityManager.find( SimpleEntity.class, se.getId() ); - se.setData( "data2" ); - entityManager.merge( se ); - entityManager.getTransaction().commit(); - - // Revision 3 - entityManager.getTransaction().begin(); - se = entityManager.find( SimpleEntity.class, se.getId() ); - entityManager.remove( se ); - entityManager.getTransaction().commit(); - - } - finally { - entityManager.close(); - } - } - - @Test - public void getRevisionCounts() { - assertEquals( 3, getAuditReader().getRevisions( SimpleEntity.class, entityId ).size() ); - } - - @Test - public void testRevisionHistory() { - // revision - insertion - final SimpleEntity rev1 = getAuditReader().find( SimpleEntity.class, entityId, 1 ); - assertEquals( "data", rev1.getData() ); - assertEquals( 1, rev1.getCaseNumberInsert() ); - - // revision - update - final SimpleEntity rev2 = getAuditReader().find( SimpleEntity.class, entityId, 2 ); - assertEquals( "data2", rev2.getData() ); - assertEquals( 1, rev2.getCaseNumberInsert() ); - - // revision - deletion - final SimpleEntity rev3 = getAuditReader().find( SimpleEntity.class, entityId, 3 ); - assertEquals( "data2", rev2.getData() ); - assertEquals( 1, rev2.getCaseNumberInsert() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/SimpleEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/SimpleEntity.java deleted file mode 100644 index e3176bf93b90..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/SimpleEntity.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.generated; - -import org.hibernate.annotations.Generated; -import org.hibernate.envers.Audited; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class SimpleEntity { - @Id - @GeneratedValue - private Integer id; - - private String data; - - @Generated - @Column(columnDefinition = "integer default 1") - private int caseNumberInsert; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public int getCaseNumberInsert() { - return caseNumberInsert; - } - - public void setCaseNumberInsert(int caseNumberInsert) { - this.caseNumberInsert = caseNumberInsert; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java deleted file mode 100644 index 3cc50dd86732..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hashcode; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChangingHashcode extends BaseEnversJPAFunctionalTestCase { - private Long pageId; - private Long imageId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {WikiPage.class, WikiImage.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - WikiPage page = new WikiPage( "title", "content" ); - em.persist( page ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - WikiImage image = new WikiImage( "name1" ); - em.persist( image ); - - page = em.find( WikiPage.class, page.getId() ); - page.getImages().add( image ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - image = em.find( WikiImage.class, image.getId() ); - image.setName( "name2" ); - - em.getTransaction().commit(); - - pageId = page.getId(); - imageId = image.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( WikiPage.class, pageId ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( WikiImage.class, imageId ) ); - } - - @Test - public void testHistoryOfImage() { - assert getAuditReader().find( WikiImage.class, imageId, 1 ) == null; - assert getAuditReader().find( WikiImage.class, imageId, 2 ).equals( new WikiImage( "name1" ) ); - assert getAuditReader().find( WikiImage.class, imageId, 3 ).equals( new WikiImage( "name2" ) ); - } - - @Test - public void testHistoryOfPage() { - assert getAuditReader().find( WikiPage.class, pageId, 1 ).getImages().size() == 0; - assert getAuditReader().find( WikiPage.class, pageId, 2 ).getImages().equals( - TestTools.makeSet( - new WikiImage( - "name1" - ) - ) - ); - assert getAuditReader().find( WikiPage.class, pageId, 3 ).getImages().equals( - TestTools.makeSet( - new WikiImage( - "name2" - ) - ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java deleted file mode 100644 index 72f0dd773e1a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hashcode; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11063") -public class ComponentCollectionHashcodeChangeTest extends BaseEnversJPAFunctionalTestCase { - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { ComponentEntity.class, Component.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - Create entity with 2 components - entityManager.getTransaction().begin(); - Component component1 = new Component(); - component1.setName( "User1" ); - component1.setData( "Test1" ); - Component component2 = new Component(); - component2.setName( "User2" ); - component2.setData( "Test2" ); - ComponentEntity entity = new ComponentEntity(); - entity.getComponents().add( component1 ); - entity.getComponents().add( component2 ); - entityManager.persist( entity ); - entityManager.getTransaction().commit(); - id = entity.getId(); - - // Revision 2 - Change component name inline. - // This effectively changes equality and hash of elment. - entityManager.getTransaction().begin(); - component1.setName( "User1-Inline" ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - - // Revision 3 - Remove and add entity with same name. - entityManager.getTransaction().begin(); - entity.getComponents().remove( component2 ); - Component component3 = new Component(); - component3.setName( "User2" ); - component3.setData( "Test3" ); - entity.getComponents().add( component3 ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( ComponentEntity.class, id ) ); - } - - @Test - public void testCollectionHistory() { - final ComponentEntity rev1 = getAuditReader().find( ComponentEntity.class, id, 1 ); - assertEquals( 2, rev1.getComponents().size() ); - assertEquals( - TestTools.makeSet( - new Component( "User1", "Test1" ), - new Component( "User2", "Test2" ) - ), - rev1.getComponents() - ); - - final ComponentEntity rev2 = getAuditReader().find( ComponentEntity.class, id, 2 ); - assertEquals( 2, rev2.getComponents().size() ); - assertEquals( - TestTools.makeSet( - new Component( "User1-Inline", "Test1" ), - new Component( "User2", "Test2" ) - ), - rev2.getComponents() - ); - - final ComponentEntity rev3 = getAuditReader().find( ComponentEntity.class, id, 3 ); - assertEquals( 2, rev3.getComponents().size() ); - assertEquals( - TestTools.makeSet( - new Component( "User1-Inline", "Test1" ), - new Component( "User2", "Test3" ) - ), - rev3.getComponents() - ); - } - - @Entity(name = "ComponentEntity") - @Audited - public static class ComponentEntity { - @Id - @GeneratedValue - private Integer id; - @ElementCollection - private Set components = new HashSet(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getComponents() { - return components; - } - - public void setComponents(Set components) { - this.components = components; - } - } - - @Audited - @Embeddable - public static class Component { - private String name; - private String data; - - Component() { - - } - - Component(String name, String data) { - this.name = name; - this.data = data; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - @Override - public int hashCode() { - return ( name != null ? name.hashCode() : 0 ); - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( object == null || !( object instanceof Component ) ) { - return false; - } - Component that = (Component) object; - return !( name != null ? !name.equals( that.name ) : that.name != null ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java deleted file mode 100644 index e2121b7f7ce9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hashcode; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11063") -public class ListHashcodeChangeTest extends BaseEnversJPAFunctionalTestCase { - private Integer authorId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Author.class, Book.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); - final Author author = new Author(); - author.setFirstName( "TestFirstName" ); - author.setLastName( "lastName" ); - author.addBook( createBook1() ); - author.addBook( createBook2() ); - entityManager.persist( author ); - authorId = author.getId(); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - // Revision 2 - // Removes all books and re-adds original 2 plus one new book - entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); - final Author author = entityManager.find( Author.class, authorId ); - author.removeAllBooks(); - author.addBook( createBook1() ); - author.addBook( createBook2() ); - author.addBook( createBook3() ); - entityManager.merge( author ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - - } - - @Test - // tests that Author has 3 books. - public void testAuthorState() { - EntityManager entityManager = getEntityManager(); - try { - final Author author = entityManager.find( Author.class, authorId ); - assertNotNull( author ); - assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testAuthorLastRevision() { - // tests that Author has 3 books, Book1, Book2, and Book3. - // where Book1 and Book2 were removed and re-added with the addition of Book3. - EntityManager entityManager = getEntityManager(); - try { - final AuditReader reader = getAuditReader(); - final List revisions = reader.getRevisions( Author.class, authorId ); - final Number lastRevision = revisions.get( revisions.size() - 1 ); - - final Author author = (Author) reader.createQuery() - .forEntitiesAtRevision( Author.class, lastRevision ) - .getSingleResult(); - - assertNotNull( author ); - assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - private Book createBook1() { - Book book = new Book(); - book.setTitle( "Book1" ); - return book; - } - - private Book createBook2() { - Book book = new Book(); - book.setTitle( "Book2" ); - return book; - } - - private Book createBook3() { - Book book = new Book(); - book.setTitle( "Book3" ); - return book; - } - - @Entity(name = "Author") - @Audited - public static class Author { - @Id - @GeneratedValue - private Integer id; - - private String firstName; - - private String lastName; - - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "author") - private List books; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public List getBooks() { - return books; - } - - public void setBooks(List books) { - this.books = books; - } - - public void addBook(Book book) { - if ( this.books == null ) { - this.books = new ArrayList(); - } - book.setAuthor( this ); - this.books.add( book ); - } - - public void removeAllBooks() { - if ( this.books != null ) { - this.books.clear(); - } - } - - public Book getBook(String title) { - return books.stream().filter( b -> title.equals( b.getTitle() ) ).findFirst().orElse( null ); - } - - public void removeBook(String title) { - for( Iterator it = books.iterator(); it.hasNext(); ) { - Book book = it.next(); - if ( title.equals( title ) ) { - it.remove(); - } - } - } - - @Override - public String toString() { - return "Author{" + - "id=" + id + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - '}'; - } - } - - @Entity(name = "Book") - @Audited - public static class Book { - @Id - @GeneratedValue - private Integer id; - - private String title; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinTable(name = "author_book", - joinColumns = @JoinColumn(name = "book_id"), - inverseJoinColumns = @JoinColumn(name="author_id",nullable = false)) - @NotAudited - private Author author; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(Author author) { - this.author = author; - } - - @Override - public int hashCode() { - return Objects.hash( title ); - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || getClass() != object.getClass() ) { - return false; - } - Book book = (Book) object; - return Objects.equals( title, book.title ); - } - - @Override - public String toString() { - return "Book{" + - "id=" + id + - ", title='" + title + '\'' + - ", author=" + author + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java deleted file mode 100644 index 11a4f861382d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hashcode; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11063") -public class SetHashcodeChangeTest extends BaseEnversJPAFunctionalTestCase { - private Integer authorId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Author.class, Book.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); - final Author author = new Author(); - author.setFirstName( "TestFirstName" ); - author.setLastName( "lastName" ); - author.addBook( createBook1() ); - author.addBook( createBook2() ); - entityManager.persist( author ); - authorId = author.getId(); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - // Revision 2 - // Removes all books and re-adds original 2 plus one new book - entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); - final Author author = entityManager.find( Author.class, authorId ); - author.removeAllBooks(); - author.addBook( createBook1() ); - author.addBook( createBook2() ); - author.addBook( createBook3() ); - entityManager.merge( author ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - - } - - @Test - // tests that Author has 3 books. - public void testAuthorState() { - EntityManager entityManager = getEntityManager(); - try { - final Author author = entityManager.find( Author.class, authorId ); - assertNotNull( author ); - assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testAuthorLastRevision() { - // tests that Author has 3 books, Book1, Book2, and Book3. - // where Book1 and Book2 were removed and re-added with the addition of Book3. - EntityManager entityManager = getEntityManager(); - try { - final AuditReader reader = getAuditReader(); - final List revisions = reader.getRevisions( Author.class, authorId ); - final Number lastRevision = revisions.get( revisions.size() - 1 ); - - final Author author = (Author) reader.createQuery() - .forEntitiesAtRevision( Author.class, lastRevision ) - .getSingleResult(); - - assertNotNull( author ); - assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - private Book createBook1() { - Book book = new Book(); - book.setTitle( "Book1" ); - return book; - } - - private Book createBook2() { - Book book = new Book(); - book.setTitle( "Book2" ); - return book; - } - - private Book createBook3() { - Book book = new Book(); - book.setTitle( "Book3" ); - return book; - } - - @Entity(name = "Author") - @Audited - public static class Author { - @Id - @GeneratedValue - private Integer id; - - private String firstName; - - private String lastName; - - @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "author") - private Set books; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public Set getBooks() { - return books; - } - - public void setBooks(Set books) { - this.books = books; - } - - public void addBook(Book book) { - if ( this.books == null ) { - this.books = new HashSet(); - } - book.setAuthor( this ); - this.books.add( book ); - } - - public void removeAllBooks() { - if ( this.books != null ) { - this.books.clear(); - } - } - - public Book getBook(String title) { - return books.stream().filter( b -> title.equals( b.getTitle() ) ).findFirst().orElse( null ); - } - - public void removeBook(String title) { - for( Iterator it = books.iterator(); it.hasNext(); ) { - Book book = it.next(); - if ( title.equals( title ) ) { - it.remove(); - } - } - } - - @Override - public String toString() { - return "Author{" + - "id=" + id + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - '}'; - } - } - - @Entity(name = "Book") - @Audited - public static class Book { - @Id - @GeneratedValue - private Integer id; - - private String title; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinTable(name = "author_book", - joinColumns = @JoinColumn(name = "book_id"), inverseJoinColumns = @JoinColumn(name="author_id",nullable = false)) - @NotAudited - private Author author; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(Author author) { - this.author = author; - } - - @Override - public int hashCode() { - return Objects.hash( title ); - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || getClass() != object.getClass() ) { - return false; - } - Book book = (Book) object; - return Objects.equals( title, book.title ); - } - - @Override - public String toString() { - return "Book{" + - "id=" + id + - ", title='" + title + '\'' + - ", author=" + author + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/WikiImage.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/WikiImage.java deleted file mode 100644 index 34231909daac..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/WikiImage.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hashcode; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class WikiImage { - @Id - @GeneratedValue - private Long id; - - @Basic - private String name; - - public WikiImage() { - } - - public WikiImage(String name) { - this.name = name; - } - - public Long getId() { - return id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof WikiImage) ) { - return false; - } - - WikiImage wikiImage = (WikiImage) o; - - if ( name != null ? !name.equals( wikiImage.name ) : wikiImage.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return name != null ? name.hashCode() : 0; - } - - @Override - public String toString() { - return "WikiImage{" + - "name='" + name + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/WikiPage.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/WikiPage.java deleted file mode 100644 index e30bcbfc53ae..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/WikiPage.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hashcode; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Basic; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class WikiPage { - @Id - @GeneratedValue - private Long id; - - @Basic - private String title; - - @Basic - private String content; - - @ElementCollection - private Set links = new HashSet(); - - @OneToMany - private Set images = new HashSet(); - - public WikiPage() { - } - - public WikiPage(String title, String content) { - this.title = title; - this.content = content; - } - - public Long getId() { - return id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getContent() { - return content; - } - - public void setContent(String content) { - this.content = content; - } - - public Set getLinks() { - return links; - } - - public void setLinks(Set links) { - this.links = links; - } - - public Set getImages() { - return images; - } - - public void setImages(Set images) { - this.images = images; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof WikiPage) ) { - return false; - } - - WikiPage wikiPage = (WikiPage) o; - - if ( content != null ? !content.equals( wikiPage.content ) : wikiPage.content != null ) { - return false; - } - if ( title != null ? !title.equals( wikiPage.title ) : wikiPage.title != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = title != null ? title.hashCode() : 0; - result = 31 * result + (content != null ? content.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "WikiPage{" + - "title='" + title + '\'' + - ", content='" + content + '\'' + - ", links=" + links + - ", images=" + images + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hbm/allAudited/joined/JoinedAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hbm/allAudited/joined/JoinedAllAuditedTest.java deleted file mode 100644 index 90175579889f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hbm/allAudited/joined/JoinedAllAuditedTest.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hbm.allAudited.joined; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class JoinedAllAuditedTest extends AbstractAllAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/joinedAllAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java deleted file mode 100644 index b9a2a06bdb70..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids; - -import java.util.Arrays; -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.CompositeDateIdTestEntity; -import org.hibernate.orm.test.envers.entities.ids.DateEmbId; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class CompositeDateId extends BaseEnversJPAFunctionalTestCase { - private DateEmbId id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {CompositeDateIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - CompositeDateIdTestEntity dite = new CompositeDateIdTestEntity( new DateEmbId( new Date(), new Date() ), "x" ); - em.persist( dite ); - - id1 = dite.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - dite = em.find( CompositeDateIdTestEntity.class, id1 ); - dite.setStr1( "y" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( CompositeDateIdTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - CompositeDateIdTestEntity ver1 = new CompositeDateIdTestEntity( id1, "x" ); - CompositeDateIdTestEntity ver2 = new CompositeDateIdTestEntity( id1, "y" ); - - assert getAuditReader().find( CompositeDateIdTestEntity.class, id1, 1 ).getStr1().equals( "x" ); - assert getAuditReader().find( CompositeDateIdTestEntity.class, id1, 2 ).getStr1().equals( "y" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java deleted file mode 100644 index a084e3044e3f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.CustomEnum; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; -import org.hibernate.orm.test.envers.entities.ids.EmbIdWithCustomType; -import org.hibernate.orm.test.envers.entities.ids.EmbIdWithCustomTypeTestEntity; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class CompositeIds extends BaseEnversJPAFunctionalTestCase { - private EmbId id1; - private EmbId id2; - private MulId id3; - private MulId id4; - private EmbIdWithCustomType id5; - private EmbIdWithCustomType id6; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbIdTestEntity.class, MulIdTestEntity.class, EmbIdWithCustomTypeTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - id1 = new EmbId( 1, 2 ); - id2 = new EmbId( 10, 20 ); - id3 = new MulId( 100, 101 ); - id4 = new MulId( 102, 103 ); - id5 = new EmbIdWithCustomType( 25, CustomEnum.NO ); - id6 = new EmbIdWithCustomType( 27, CustomEnum.YES ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( new EmbIdTestEntity( id1, "x" ) ); - em.persist( new MulIdTestEntity( id3.getId1(), id3.getId2(), "a" ) ); - em.persist( new EmbIdWithCustomTypeTestEntity( id5, "c" ) ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( new EmbIdTestEntity( id2, "y" ) ); - em.persist( new MulIdTestEntity( id4.getId1(), id4.getId2(), "b" ) ); - em.persist( new EmbIdWithCustomTypeTestEntity( id6, "d" ) ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - EmbIdTestEntity ete1 = em.find( EmbIdTestEntity.class, id1 ); - EmbIdTestEntity ete2 = em.find( EmbIdTestEntity.class, id2 ); - MulIdTestEntity mte3 = em.find( MulIdTestEntity.class, id3 ); - MulIdTestEntity mte4 = em.find( MulIdTestEntity.class, id4 ); - EmbIdWithCustomTypeTestEntity cte5 = em.find( EmbIdWithCustomTypeTestEntity.class, id5 ); - EmbIdWithCustomTypeTestEntity cte6 = em.find( EmbIdWithCustomTypeTestEntity.class, id6 ); - - ete1.setStr1( "x2" ); - ete2.setStr1( "y2" ); - mte3.setStr1( "a2" ); - mte4.setStr1( "b2" ); - cte5.setStr1( "c2" ); - cte6.setStr1( "d2" ); - - em.getTransaction().commit(); - - // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); - - ete1 = em.find( EmbIdTestEntity.class, id1 ); - ete2 = em.find( EmbIdTestEntity.class, id2 ); - mte3 = em.find( MulIdTestEntity.class, id3 ); - cte5 = em.find( EmbIdWithCustomTypeTestEntity.class, id5 ); - cte6 = em.find( EmbIdWithCustomTypeTestEntity.class, id6 ); - - em.remove( ete1 ); - em.remove( mte3 ); - em.remove( cte6 ); - - ete2.setStr1( "y3" ); - cte5.setStr1( "c3" ); - - em.getTransaction().commit(); - - // Revision 5 - em = getEntityManager(); - em.getTransaction().begin(); - - ete2 = em.find( EmbIdTestEntity.class, id2 ); - - em.remove( ete2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 3, 4 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, id1 ) ); - - assert Arrays.asList( 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, id2 ) ); - - assert Arrays.asList( 1, 3, 4 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, id3 ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, id4 ) ); - - assert Arrays.asList( 1, 3, 4 ).equals( - getAuditReader().getRevisions( - EmbIdWithCustomTypeTestEntity.class, - id5 - ) - ); - - assert Arrays.asList( 2, 3, 4 ).equals( - getAuditReader().getRevisions( - EmbIdWithCustomTypeTestEntity.class, - id6 - ) - ); - } - - @Test - public void testHistoryOfId1() { - EmbIdTestEntity ver1 = new EmbIdTestEntity( id1, "x" ); - EmbIdTestEntity ver2 = new EmbIdTestEntity( id1, "x2" ); - - assert getAuditReader().find( EmbIdTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( EmbIdTestEntity.class, id1, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdTestEntity.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdTestEntity.class, id1, 4 ) == null; - assert getAuditReader().find( EmbIdTestEntity.class, id1, 5 ) == null; - } - - @Test - public void testHistoryOfId2() { - EmbIdTestEntity ver1 = new EmbIdTestEntity( id2, "y" ); - EmbIdTestEntity ver2 = new EmbIdTestEntity( id2, "y2" ); - EmbIdTestEntity ver3 = new EmbIdTestEntity( id2, "y3" ); - - assert getAuditReader().find( EmbIdTestEntity.class, id2, 1 ) == null; - assert getAuditReader().find( EmbIdTestEntity.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdTestEntity.class, id2, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdTestEntity.class, id2, 4 ).equals( ver3 ); - assert getAuditReader().find( EmbIdTestEntity.class, id2, 5 ) == null; - } - - @Test - public void testHistoryOfId3() { - MulIdTestEntity ver1 = new MulIdTestEntity( id3.getId1(), id3.getId2(), "a" ); - MulIdTestEntity ver2 = new MulIdTestEntity( id3.getId1(), id3.getId2(), "a2" ); - - assert getAuditReader().find( MulIdTestEntity.class, id3, 1 ).equals( ver1 ); - assert getAuditReader().find( MulIdTestEntity.class, id3, 2 ).equals( ver1 ); - assert getAuditReader().find( MulIdTestEntity.class, id3, 3 ).equals( ver2 ); - assert getAuditReader().find( MulIdTestEntity.class, id3, 4 ) == null; - assert getAuditReader().find( MulIdTestEntity.class, id3, 5 ) == null; - } - - @Test - public void testHistoryOfId4() { - MulIdTestEntity ver1 = new MulIdTestEntity( id4.getId1(), id4.getId2(), "b" ); - MulIdTestEntity ver2 = new MulIdTestEntity( id4.getId1(), id4.getId2(), "b2" ); - - assert getAuditReader().find( MulIdTestEntity.class, id4, 1 ) == null; - assert getAuditReader().find( MulIdTestEntity.class, id4, 2 ).equals( ver1 ); - assert getAuditReader().find( MulIdTestEntity.class, id4, 3 ).equals( ver2 ); - assert getAuditReader().find( MulIdTestEntity.class, id4, 4 ).equals( ver2 ); - assert getAuditReader().find( MulIdTestEntity.class, id4, 5 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId5() { - EmbIdWithCustomTypeTestEntity ver1 = new EmbIdWithCustomTypeTestEntity( id5, "c" ); - EmbIdWithCustomTypeTestEntity ver2 = new EmbIdWithCustomTypeTestEntity( id5, "c2" ); - EmbIdWithCustomTypeTestEntity ver3 = new EmbIdWithCustomTypeTestEntity( id5, "c3" ); - - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 1 ).equals( ver1 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 4 ).equals( ver3 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 5 ).equals( ver3 ); - } - - @Test - public void testHistoryOfId6() { - EmbIdWithCustomTypeTestEntity ver1 = new EmbIdWithCustomTypeTestEntity( id6, "d" ); - EmbIdWithCustomTypeTestEntity ver2 = new EmbIdWithCustomTypeTestEntity( id6, "d2" ); - - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 1 ) == null; - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 4 ) == null; - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 5 ) == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java deleted file mode 100644 index 6bf40a50a599..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids; - -import java.util.Arrays; -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.DateIdTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DateId extends BaseEnversJPAFunctionalTestCase { - private Date id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DateIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - DateIdTestEntity dite = new DateIdTestEntity( new Date(), "x" ); - em.persist( dite ); - - id1 = dite.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - dite = em.find( DateIdTestEntity.class, id1 ); - dite.setStr1( "y" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( DateIdTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - DateIdTestEntity ver1 = new DateIdTestEntity( id1, "x" ); - DateIdTestEntity ver2 = new DateIdTestEntity( id1, "y" ); - - assert getAuditReader().find( DateIdTestEntity.class, id1, 1 ).getStr1().equals( "x" ); - assert getAuditReader().find( DateIdTestEntity.class, id1, 2 ).getStr1().equals( "y" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java deleted file mode 100644 index 05c17988ddac..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.ids.ManyToOneIdNotAuditedTestEntity; -import org.hibernate.orm.test.envers.entities.ids.ManyToOneNotAuditedEmbId; - -import org.junit.Test; - -/** - * A test checking that when using Envers it is possible to have non-audited entities that use unsupported - * components in their ids, e.g. a many-to-one join to another entity. - * - * @author Adam Warski (adam at warski dot org) - */ -public class ManyToOneIdNotAudited extends BaseEnversJPAFunctionalTestCase { - private ManyToOneNotAuditedEmbId id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneIdNotAuditedTestEntity.class, UnversionedStrTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - UnversionedStrTestEntity uste = new UnversionedStrTestEntity(); - uste.setStr( "test1" ); - em.persist( uste ); - - id1 = new ManyToOneNotAuditedEmbId( uste ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ManyToOneIdNotAuditedTestEntity mtoinate = new ManyToOneIdNotAuditedTestEntity(); - mtoinate.setData( "data1" ); - mtoinate.setId( id1 ); - em.persist( mtoinate ); - - em.getTransaction().commit(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CompositeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CompositeEntity.java deleted file mode 100644 index 24bdf38bbd4b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CompositeEntity.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.util.Set; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -@Table(name = "compositeentity") -@Access(value = AccessType.FIELD) -public class CompositeEntity { - - @EmbeddedId - private CompositeEntityId codeObject = new CompositeEntityId(); - - @OneToMany(targetEntity = OwnerOfRelationCode.class, fetch = FetchType.LAZY, mappedBy = "compositeEntity") - private Set ownerOfRelationCodes = new java.util.HashSet<>(); - - public CompositeEntityId getCodeObject() { - return codeObject; - } - - public void setCodeObject(CompositeEntityId codeObject) { - this.codeObject = codeObject; - } - - public Set getOwnerOfRelationCodes() { - return ownerOfRelationCodes; - } - - public void setOwnerOfRelationCodes(Set ownerOfRelationCodes) { - this.ownerOfRelationCodes = ownerOfRelationCodes; - } - - public String getFirstCode() { - return codeObject == null ? null : codeObject.getFirstCode(); - } - - public void setFirstCode(String firstCode) { - if ( codeObject == null ) { - codeObject = new CompositeEntityId(); - } - codeObject.setFirstCode( firstCode ); - } - - public String getSecondCode() { - return codeObject == null ? null : codeObject.getSecondCode(); - } - - public void setSecondCode(String secondCode) { - if ( codeObject == null ) { - codeObject = new CompositeEntityId(); - } - codeObject.setSecondCode( secondCode ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CompositeEntityId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CompositeEntityId.java deleted file mode 100644 index 42d25aaa424a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CompositeEntityId.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; - -import jakarta.persistence.Embeddable; - -@Embeddable -public class CompositeEntityId implements Serializable{ - - private String firstCode; - private String secondCode; - - public String getFirstCode() { - return firstCode; - } - - public void setFirstCode(String firstCode) { - this.firstCode = firstCode; - } - - public String getSecondCode() { - return secondCode; - } - - public void setSecondCode(String secondCode) { - this.secondCode = secondCode; - } - - @Override - public String toString() { - return "CompositeEntityId{" + - "firstCode='" + firstCode + '\'' + - ", secondCode='" + secondCode + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CorrectChild.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CorrectChild.java deleted file mode 100644 index 220ea6987885..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CorrectChild.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MapsId; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Audited -@Entity -public class CorrectChild { - @EmbeddedId - private CorrectChildId id; - - @ManyToOne - @MapsId("id") - private Parent parent; - - CorrectChild() { - - } - - public CorrectChild(Integer number, Parent parent) { - this.id = new CorrectChildId(number, parent); - this.parent = parent; - } - - public CorrectChildId getId() { - return id; - } - - public void setId(CorrectChildId id) { - this.id = id; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CorrectChildId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CorrectChildId.java deleted file mode 100644 index d39c8c0da281..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/CorrectChildId.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; - -/** - * @author Chris Cranford - */ -@Embeddable -public class CorrectChildId implements Serializable { - @Column(name = "parent_id") - private String id; - - @Column(name = "child_number") - private Integer number; - - CorrectChildId() { - - } - - public CorrectChildId(Integer number, Parent parent) { - this.number = number; - this.id = parent.getId(); - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java deleted file mode 100644 index 04aec74528cf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MappedSuperclass; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * Tests an entity mapping that uses an {@link EmbeddedId} mapping that makes use of generics. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-13564") -public class EmbeddedIdGenericsTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { NotificationType.class, Trigger.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - // Store NotificationType and Trigger instance - doInJPA( this::entityManagerFactory, entityManager -> { - final NotificationType type = new NotificationType( "code" ); - entityManager.persist( type ); - - Trigger trigger = new Trigger( "str", type ); - entityManager.persist( trigger ); - - trigger.setActive( !trigger.isActive() ); - entityManager.merge( trigger ); - } ); - } - - @Test - public void testAuditQueryMappedSuperclassWithEmbeddedId() { - // There should be at least one revision for Trigger - List resultList = getAuditReader().createQuery().forRevisionsOfEntity( Trigger.class, true, true ).getResultList(); - assertEquals( 1, resultList.size() ); - - // Trigger should be hydrated with a composite-id values below - Trigger entityInstance = (Trigger) resultList.get( 0 ); - assertEquals( "str", entityInstance.getPk().getEventType() ); - assertEquals( "code", entityInstance.getPk().getNotificationType().getCode() ); - } - - - @MappedSuperclass - public abstract static class CompositeIdBaseEntity implements Serializable { - protected PK pk; - - @EmbeddedId - public PK getPk() { - return pk; - } - - public void setPk(PK pk) { - this.pk = pk; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - CompositeIdBaseEntity that = (CompositeIdBaseEntity) o; - return Objects.equals( pk, that.pk ); - } - - @Override - public int hashCode() { - return Objects.hash( pk ); - } - } - - @Audited - @Entity(name = "Trigger") - @Table(name = "`Trigger`") - public static class Trigger extends CompositeIdBaseEntity { - private boolean active; - - Trigger() { - - } - - public Trigger(String eventType, NotificationType notificationType) { - this.pk = new TriggerPK( eventType, notificationType ); - } - - public boolean isActive() { - return active; - } - - public void setActive(boolean active) { - this.active = active; - } - - @Embeddable - public static class TriggerPK implements Serializable { - private String eventType; - private NotificationType notificationType; - - TriggerPK() { - - } - - public TriggerPK(String eventType, NotificationType notificationType) { - this.eventType = eventType; - this.notificationType = notificationType; - } - - @Column(nullable = false, insertable = false, updatable = false) - public String getEventType() { - return eventType; - } - - public void setEventType(String eventType) { - this.eventType = eventType; - } - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToOne - @JoinColumn(insertable = false, updatable = false, nullable = false) - public NotificationType getNotificationType() { - return notificationType; - } - - public void setNotificationType(NotificationType notificationType) { - this.notificationType = notificationType; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - TriggerPK triggerPK = (TriggerPK) o; - return Objects.equals( eventType, triggerPK.eventType ) && - Objects.equals( notificationType, triggerPK.notificationType ); - } - - @Override - public int hashCode() { - return Objects.hash( eventType, notificationType ); - } - } - } - - @Entity(name = "NotificationType") - public static class NotificationType { - @Id - private String code; - - public NotificationType() { - - } - - public NotificationType(String code) { - this.code = code; - } - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - NotificationType that = (NotificationType) o; - return Objects.equals( code, that.code ); - } - - @Override - public int hashCode() { - return Objects.hash( code ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/IncorrectChild.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/IncorrectChild.java deleted file mode 100644 index 5260ad71a941..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/IncorrectChild.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Audited -@Entity -public class IncorrectChild { - @EmbeddedId - private IncorrectChildId id; - - IncorrectChild() { - - } - - public IncorrectChild(Integer number, Parent parent) { - this.id = new IncorrectChildId( number, parent ); - } - - public IncorrectChildId getId() { - return id; - } - - public void setId(IncorrectChildId id) { - this.id = id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/IncorrectChildId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/IncorrectChildId.java deleted file mode 100644 index 505cf7980425..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/IncorrectChildId.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; - -/** - * @author Chris Cranford - */ -@Embeddable -public class IncorrectChildId implements Serializable { - @ManyToOne - @JoinColumns({ @JoinColumn(name = "parent_id", referencedColumnName = "id") }) - private Parent parent; - - @Column(name = "child_number") - private Integer number; - - IncorrectChildId() { - - } - - public IncorrectChildId(Integer number, Parent parent) { - this.number = number; - this.parent = parent; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Item.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Item.java deleted file mode 100644 index 5a4cdd25dd46..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Item.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Item implements Serializable { - @EmbeddedId - private ItemId id; - - private Double price; - - public Item() { - } - - public Item(ItemId id, Double price) { - this.id = id; - this.price = price; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Item) ) { - return false; - } - - Item item = (Item) o; - - if ( getId() != null ? !getId().equals( item.getId() ) : item.getId() != null ) { - return false; - } - if ( getPrice() != null ? !getPrice().equals( item.getPrice() ) : item.getPrice() != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (price != null ? price.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Item(id = " + id + ", price = + " + price + ")"; - } - - public ItemId getId() { - return id; - } - - public void setId(ItemId id) { - this.id = id; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/ItemId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/ItemId.java deleted file mode 100644 index 3a2ded25f6dc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/ItemId.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Embeddable -public class ItemId implements Serializable { - @Column(name = "model") - private String model; - - @Column(name = "version") - private Integer version; - - @ManyToOne - @JoinColumn(name = "producer", nullable = false) // NOT NULL for Sybase - private Producer producer; - - public ItemId() { - } - - public ItemId(String model, Integer version, Producer producer) { - this.model = model; - this.version = version; - this.producer = producer; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ItemId) ) { - return false; - } - - ItemId itemId = (ItemId) o; - - if ( getModel() != null ? !getModel().equals( itemId.getModel() ) : itemId.getModel() != null ) { - return false; - } - if ( getProducer() != null ? !getProducer().equals( itemId.getProducer() ) : itemId.getProducer() != null ) { - return false; - } - if ( getVersion() != null ? !getVersion().equals( itemId.getVersion() ) : itemId.getVersion() != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = model != null ? model.hashCode() : 0; - result = 31 * result + (version != null ? version.hashCode() : 0); - result = 31 * result + (producer != null ? producer.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ItemId(model = " + model + ", version = " + version + ", producer = " + producer + ")"; - } - - public String getModel() { - return model; - } - - public void setModel(String model) { - this.model = model; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Producer getProducer() { - return producer; - } - - public void setProducer(Producer producer) { - this.producer = producer; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java deleted file mode 100644 index 299b903b52fe..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.util.Arrays; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -@JiraKey(value = "HHH-13361") -public class NestedEmbeddedIdentifiersTest extends BaseEnversJPAFunctionalTestCase { - - private OwnerOfRelationCodeId id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { OwnerOfRelationCode.class, CompositeEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1, test insert - final OwnerOfRelationCode owner = doInJPA( this::entityManagerFactory, session -> { - CompositeEntity compositeEntity = new CompositeEntity(); - compositeEntity.setFirstCode( "firstCode" ); - compositeEntity.setSecondCode( "secondCode" ); - session.persist( compositeEntity ); - - OwnerOfRelationCode ownerEntity = new OwnerOfRelationCode(); - ownerEntity.setCompositeEntity( compositeEntity ); - ownerEntity.setSecondIdentifier( "secondIdentifier" ); - - session.persist( ownerEntity ); - return ownerEntity; - } ); - - this.id = owner.getCodeObject(); - - // Revision 2, test update - doInJPA( this::entityManagerFactory, session -> { - OwnerOfRelationCode ownerEntity = session.find( OwnerOfRelationCode.class, id ); - ownerEntity.setDescription( "first description" ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( OwnerOfRelationCode.class, id ) ); - } - - @Test - public void testIdentifierAtRevision1() { - final OwnerOfRelationCode rev1 = getAuditReader().find( OwnerOfRelationCode.class, id, 1 ); - assertEquals( rev1.getCodeObject().getSecondIdentifier(), "secondIdentifier" ); - assertEquals( rev1.getCodeObject().getCompositeEntity().getFirstCode(), "firstCode" ); - assertEquals( rev1.getCodeObject().getCompositeEntity().getSecondCode(), "secondCode" ); - assertNull( rev1.getDescription() ); - } - - @Test - public void testIdentifierAtRevision2() { - final OwnerOfRelationCode rev2 = getAuditReader().find( OwnerOfRelationCode.class, id, 2 ); - assertEquals( rev2.getCodeObject().getSecondIdentifier(), "secondIdentifier" ); - assertEquals( rev2.getCodeObject().getCompositeEntity().getFirstCode(), "firstCode" ); - assertEquals( rev2.getCodeObject().getCompositeEntity().getSecondCode(), "secondCode" ); - assertEquals( rev2.getDescription(), "first description" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/OwnerOfRelationCode.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/OwnerOfRelationCode.java deleted file mode 100644 index da94773ec42e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/OwnerOfRelationCode.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import jakarta.persistence.Access; -import jakarta.persistence.AccessType; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MapsId; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -@Table(name = "ownerOfRelationcode") -@Access(value = AccessType.FIELD) -public class OwnerOfRelationCode { - - @EmbeddedId - private OwnerOfRelationCodeId codeObject = new OwnerOfRelationCodeId(); - - @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumns({ - @JoinColumn(name = "compositeEntity_firstCode", referencedColumnName = "firstCode", unique = false, nullable = false), - @JoinColumn(name = "compositeEntity_secondCode", referencedColumnName = "secondCode", unique = false, nullable = false) }) - @MapsId("compositeEntity") - private CompositeEntity compositeEntity; - - private String description; - - public OwnerOfRelationCodeId getCodeObject() { - return codeObject; - } - - public CompositeEntity getCompositeEntity() { - return compositeEntity; - } - - public void setCompositeEntity(CompositeEntity compositeEntity) { - if ( codeObject == null ) { - codeObject = new OwnerOfRelationCodeId(); - } - if ( compositeEntity != null ) { - codeObject.setCompositeEntity( compositeEntity.getCodeObject() ); - } - this.compositeEntity = compositeEntity; - } - - public String getSecondIdentifier() { - return codeObject == null ? null : codeObject.getSecondIdentifier(); - - } - - public void setSecondIdentifier(String secondIdentifier) { - if ( codeObject == null ) { - codeObject = new OwnerOfRelationCodeId(); - } - codeObject.setSecondIdentifier( secondIdentifier ); - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public String toString() { - return "OwnerOfRelationCode{" + - "codeObject=" + codeObject + - ", compositeEntity=" + compositeEntity + - ", description='" + description + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/OwnerOfRelationCodeId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/OwnerOfRelationCodeId.java deleted file mode 100644 index 08d802952bea..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/OwnerOfRelationCodeId.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; - -@Embeddable -public class OwnerOfRelationCodeId implements Serializable { - - @Embedded - private CompositeEntityId compositeEntity; - - private String secondIdentifier; - - public CompositeEntityId getCompositeEntity() { - return compositeEntity; - } - - public void setCompositeEntity(CompositeEntityId compositeEntity) { - this.compositeEntity = compositeEntity; - } - - public String getSecondIdentifier() { - return secondIdentifier; - } - - public void setSecondIdentifier(String secondIdentifier) { - this.secondIdentifier = secondIdentifier; - } - - @Override - public String toString() { - return "OwnerOfRelationCodeId{" + - "compositeEntity=" + compositeEntity + - ", secondIdentifier='" + secondIdentifier + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Parent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Parent.java deleted file mode 100644 index 943d659fd887..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Parent.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Audited -@Entity -public class Parent { - @Id - private String id; - - @OneToMany(mappedBy = "parent") - private List correctChildren = new ArrayList(); - - @OneToMany(mappedBy = "id.parent") - private List incorrectChildren = new ArrayList(); - - Parent() { - - } - - Parent(String id) { - this.id = id; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public List getCorrectChildren() { - return correctChildren; - } - - public void setCorrectChildren(List correctChildren) { - this.correctChildren = correctChildren; - } - - public List getIncorrectChildren() { - return incorrectChildren; - } - - public void setIncorrectChildren(List incorrectChildren) { - this.incorrectChildren = incorrectChildren; - } - - public void addIncorrectChild(Integer number) { - this.incorrectChildren.add( new IncorrectChild( number, this ) ); - } - - public void addCorrectChild(Integer number) { - this.correctChildren.add( new CorrectChild( number, this ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Producer.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Producer.java deleted file mode 100644 index 762ace2e6f8e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/Producer.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Producer implements Serializable { - @Id - @Column(name = "id") - private Integer id; - - @Column(name = "name") - private String name; - - public Producer() { - } - - public Producer(Integer id, String name) { - this.id = id; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Producer) ) { - return false; - } - - Producer producer = (Producer) o; - - if ( getId() != null ? !getId().equals( producer.getId() ) : producer.getId() != null ) { - return false; - } - if ( getName() != null ? !getName().equals( producer.getName() ) : producer.getName() != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Producer(id = " + id + ", name = " + name + ")"; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/PurchaseOrder.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/PurchaseOrder.java deleted file mode 100644 index ce257d2c301e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/PurchaseOrder.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class PurchaseOrder implements Serializable { - @Id - @GeneratedValue - private Integer id; - - @ManyToOne - @JoinColumns({ - @JoinColumn(name = "model", referencedColumnName = "model", nullable = true), - @JoinColumn(name = "version", referencedColumnName = "version", nullable = true), - @JoinColumn(name = "producer", referencedColumnName = "producer", nullable = true) - }) - private Item item; - - @Column(name = "NOTE") - private String comment; - - public PurchaseOrder() { - } - - public PurchaseOrder(Item item, String comment) { - this.item = item; - this.comment = comment; - } - - public PurchaseOrder(Integer id, Item item, String comment) { - this.id = id; - this.item = item; - this.comment = comment; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PurchaseOrder) ) { - return false; - } - - PurchaseOrder that = (PurchaseOrder) o; - - if ( getComment() != null ? !getComment().equals( that.getComment() ) : that.getComment() != null ) { - return false; - } - if ( getId() != null ? !getId().equals( that.getId() ) : that.getId() != null ) { - return false; - } - if ( getItem() != null ? !getItem().equals( that.getItem() ) : that.getItem() != null ) { - return false; - } - - return true; - } - - @Override - public String toString() { - return "PurchaseOrder(id = " + id + ", item = " + item + ", comment = " + comment + ")"; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (item != null ? item.hashCode() : 0); - result = 31 * result + (comment != null ? comment.hashCode() : 0); - return result; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Item getItem() { - return item; - } - - public void setItem(Item item) { - this.item = item; - } - - public String getComment() { - return comment; - } - - public void setComment(String comment) { - this.comment = comment; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java deleted file mode 100644 index cba5bfa12fe7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java +++ /dev/null @@ -1,261 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * Test an audited entity with an embeddable composite key that has an association - * to a non-audited entity type. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12498") -public class RelationInsideEmbeddableNotAuditedTest extends BaseEnversJPAFunctionalTestCase { - private Integer authorId; - private BookId bookId1; - private BookId bookId2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Book.class, Author.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1, persist author and book - doInJPA( this::entityManagerFactory, entityManager -> { - final Author author = new Author(); - author.setName( "Stephen King" ); - entityManager.persist( author ); - authorId = author.getId(); - - final Book book = new Book(); - book.setId( new BookId() ); - book.getId().setId( 1 ); - book.getId().setAuthor( author ); - book.setName( "Gunslinger" ); - book.setEdition( 1 ); - entityManager.persist( book ); - this.bookId1 = book.getId(); - } ); - - // Revision 2, persist new book - doInJPA( this::entityManagerFactory, entityManager -> { - final Author author = entityManager.find( Author.class, authorId ); - - final Book book = new Book(); - book.setId( new BookId() ); - book.getId().setId( 2 ); - book.getId().setAuthor( author ); - book.setName( "Gunslinger" ); - book.setEdition( 2 ); - entityManager.persist( book ); - this.bookId2 = book.getId(); - } ); - - // Modify books - doInJPA( this::entityManagerFactory, entityManager -> { - final Book book1 = entityManager.find( Book.class, bookId1 ); - book1.setName( "Gunslinger: Dark Tower" ); - entityManager.merge( book1 ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - final Book book2 = entityManager.find( Book.class, bookId2 ); - book2.setName( "Gunslinger: Dark Tower" ); - entityManager.merge( book2 ); - } ); - - //! Delete books - doInJPA( this::entityManagerFactory, entityManager -> { - final Book book1 = entityManager.find( Book.class, bookId1 ); - entityManager.remove( book1 ); - - final Book book2 = entityManager.find( Book.class, bookId2 ); - entityManager.remove( book2 ); - } ); - } - - @Test - public void tesRevisionCounts() { - assertEquals( Arrays.asList( 1, 3, 5 ), getAuditReader().getRevisions( Book.class, bookId1 ) ); - assertEquals( Arrays.asList( 2, 4, 5 ), getAuditReader().getRevisions( Book.class, bookId2 ) ); - } - - @Test - public void testRevisionHistoryBook1() { - final Book rev1 = getAuditReader().find( Book.class, bookId1, 1 ); - assertNotNull( rev1.getId().getAuthor() ); - - final Book rev3 = getAuditReader().find( Book.class, bookId1, 3 ); - assertNotNull( rev3.getId().getAuthor() ); - - final Book rev5 = getAuditReader().find( Book.class, bookId1, 5 ); - assertNull( rev5 ); - } - - @Test - public void testRevisionHistoryBook2() { - final Book rev2 = getAuditReader().find( Book.class, bookId2, 2 ); - assertNotNull( rev2.getId().getAuthor() ); - - final Book rev4 = getAuditReader().find( Book.class, bookId2, 4 ); - assertNotNull( rev4.getId().getAuthor() ); - - final Book rev5 = getAuditReader().find( Book.class, bookId2, 5 ); - assertNull( rev5 ); - } - - @Test - @SuppressWarnings("unchecked") - public void testSelectDeletedEntitiesBook1() { - List books = (List) getAuditReader().createQuery() - .forRevisionsOfEntity( Book.class, true, true ) - .add( AuditEntity.id().eq( bookId1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - - assertTrue( !books.isEmpty() ); - - final Book book = books.get( 0 ); - assertNotNull( book.getId() ); - assertNotNull( book.getId().getAuthor() ); - assertEquals( authorId, book.getId().getAuthor().getId() ); - } - - @Test - @SuppressWarnings("unchecked") - public void testSelectDeletedEntitiesBook2() { - List books = (List) getAuditReader().createQuery() - .forRevisionsOfEntity( Book.class, true, true ) - .add( AuditEntity.id().eq( bookId2 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - - assertTrue( !books.isEmpty() ); - - final Book book = books.get( 0 ); - assertNotNull( book.getId() ); - assertNotNull( book.getId().getAuthor() ); - assertEquals( authorId, book.getId().getAuthor().getId() ); - } - - @Audited - @Entity(name = "Book") - public static class Book { - @EmbeddedId - private BookId id; - private String name; - private Integer edition; - - public BookId getId() { - return id; - } - - public void setId(BookId id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getEdition() { - return edition; - } - - public void setEdition(Integer edition) { - this.edition = edition; - } - } - - @Embeddable - public static class BookId implements Serializable { - private Integer id; - - @ManyToOne(fetch = FetchType.LAZY) - private Author author; - - BookId() { - - } - - BookId(Integer id, Author author) { - this.id = id; - this.author = author; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Author getAuthor() { - return author; - } - - public void setAuthor(Author author) { - this.author = author; - } - } - - @Entity(name = "Author") - public static class Author { - @Id - @GeneratedValue - private Integer id; - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java deleted file mode 100644 index a0ad6384b4c3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.util.Arrays; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * Test avoiding the creating of a foreign key constraint for an embedded identifier that - * contains a many-to-one relationship, allowing the removal of the base table entity - * without throwing a foreign-key constraint exception due to historical audit rows. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11107") -public class RelationInsideEmbeddableRemoveTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { CorrectChild.class, IncorrectChild.class, Parent.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getOrCreateEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); - Parent parent = new Parent( "Parent" ); - parent.addIncorrectChild( 1 ); - parent.addCorrectChild( 1 ); - entityManager.persist( parent ); - for ( IncorrectChild child : parent.getIncorrectChildren() ) { - entityManager.persist( child ); - } - for ( CorrectChild child : parent.getCorrectChildren() ) { - entityManager.persist( child ); - } - entityManager.getTransaction().commit(); - - // Revision 2 - entityManager.getTransaction().begin(); - for ( IncorrectChild child : parent.getIncorrectChildren() ) { - entityManager.remove( child ); - } - parent.getIncorrectChildren().clear(); - for( CorrectChild child : parent.getCorrectChildren() ) { - entityManager.remove( child ); - } - parent.getCorrectChildren().clear(); - entityManager.getTransaction().commit(); - - // Revision 3 - // This fails because of referential integrity constraints without fix. - entityManager.getTransaction().begin(); - entityManager.remove( parent ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Parent.class, "Parent" ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java deleted file mode 100644 index d9dc9d8d87f0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.embeddedid; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7690") -public class RelationInsideEmbeddableTest extends BaseEnversJPAFunctionalTestCase { - private Integer orderId = null; - private ItemId itemId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { PurchaseOrder.class, Item.class, ItemId.class, Producer.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Producer producer = new Producer( 1, "Sony" ); - ItemId sonyId = new ItemId( "TV", 1, producer ); - Item item = new Item( sonyId, 100.50 ); - PurchaseOrder order = new PurchaseOrder( item, null ); - em.persist( producer ); - em.persist( item ); - em.persist( order ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - order = em.find( PurchaseOrder.class, order.getId() ); - order.setComment( "fragile" ); - order = em.merge( order ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - item = em.find( Item.class, sonyId ); - item.setPrice( 110.00 ); - em.getTransaction().commit(); - - orderId = order.getId(); - itemId = sonyId; - - em.close(); - } - - @Test - public void testRevisionsCounts() throws Exception { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( PurchaseOrder.class, orderId ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Item.class, itemId ) ); - } - - @Test - public void testHistoryOfPurchaseOrder() { - PurchaseOrder ver1 = new PurchaseOrder( - orderId, new Item( - new ItemId( "TV", 1, new Producer( 1, "Sony" ) ), - 100.50 - ), null - ); - PurchaseOrder ver2 = new PurchaseOrder( - orderId, new Item( - new ItemId( "TV", 1, new Producer( 1, "Sony" ) ), - 100.50 - ), "fragile" - ); - - Assert.assertEquals( ver1, getAuditReader().find( PurchaseOrder.class, orderId, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( PurchaseOrder.class, orderId, 2 ) ); - } - - @Test - public void testHistoryOfItem() { - Item ver1 = new Item( itemId, 100.50 ); - Item ver2 = new Item( itemId, 110.00 ); - - Assert.assertEquals( ver1, getAuditReader().find( Item.class, itemId, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( Item.class, itemId, 3 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ClassType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ClassType.java deleted file mode 100644 index b5fe8a449b44..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ClassType.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -@Entity -public class ClassType implements Serializable { - @Id - @Column(name = "Name") - private String type; - - private String description; - - public ClassType() { - } - - public ClassType(String type, String description) { - this.type = type; - this.description = description; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ClassType) ) { - return false; - } - - ClassType classType = (ClassType) o; - - if ( type != null ? !type.equals( classType.type ) : classType.type != null ) { - return false; - } - - return true; - } - - @Override - public String toString() { - return "ClassType(type = " + type + ", description = " + description + ")"; - } - - @Override - public int hashCode() { - return type != null ? type.hashCode() : 0; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java deleted file mode 100644 index a3e4f4719446..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import junit.framework.Assert; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import jakarta.persistence.EntityManager; -import java.util.Arrays; - -/** - * @author Matthew Morrissette (yinzara at gmail dot com) - */ -@JiraKey(value = "HHH-10667") -public class IdClassReferenceIdentifierTest extends BaseEnversJPAFunctionalTestCase { - private ReferenceIdentifierClassId entityId = null; - private Integer typeId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ReferenceIdentifierEntity.class, - ReferenceIdentifierClassId.class, - ClassType.class, - IntegerGeneratedIdentityEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - ClassType type = new ClassType( "type", "initial description" ); - em.persist( type ); - - IntegerGeneratedIdentityEntity type2 = new IntegerGeneratedIdentityEntity(); - em.persist(type2); - - ReferenceIdentifierEntity entity = new ReferenceIdentifierEntity(); - entity.setSampleValue( "initial data" ); - entity.setType( type ); - entity.setIiie( type2 ); - - - em.persist( entity ); - em.getTransaction().commit(); - - typeId = type2.getId(); - entityId = new ReferenceIdentifierClassId( typeId, type.getType() ); - - // Revision 2 - em.getTransaction().begin(); - type = em.find( ClassType.class, type.getType() ); - type.setDescription( "modified description" ); - em.merge( type ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - entity = em.find( ReferenceIdentifierEntity.class, entityId ); - entity.setSampleValue( "modified data" ); - em.merge( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ClassType.class, "type" ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntegerGeneratedIdentityEntity.class, typeId ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( ReferenceIdentifierEntity.class, entityId ) ); - } - - @Test - public void testHistoryOfEntity() { - // given - ReferenceIdentifierEntity entity = new ReferenceIdentifierEntity( new IntegerGeneratedIdentityEntity(typeId), new ClassType( "type", "initial description" ), "initial data" ); - - // when - ReferenceIdentifierEntity ver1 = getAuditReader().find( ReferenceIdentifierEntity.class, entityId, 1 ); - - // then - Assert.assertEquals( entity.getIiie().getId(), ver1.getIiie().getId() ); - Assert.assertEquals( entity.getSampleValue(), ver1.getSampleValue() ); - Assert.assertEquals( entity.getType().getType(), ver1.getType().getType() ); - Assert.assertEquals( entity.getType().getDescription(), ver1.getType().getDescription() ); - - // given - entity.setSampleValue( "modified data" ); - entity.getType().setDescription( "modified description" ); - - // when - ReferenceIdentifierEntity ver2 = getAuditReader().find( ReferenceIdentifierEntity.class, entityId, 3 ); - - // then - Assert.assertEquals( entity.getIiie().getId(), ver2.getIiie().getId() ); - Assert.assertEquals( entity.getSampleValue(), ver2.getSampleValue() ); - Assert.assertEquals( entity.getType().getType(), ver2.getType().getType() ); - Assert.assertEquals( entity.getType().getDescription(), ver2.getType().getDescription() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java deleted file mode 100644 index 94f63bc58215..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-4751") -public class IdClassWithRelationTest extends BaseEnversJPAFunctionalTestCase { - private RelationalClassId entityId = null; - private String typeId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SampleClass.class, RelationalClassId.class, ClassType.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - ClassType type = new ClassType( "type", "initial description" ); - SampleClass entity = new SampleClass(); - entity.setType( type ); - entity.setSampleValue( "initial data" ); - em.persist( type ); - em.persist( entity ); - em.getTransaction().commit(); - - typeId = type.getType(); - entityId = new RelationalClassId( entity.getId(), new ClassType( "type", "initial description" ) ); - - // Revision 2 - em.getTransaction().begin(); - type = em.find( ClassType.class, type.getType() ); - type.setDescription( "modified description" ); - em.merge( type ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - entity = em.find( SampleClass.class, entityId ); - entity.setSampleValue( "modified data" ); - em.merge( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ClassType.class, typeId ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( SampleClass.class, entityId ) ); - } - - @Test - public void testHistoryOfEntity() { - // given - SampleClass entity = new SampleClass( entityId.getId(), entityId.getType(), "initial data" ); - - // when - SampleClass ver1 = getAuditReader().find( SampleClass.class, entityId, 1 ); - - // then - Assert.assertEquals( entity.getId(), ver1.getId() ); - Assert.assertEquals( entity.getSampleValue(), ver1.getSampleValue() ); - Assert.assertEquals( entity.getType().getType(), ver1.getType().getType() ); - Assert.assertEquals( entity.getType().getDescription(), ver1.getType().getDescription() ); - - // given - entity.setSampleValue( "modified data" ); - entity.getType().setDescription( "modified description" ); - - // when - SampleClass ver2 = getAuditReader().find( SampleClass.class, entityId, 3 ); - - // then - Assert.assertEquals( entity.getId(), ver2.getId() ); - Assert.assertEquals( entity.getSampleValue(), ver2.getSampleValue() ); - Assert.assertEquals( entity.getType().getType(), ver2.getType().getType() ); - Assert.assertEquals( entity.getType().getDescription(), ver2.getType().getDescription() ); - } - - @Test - public void testHistoryOfType() { - // given - ClassType type = new ClassType( typeId, "initial description" ); - - // when - ClassType ver1 = getAuditReader().find( ClassType.class, typeId, 1 ); - - // then - Assert.assertEquals( type, ver1 ); - Assert.assertEquals( type.getDescription(), ver1.getDescription() ); - - // given - type.setDescription( "modified description" ); - - // when - ClassType ver2 = getAuditReader().find( ClassType.class, typeId, 2 ); - - // then - Assert.assertEquals( type, ver2 ); - Assert.assertEquals( type.getDescription(), ver2.getDescription() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IntegerGeneratedIdentityEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IntegerGeneratedIdentityEntity.java deleted file mode 100644 index 6e421af17675..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IntegerGeneratedIdentityEntity.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import org.hibernate.envers.Audited; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import java.io.Serializable; - -/** - * @author Matthew Morrissette (yinzara at gmail dot com) - */ -@Audited -@Entity(name = "IntegerGenIdEntity") -public class IntegerGeneratedIdentityEntity implements Serializable { - - @Id - @GeneratedValue - private Integer id; - - private String description; - - public IntegerGeneratedIdentityEntity() { - } - - public IntegerGeneratedIdentityEntity(Integer id) { - this.id = id; - } - - public IntegerGeneratedIdentityEntity(String description) { - this.description = description; - } - - public IntegerGeneratedIdentityEntity(Integer id, String description) { - this.id = id; - this.description = description; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || !(o instanceof IntegerGeneratedIdentityEntity)) return false; - - IntegerGeneratedIdentityEntity that = (IntegerGeneratedIdentityEntity) o; - - return id != null ? id.equals(that.id) : that.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "IntegerGeneratedIdentityEntity(id = " + id + ", description = " + description + ")"; - } - - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java deleted file mode 100644 index 46a9630db964..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -@JiraKey( value = "HHH-14280" ) -public class ManyToOneNotAuditedMulIdTest extends BaseEnversJPAFunctionalTestCase { - private final static String str1 = "str1", str2 = "str2"; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { UnversionedStrTestEntity.class, ManyToOneNotAuditedMulIdTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - UnversionedStrTestEntity id2 = new UnversionedStrTestEntity( str1 ); - ManyToOneNotAuditedMulIdTestEntity entity = new ManyToOneNotAuditedMulIdTestEntity( id2, str2 ); - - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( id2 ); - em.persist( entity ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionQuery() { - final List entities = getAuditReader().createQuery() - .forRevisionsOfEntity( ManyToOneNotAuditedMulIdTestEntity.class, true, true ) - .getResultList(); - - assertEquals( 1, entities.size() ); - final ManyToOneNotAuditedMulIdTestEntity entity = entities.get( 0 ); - assertEquals( str1, entity.id2.getStr() ); - assertEquals( str2, entity.str ); - } - - @Entity(name = "ManyToOneNotAudited") - @IdClass(MulId.class) - public static class ManyToOneNotAuditedMulIdTestEntity { - @Id - @GeneratedValue - private Integer id1; - - @Id - @ManyToOne - private UnversionedStrTestEntity id2; - - @Audited - private String str; - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public UnversionedStrTestEntity getId2() { - return id2; - } - - public void setId2(UnversionedStrTestEntity id2) { - this.id2 = id2; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public ManyToOneNotAuditedMulIdTestEntity() { - } - - public ManyToOneNotAuditedMulIdTestEntity(UnversionedStrTestEntity id2, String str) { - this.id2 = id2; - this.str = str; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ReferenceIdentifierClassId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ReferenceIdentifierClassId.java deleted file mode 100644 index 2c4a007704b1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ReferenceIdentifierClassId.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import java.io.Serializable; - -/** - * Created by yinzara on 4/1/16. - */ -public class ReferenceIdentifierClassId implements Serializable { - private Integer iiie; - private String type; - - public ReferenceIdentifierClassId() { - } - - public ReferenceIdentifierClassId(Integer iiie, String type) { - this.iiie = iiie; - this.type = type; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferenceIdentifierClassId) ) { - return false; - } - - ReferenceIdentifierClassId that = (ReferenceIdentifierClassId) o; - - if ( iiie != null ? !iiie.equals( that.iiie) : that.iiie != null ) { - return false; - } - if ( type != null ? !type.equals( that.type ) : that.type != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = iiie != null ? iiie.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ReferenceIdentifierClassId(iiie = " + iiie + ", type = " + type + ")"; - } - - public Integer getIiie() { - return iiie; - } - - public void setIiie(Integer iiie) { - this.iiie = iiie; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ReferenceIdentifierEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ReferenceIdentifierEntity.java deleted file mode 100644 index c9660ffa6fd1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ReferenceIdentifierEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import org.hibernate.envers.Audited; - -import jakarta.persistence.*; -import java.io.Serializable; - -/** - * @author Matthew Morrissette (yinzara at gmail dot com) - */ -@Audited -@Entity -@IdClass(ReferenceIdentifierClassId.class) -public class ReferenceIdentifierEntity implements Serializable { - - @Id - @JoinColumn(name="ClassTypeId", nullable=false) - @GeneratedValue - @ManyToOne(fetch = FetchType.LAZY, optional = false) - private IntegerGeneratedIdentityEntity iiie; - - @Id - @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumn(name = "ClassTypeName") - private ClassType type; - - private String sampleValue; - - public ReferenceIdentifierEntity() { - } - - public ReferenceIdentifierEntity(ClassType type) { - this.type = type; - } - - public ReferenceIdentifierEntity(IntegerGeneratedIdentityEntity iiie, ClassType type) { - this.iiie = iiie; - this.type = type; - } - - public ReferenceIdentifierEntity(IntegerGeneratedIdentityEntity iiie, ClassType type, String sampleValue) { - this.iiie = iiie; - this.type = type; - this.sampleValue = sampleValue; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferenceIdentifierEntity) ) { - return false; - } - - ReferenceIdentifierEntity sampleClass = (ReferenceIdentifierEntity) o; - - if ( iiie != null ? !iiie.equals( sampleClass.iiie) : sampleClass.iiie != null ) { - return false; - } - if ( type != null ? !type.equals( sampleClass.type ) : sampleClass.type != null ) { - return false; - } - if ( sampleValue != null ? !sampleValue.equals( sampleClass.sampleValue ) : sampleClass.sampleValue != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = iiie != null ? iiie.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (sampleValue != null ? sampleValue.hashCode() : 0); - return result; - } - - public IntegerGeneratedIdentityEntity getIiie() { - return iiie; - } - - public void setIiie(IntegerGeneratedIdentityEntity iiie) { - this.iiie = iiie; - } - - public ClassType getType() { - return type; - } - - public void setType(ClassType type) { - this.type = type; - } - - public String getSampleValue() { - return sampleValue; - } - - public void setSampleValue(String sampleValue) { - this.sampleValue = sampleValue; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/RelationalClassId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/RelationalClassId.java deleted file mode 100644 index 1647f5a3a611..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/RelationalClassId.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import java.io.Serializable; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class RelationalClassId implements Serializable { - private Long id; - private ClassType type; - - public RelationalClassId() { - } - - public RelationalClassId(Long id, ClassType type) { - this.id = id; - this.type = type; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RelationalClassId) ) { - return false; - } - - RelationalClassId that = (RelationalClassId) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( type != null ? !type.equals( that.type ) : that.type != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "RelationalClassId(id = " + id + ", type = " + type + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public ClassType getType() { - return type; - } - - public void setType(ClassType type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/SampleClass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/SampleClass.java deleted file mode 100644 index 7b5c4caf4f22..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/SampleClass.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.idclass; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -@Entity -@IdClass(RelationalClassId.class) -public class SampleClass implements Serializable { - @Id - @GeneratedValue - private Long id; - - @Id - @ManyToOne(fetch = FetchType.LAZY, optional = false) - @JoinColumn(name = "ClassTypeName", referencedColumnName = "Name", - insertable = true, updatable = true, nullable = false) - private ClassType type; - - private String sampleValue; - - public SampleClass() { - } - - public SampleClass(ClassType type) { - this.type = type; - } - - public SampleClass(Long id, ClassType type) { - this.id = id; - this.type = type; - } - - public SampleClass(Long id, ClassType type, String sampleValue) { - this.id = id; - this.type = type; - this.sampleValue = sampleValue; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SampleClass) ) { - return false; - } - - SampleClass sampleClass = (SampleClass) o; - - if ( id != null ? !id.equals( sampleClass.id ) : sampleClass.id != null ) { - return false; - } - if ( type != null ? !type.equals( sampleClass.type ) : sampleClass.type != null ) { - return false; - } - if ( sampleValue != null ? !sampleValue.equals( sampleClass.sampleValue ) : sampleClass.sampleValue != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - result = 31 * result + (sampleValue != null ? sampleValue.hashCode() : 0); - return result; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public ClassType getType() { - return type; - } - - public void setType(ClassType type) { - this.type = type; - } - - public String getSampleValue() { - return sampleValue; - } - - public void setSampleValue(String sampleValue) { - this.sampleValue = sampleValue; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorEntity.java deleted file mode 100644 index 616de2c83867..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.protectedmodifier; - -import java.io.Serializable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class ProtectedConstructorEntity implements Serializable { - @EmbeddedId - private WrappedStringId wrappedStringId; - - private String str1; - - @SuppressWarnings("unused") - protected ProtectedConstructorEntity() { - // For JPA. Protected access modifier is essential in terms of unit test. - } - - public ProtectedConstructorEntity(WrappedStringId wrappedStringId, String str1) { - this.wrappedStringId = wrappedStringId; - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ProtectedConstructorEntity) ) { - return false; - } - - ProtectedConstructorEntity that = (ProtectedConstructorEntity) o; - - if ( wrappedStringId != null ? - !wrappedStringId.equals( that.wrappedStringId ) : - that.wrappedStringId != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = (wrappedStringId != null ? wrappedStringId.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ProtectedConstructorEntity(wrappedStringId = " + wrappedStringId + ", str1 = " + str1 + ")"; - } - - public WrappedStringId getWrappedStringId() { - return wrappedStringId; - } - - public void setWrappedStringId(WrappedStringId wrappedStringId) { - this.wrappedStringId = wrappedStringId; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java deleted file mode 100644 index cb39bac408be..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.protectedmodifier; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7934") -public class ProtectedConstructorTest extends BaseEnversJPAFunctionalTestCase { - private final ProtectedConstructorEntity testEntity = new ProtectedConstructorEntity( - new WrappedStringId( - "embeddedStringId" - ), "string" - ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {WrappedStringId.class, ProtectedConstructorEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - em.persist( testEntity ); - em.getTransaction().commit(); - em.close(); - } - - @Test - public void testAuditEntityInstantiation() { - List result = getAuditReader().createQuery() - .forEntitiesAtRevision( ProtectedConstructorEntity.class, 1 ) - .getResultList(); - Assert.assertEquals( Arrays.asList( testEntity ), result ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/WrappedStringId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/WrappedStringId.java deleted file mode 100644 index c28246b9da8d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/WrappedStringId.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.ids.protectedmodifier; - -import java.io.Serializable; -import jakarta.persistence.Embeddable; - -@Embeddable -public class WrappedStringId implements Serializable { - String id; - - @SuppressWarnings("unused") - protected WrappedStringId() { - // For JPA. Protected access modifier is essential in terms of unit test. - } - - public WrappedStringId(String id) { - this.id = id; - } - - public String toString() { - return id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - WrappedStringId that = (WrappedStringId) o; - return !(id != null ? !id.equals( that.id ) : that.id != null); - } - - public int hashCode() { - return id != null ? id.hashCode() : 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java deleted file mode 100644 index caaca59d45c3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - ChildEntity ver1 = new ChildEntity( id1, "x", 1l ); - ChildEntity ver2 = new ChildEntity( id1, "y", 2l ); - - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildEntity.java deleted file mode 100644 index 5f9d8e785f1a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildEntity.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildEntity extends ParentEntity { - @Basic - private Long numVal; - - public ChildEntity() { - } - - public ChildEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildEntity childEntity = (ChildEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java deleted file mode 100644 index 0b5c526878e9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildNullAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", null ); - em.persist( ce ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( null ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - ChildEntity ver1 = new ChildEntity( id1, "x", null ); - ChildEntity ver2 = new ChildEntity( id1, null, 2l ); - - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ChildEntity childVer1 = new ChildEntity( id1, "x", null ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java deleted file mode 100644 index cc42c6881178..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Column; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11133") -public class DiscriminatorJoinedInheritanceTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { ParentEntity.class, ChildEntity.class, ChildListHolder.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - ChildEntity childEntity = new ChildEntity( 1, "Child" ); - entityManager.getTransaction().begin(); - entityManager.persist( childEntity ); - entityManager.getTransaction().commit(); - - ChildListHolder holder = new ChildListHolder(); - holder.setId( 1 ); - holder.setChildren( Arrays.asList( childEntity ) ); - entityManager.getTransaction().begin(); - entityManager.persist( holder ); - entityManager.getTransaction().commit(); - - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( ChildEntity.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( ChildListHolder.class, 1 ) ); - } - - @Test - public void testConfiguredDiscriminatorValue() { - ChildEntity entity = getAuditReader().find( ChildEntity.class, 1, 1 ); - assertEquals( "ce", entity.getType() ); - } - - @Test - public void testDiscriminatorValuesViaRelatedEntityQuery() { - ChildListHolder holder = getAuditReader().find( ChildListHolder.class, 1, 2 ); - assertEquals( 1, holder.getChildren().size() ); - assertEquals( "ce", holder.getChildren().get( 0 ).getType() ); - } - - @Entity(name = "ParentEntity") - @Audited - @Inheritance(strategy = InheritanceType.JOINED) - @DiscriminatorValue("pe") - @DiscriminatorColumn(name = "type", length = 255) - public static abstract class ParentEntity { - @Id - private Integer id; - - @Column(insertable = false, updatable = false) - private String type; - - ParentEntity() { - - } - - ParentEntity(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getType() { - return type; - } - - private void setType(String type) { - this.type = type; - } - } - - @Entity(name = "ChildEntity") - @Audited - @DiscriminatorValue("ce") - public static class ChildEntity extends ParentEntity { - private String name; - - ChildEntity() { - - } - - ChildEntity(Integer id, String name) { - super( id ); - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "ChildListHolder") - @Table(name = "CHILD_HOLDER") - @Audited - public static class ChildListHolder { - @Id - private Integer id; - @OneToMany - private List children; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/JoinedSubclassWithEmbeddableIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/JoinedSubclassWithEmbeddableIdTest.java deleted file mode 100644 index d030accf166f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/JoinedSubclassWithEmbeddableIdTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.DomainModel; -import org.hibernate.testing.orm.junit.ServiceRegistry; -import org.hibernate.testing.orm.junit.SessionFactory; -import org.hibernate.testing.orm.junit.SessionFactoryScope; -import org.hibernate.testing.orm.junit.Setting; - -import org.junit.jupiter.api.Test; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.Table; -import jakarta.persistence.Version; - -import static org.junit.jupiter.api.Assertions.fail; - -/** - * @author Jan Schatteman - */ -@ServiceRegistry(settings = { - @Setting(name = EnversSettings.DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD, value = "false"), - @Setting(name = EnversSettings.AUDIT_TABLE_SUFFIX, value = "_L"), - @Setting(name = EnversSettings.REVISION_ON_COLLECTION_CHANGE, value = "false") -}) -@DomainModel( - annotatedClasses = { - JoinedSubclassWithEmbeddableIdTest.Parent.class, - JoinedSubclassWithEmbeddableIdTest.Child.class, - JoinedSubclassWithEmbeddableIdTest.ParentEmbeddedId.class - } -) -@SessionFactory -@JiraKey( value = "HHH-15686") -public class JoinedSubclassWithEmbeddableIdTest { - - @Test - public void testColumnOrderingOnChildRevisionTable(SessionFactoryScope scope) { - scope.inTransaction( - session -> { - ParentEmbeddedId chId = new ParentEmbeddedId(); - chId.setId( 2 ); - chId.setOtherId( 21 ); - chId.setCompany( "Acme" ); - - Child c = new Child(); - c.setId( chId ); - c.setFullName( "John Doe" ); - c.setDescription( "I'm a childish entity" ); - - try { - session.persist( c ); - } catch (Exception e) { - fail(e); - } - } - ); - } - - @Entity(name = "Parent") - @Table(name = "T_Parent") - @Inheritance(strategy = InheritanceType.JOINED) - @Audited - public static class Parent { - - @EmbeddedId - private ParentEmbeddedId id; - private String description; - @Version - private int version; - - public void setId(ParentEmbeddedId id) { - this.id = id; - } - - public void setDescription(String description) { - this.description = description; - } - } - - @Embeddable - public static class ParentEmbeddedId { - private Integer id; - private String company; - private Integer otherId; - - public void setId(Integer id) { - this.id = id; - } - - public void setCompany(String company) { - this.company = company; - } - - public void setOtherId(Integer otherId) { - this.otherId = otherId; - } - } - - @Entity(name = "Child") - @Table(name = "T_Child") - @Audited - public static class Child extends Parent { - private String fullName; - - public void setFullName(String fullName) { - this.fullName = fullName; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java deleted file mode 100644 index ff01d6330576..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ParentAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ParentEntity pe = new ParentEntity( id1, "x" ); - em.persist( pe ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - pe = em.find( ParentEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ParentEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - assert getAuditReader().find( ChildEntity.class, id1, 1 ) == null; - assert getAuditReader().find( ChildEntity.class, id1, 2 ) == null; - } - - @Test - public void testHistoryOfParentId1() { - ParentEntity ver1 = new ParentEntity( id1, "x" ); - ParentEntity ver2 = new ParentEntity( id1, "y" ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ParentEntity parentVer1 = new ParentEntity( id1, "x" ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( parentVer1 ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) - .getResultList().size() == 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentEntity.java deleted file mode 100644 index 7e7c15e23380..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public class ParentEntity { - @Id - private Integer id; - - @Basic - private String data; - - public ParentEntity() { - } - - public ParentEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentEntity) ) { - return false; - } - - ParentEntity that = (ParentEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildIngEntity.java deleted file mode 100644 index 966b52777f92..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildIngEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildIngEntity extends ParentNotIngEntity { - @Basic - private Long numVal; - - @ManyToOne - private ReferencedEntity referenced; - - public ChildIngEntity() { - } - - public ChildIngEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public ReferencedEntity getReferenced() { - return referenced; - } - - public void setReferenced(ReferencedEntity referenced) { - this.referenced = referenced; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIngEntity childEntity = (ChildIngEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java deleted file mode 100644 index 2fd7e8e4b8dc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildReferencing extends BaseEnversJPAFunctionalTestCase { - private Integer re_id1; - private Integer re_id2; - private Integer c_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - re_id1 = 1; - re_id2 = 10; - c_id = 100; - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity( re_id1 ); - em.persist( re1 ); - - ReferencedEntity re2 = new ReferencedEntity( re_id2 ); - em.persist( re2 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id2 ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection1() { - assert getAuditReader().find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() == 0; - } - - @Test - public void testHistoryOfReferencedCollection2() { - assert getAuditReader().find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 3 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - } - - @Test - public void testChildHistory() { - assert getAuditReader().find( ChildIngEntity.class, c_id, 1 ) == null; - assert getAuditReader().find( ChildIngEntity.class, c_id, 2 ).getReferenced().equals( - new ReferencedEntity( re_id1 ) - ); - assert getAuditReader().find( ChildIngEntity.class, c_id, 3 ).getReferenced().equals( - new ReferencedEntity( re_id2 ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ParentNotIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ParentNotIngEntity.java deleted file mode 100644 index ce8abc9712eb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ParentNotIngEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public class ParentNotIngEntity { - @Id - private Integer id; - - @Basic - private String data; - - public ParentNotIngEntity() { - } - - public ParentNotIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentNotIngEntity) ) { - return false; - } - - ParentNotIngEntity that = (ParentNotIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentNotIngEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java deleted file mode 100644 index afe52fd87d9d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ReferencedEntity { - @Id - private Integer id; - - @OneToMany(mappedBy = "referenced") - private Set referencing; - - public ReferencedEntity(Integer id) { - this.id = id; - } - - public ReferencedEntity() { - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferencedEntity) ) { - return false; - } - - ReferencedEntity that = (ReferencedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return id; - } - - public String toString() { - return "ReferencedEntity(id = " + getId() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java deleted file mode 100644 index 35f3fb6b4576..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.emptychild; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class EmptyChildAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmptyChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - EmptyChildEntity pe = new EmptyChildEntity( id1, "x" ); - em.persist( pe ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - pe = em.find( EmptyChildEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( EmptyChildEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - EmptyChildEntity ver1 = new EmptyChildEntity( id1, "x" ); - EmptyChildEntity ver2 = new EmptyChildEntity( id1, "y" ); - - assert getAuditReader().find( EmptyChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( EmptyChildEntity.class, id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - EmptyChildEntity childVer1 = new EmptyChildEntity( id1, "x" ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( EmptyChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildEntity.java deleted file mode 100644 index 10b30c7cfd2c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildEntity.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.emptychild; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class EmptyChildEntity extends ParentEntity { - public EmptyChildEntity() { - } - - public EmptyChildEntity(Integer id, String data) { - super( id, data ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/ParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/ParentEntity.java deleted file mode 100644 index 7de9c0ff6fad..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/ParentEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.emptychild; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public abstract class ParentEntity { - @Id - private Integer id; - - @Basic - private String data; - - public ParentEntity() { - } - - public ParentEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentEntity) ) { - return false; - } - - ParentEntity that = (ParentEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/Address.java deleted file mode 100644 index 05ff4fb03896..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/Address.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class Address implements Serializable { - @Id - private Long id; - - private String address1; - - @ManyToOne - private Contact contact; - - public Address() { - } - - public Address(Long id, String address1) { - this.id = id; - this.address1 = address1; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getAddress1() { - return address1; - } - - public void setAddress1(String address1) { - this.address1 = address1; - } - - public Contact getContact() { - return contact; - } - - public void setContact(Contact contact) { - this.contact = contact; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Address) ) { - return false; - } - - Address address = (Address) o; - - if ( address1 != null ? !address1.equals( address.address1 ) : address.address1 != null ) { - return false; - } - if ( id != null ? !id.equals( address.id ) : address.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (address1 != null ? address1.hashCode() : 0); - return result; - } - - public String toString() { - return "Address(id = " + getId() + ", address1 = " + getAddress1() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/Contact.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/Contact.java deleted file mode 100644 index ffa59ccb03d5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/Contact.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation; - -import java.io.Serializable; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public class Contact implements Serializable { - @Id - private Long id; - - private String email; - - @OneToMany(mappedBy = "contact") - private Set
    addresses; - - public Contact() { - } - - public Contact(Long id, String email) { - this.id = id; - this.email = email; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Set
    getAddresses() { - return addresses; - } - - public void setAddresses(Set
    addresses) { - this.addresses = addresses; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java deleted file mode 100644 index fcec5b8d7b3c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotOwnedBidirectional extends BaseEnversJPAFunctionalTestCase { - private Long pc_id; - private Long a1_id; - private Long a2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - pc_id = 1l; - a1_id = 10l; - a2_id = 100l; - - // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); - - Address a1 = new Address( a1_id, "a1" ); - a1.setContact( pc ); - - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc_id ); - - Address a2 = new Address( a2_id, "a2" ); - a2.setContact( pc ); - - em.persist( a2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( Contact.class, pc_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PersonalContact.class, pc_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - } - - @Test - public void testHistoryOfContact() { - assert getAuditReader().find( Contact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( Contact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); - } - - @Test - public void testHistoryOfPersonalContact() { - assert getAuditReader().find( PersonalContact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( PersonalContact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/PersonalContact.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/PersonalContact.java deleted file mode 100644 index 9bbf00754250..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/PersonalContact.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class PersonalContact extends Contact { - private String firstname; - - public PersonalContact() { - } - - public PersonalContact(Long id, String email, String firstname) { - super( id, email ); - this.firstname = firstname; - } - - public String getFirstname() { - return firstname; - } - - public void setFirstname(String firstname) { - this.firstname = firstname; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java deleted file mode 100644 index 08b703ae6ba5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.primarykeyjoin; - -import java.util.Arrays; - -import jakarta.persistence.EntityManager; - -import org.hibernate.mapping.PersistentClass; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildPrimaryKeyJoinAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildPrimaryKeyJoinEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ChildPrimaryKeyJoinEntity ce = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildPrimaryKeyJoinEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildPrimaryKeyJoinEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - ChildPrimaryKeyJoinEntity ver1 = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); - ChildPrimaryKeyJoinEntity ver2 = new ChildPrimaryKeyJoinEntity( id1, "y", 2l ); - - assert getAuditReader().find( ChildPrimaryKeyJoinEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildPrimaryKeyJoinEntity.class, id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ChildPrimaryKeyJoinEntity childVer1 = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); - - assert getAuditReader().createQuery() - .forEntitiesAtRevision( ChildPrimaryKeyJoinEntity.class, 1 ) - .getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - } - - @Test - public void testChildIdColumnName() { - // Hibernate now sorts columns that are part of the key and therefore this test needs to test - // for the existence of the specific key column rather than the expectation that is exists at - // a specific order in the iterator. - final PersistentClass persistentClass = metadata().getEntityBinding( ChildPrimaryKeyJoinEntity.class.getName() + "_AUD" ); - Assert.assertNotNull( getColumnFromIteratorByName( persistentClass.getKey().getSelectables(), "other_id" ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinEntity.java deleted file mode 100644 index b265230cb9bc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinEntity.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.primarykeyjoin; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.PrimaryKeyJoinColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -@PrimaryKeyJoinColumn(name = "other_id") -public class ChildPrimaryKeyJoinEntity extends ParentEntity { - @Basic - private Long namVal; - - public ChildPrimaryKeyJoinEntity() { - } - - public ChildPrimaryKeyJoinEntity(Integer id, String data, Long namVal) { - super( id, data ); - this.namVal = namVal; - } - - public Long getNumVal() { - return namVal; - } - - public void setNumVal(Long namVal) { - this.namVal = namVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildPrimaryKeyJoinEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildPrimaryKeyJoinEntity childPrimaryKeyJoinEntity = (ChildPrimaryKeyJoinEntity) o; - - //noinspection RedundantIfStatement - if ( namVal != null ? - !namVal.equals( childPrimaryKeyJoinEntity.namVal ) : - childPrimaryKeyJoinEntity.namVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (namVal != null ? namVal.hashCode() : 0); - return result; - } - - public String toString() { - return "CPKJE(id = " + getId() + ", data = " + getData() + ", namVal = " + namVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ChildIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ChildIngEntity.java deleted file mode 100644 index 3128d494ca5e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ChildIngEntity.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildIngEntity extends ParentIngEntity { - @Basic - private Long numVal; - - public ChildIngEntity() { - } - - public ChildIngEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIngEntity childEntity = (ChildIngEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentIngEntity.java deleted file mode 100644 index eadf9d3347bf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentIngEntity.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public class ParentIngEntity { - @Id - private Integer id; - - @Basic - private String data; - - @ManyToOne - private ReferencedEntity referenced; - - public ParentIngEntity() { - } - - public ParentIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ReferencedEntity getReferenced() { - return referenced; - } - - public void setReferenced(ReferencedEntity referenced) { - this.referenced = referenced; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentIngEntity) ) { - return false; - } - - ParentIngEntity that = (ParentIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentIngEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java deleted file mode 100644 index 73e82e8fa3a9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ParentReferencingChildTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-3843") -public class ParentReferencingChildTest extends BaseEnversJPAFunctionalTestCase { - Person expLukaszRev1 = null; - Role expAdminRev1 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, Role.class, RightsSubject.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Person lukasz = new Person(); - lukasz.setName( "Lukasz" ); - lukasz.setGroup( "IT" ); - em.persist( lukasz ); - Role admin = new Role(); - admin.setName( "Admin" ); - admin.setGroup( "Confidential" ); - lukasz.getRoles().add( admin ); - admin.getMembers().add( lukasz ); - em.persist( admin ); - em.getTransaction().commit(); - - expLukaszRev1 = new Person( lukasz.getId(), "IT", "Lukasz" ); - expAdminRev1 = new Role( admin.getId(), "Confidential", "Admin" ); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, expLukaszRev1.getId() ) ); - Assert.assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - RightsSubject.class, - expLukaszRev1.getId() - ) - ); - - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Role.class, expAdminRev1.getId() ) ); - Assert.assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - RightsSubject.class, - expAdminRev1.getId() - ) - ); - } - - @Test - public void testHistoryOfLukasz() { - Person lukaszRev1 = getAuditReader().find( Person.class, expLukaszRev1.getId(), 1 ); - RightsSubject rightsSubjectLukaszRev1 = getAuditReader().find( RightsSubject.class, expLukaszRev1.getId(), 1 ); - - Assert.assertEquals( expLukaszRev1, lukaszRev1 ); - Assert.assertEquals( TestTools.makeSet( expAdminRev1 ), lukaszRev1.getRoles() ); - Assert.assertEquals( TestTools.makeSet( expAdminRev1 ), rightsSubjectLukaszRev1.getRoles() ); - } - - @Test - public void testHistoryOfAdmin() { - Role adminRev1 = getAuditReader().find( Role.class, expAdminRev1.getId(), 1 ); - - Assert.assertEquals( expAdminRev1, adminRev1 ); - Assert.assertEquals( TestTools.makeSet( expLukaszRev1 ), adminRev1.getMembers() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/Person.java deleted file mode 100644 index fbf05cf0fb6b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/Person.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Person extends RightsSubject { - private String name; - - public Person() { - } - - public Person(Long id, String group, String name) { - super( id, group ); - this.name = name; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Person) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - Person person = (Person) o; - - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Person(" + super.toString() + ", name = " + name + ")"; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java deleted file mode 100644 index 8ca6faaf1d93..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class PolymorphicCollection extends BaseEnversJPAFunctionalTestCase { - private Integer ed_id1; - private Integer c_id; - private Integer p_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ed_id1 = 1; - p_id = 10; - c_id = 100; - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re = new ReferencedEntity( ed_id1 ); - em.persist( re ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ParentIngEntity pie = new ParentIngEntity( p_id, "x" ); - pie.setReferenced( re ); - em.persist( pie ); - p_id = pie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, ed_id1 ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( ParentIngEntity.class, p_id ) ); - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection() { - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 3 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ReferencedEntity.java deleted file mode 100644 index d6d857f4d706..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/ReferencedEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ReferencedEntity { - @Id - private Integer id; - - @OneToMany(mappedBy = "referenced") - private Set referencing; - - public ReferencedEntity() { - } - - public ReferencedEntity(Integer id) { - this.id = id; - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferencedEntity) ) { - return false; - } - - ReferencedEntity that = (ReferencedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return id; - } - - public String toString() { - return "ReferencedEntity(id = " + getId() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/RightsSubject.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/RightsSubject.java deleted file mode 100644 index ccea9c190f5a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/RightsSubject.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public class RightsSubject { - @Id - @GeneratedValue - private Long id; - - @Column(name = "APP_GROUP") - private String group; - - @ManyToMany(mappedBy = "members") - private Set roles = new HashSet(); - - public RightsSubject() { - } - - public RightsSubject(Long id, String group) { - this.id = id; - this.group = group; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RightsSubject) ) { - return false; - } - - RightsSubject that = (RightsSubject) o; - - if ( group != null ? !group.equals( that.group ) : that.group != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (group != null ? group.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "RightsSubject(id = " + id + ", group = " + group + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Set getRoles() { - return roles; - } - - public void setRoles(Set roles) { - this.roles = roles; - } - - public String getGroup() { - return group; - } - - public void setGroup(String group) { - this.group = group; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/Role.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/Role.java deleted file mode 100644 index bdf8577da3f3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/Role.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "APP_ROLE") -@Audited -public class Role extends RightsSubject { - private String name; - - @ManyToMany - private Set members = new HashSet(); - - public Role() { - } - - public Role(Long id, String group, String name) { - super( id, group ); - this.name = name; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Role) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - Role role = (Role) o; - - if ( name != null ? !name.equals( role.name ) : role.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Role(" + super.toString() + ", name = " + name + ")"; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getMembers() { - return members; - } - - public void setMembers(Set members) { - this.members = members; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/AbstractContainedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/AbstractContainedEntity.java deleted file mode 100644 index 902e39245492..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/AbstractContainedEntity.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "AbstrContained") -@Audited -@Inheritance(strategy = InheritanceType.JOINED) -public abstract class AbstractContainedEntity { - @Id - @GeneratedValue - private Long id; - - public AbstractContainedEntity() { - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AbstractContainedEntity) ) { - return false; - } - - AbstractContainedEntity that = (AbstractContainedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/AbstractSetEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/AbstractSetEntity.java deleted file mode 100644 index c13149cafd29..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/AbstractSetEntity.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation.unidirectional; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "AbstrSet") -@Inheritance(strategy = InheritanceType.JOINED) -@Audited -public abstract class AbstractSetEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToMany - private Set entities = new HashSet(); - - public AbstractSetEntity() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getEntities() { - return entities; - } - - public void setEntities(Set entities) { - this.entities = entities; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/ContainedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/ContainedEntity.java deleted file mode 100644 index 350f6a2e76f4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/ContainedEntity.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "Contained") -@Audited -public class ContainedEntity extends AbstractContainedEntity { -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/SetEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/SetEntity.java deleted file mode 100644 index e55e5d175ca8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/SetEntity.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation.unidirectional; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class SetEntity extends AbstractSetEntity { -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java deleted file mode 100644 index 585667339478..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.joined.relation.unidirectional; - -import java.util.Arrays; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class UnidirectionalDoubleAbstract extends BaseEnversJPAFunctionalTestCase { - private Long cce1_id; - private Integer cse1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AbstractContainedEntity.class, - AbstractSetEntity.class, - ContainedEntity.class, - SetEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - - ContainedEntity cce1 = new ContainedEntity(); - em.persist( cce1 ); - - SetEntity cse1 = new SetEntity(); - cse1.getEntities().add( cce1 ); - em.persist( cse1 ); - - em.getTransaction().commit(); - - cce1_id = cce1.getId(); - cse1_id = cse1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( ContainedEntity.class, cce1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetEntity.class, cse1_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection() { - ContainedEntity cce1 = getEntityManager().find( ContainedEntity.class, cce1_id ); - - Set entities = getAuditReader().find( SetEntity.class, cse1_id, 1 ).getEntities(); - assert entities.size() == 1; - assert entities.iterator().next() instanceof ContainedEntity; - assert entities.contains( cce1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java deleted file mode 100644 index d37c632c3e01..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed; - -import java.util.Arrays; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.AbstractActivity; -import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.AbstractCheckActivity; -import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.Activity; -import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.ActivityId; -import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.CheckInActivity; -import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.NormalActivity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Michal Skowronek (mskowr at o2 pl) - */ -public class MixedInheritanceStrategiesEntityTest extends BaseEnversJPAFunctionalTestCase { - - private ActivityId id2; - private ActivityId id1; - private ActivityId id3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AbstractActivity.class, - AbstractCheckActivity.class, - CheckInActivity.class, - NormalActivity.class - }; - } - - @Test - @Priority(10) - public void initData() { - NormalActivity normalActivity = new NormalActivity(); - id1 = new ActivityId( 1, 2 ); - normalActivity.setId( id1 ); - normalActivity.setSequenceNumber( 1 ); - - // Revision 1 - getEntityManager().getTransaction().begin(); - - getEntityManager().persist( normalActivity ); - - getEntityManager().getTransaction().commit(); - // Revision 2 - getEntityManager().getTransaction().begin(); - - normalActivity = getEntityManager().find( NormalActivity.class, id1 ); - CheckInActivity checkInActivity = new CheckInActivity(); - id2 = new ActivityId( 2, 3 ); - checkInActivity.setId( id2 ); - checkInActivity.setSequenceNumber( 0 ); - checkInActivity.setDurationInMinutes( 30 ); - checkInActivity.setRelatedActivity( normalActivity ); - - getEntityManager().persist( checkInActivity ); - - getEntityManager().getTransaction().commit(); - - // Revision 3 - normalActivity = new NormalActivity(); - id3 = new ActivityId( 3, 4 ); - normalActivity.setId( id3 ); - normalActivity.setSequenceNumber( 2 ); - - getEntityManager().getTransaction().begin(); - - getEntityManager().persist( normalActivity ); - - getEntityManager().getTransaction().commit(); - - // Revision 4 - getEntityManager().getTransaction().begin(); - - normalActivity = getEntityManager().find( NormalActivity.class, id3 ); - checkInActivity = getEntityManager().find( CheckInActivity.class, id2 ); - checkInActivity.setRelatedActivity( normalActivity ); - - getEntityManager().merge( checkInActivity ); - - getEntityManager().getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( NormalActivity.class, id1 ) ); - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( NormalActivity.class, id3 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( CheckInActivity.class, id2 ) ); - } - - @Test - public void testCurrentStateOfCheckInActivity() { - - final CheckInActivity checkInActivity = getEntityManager().find( CheckInActivity.class, id2 ); - final NormalActivity normalActivity = getEntityManager().find( NormalActivity.class, id3 ); - - assertEquals( id2, checkInActivity.getId() ); - assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); - assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); - final Activity relatedActivity = checkInActivity.getRelatedActivity(); - assertEquals( normalActivity.getId(), relatedActivity.getId() ); - assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); - } - - @Test - public void testCheckCurrentStateOfNormalActivities() throws Exception { - final NormalActivity normalActivity1 = getEntityManager().find( NormalActivity.class, id1 ); - final NormalActivity normalActivity2 = getEntityManager().find( NormalActivity.class, id3 ); - - assertEquals( id1, normalActivity1.getId() ); - assertEquals( 1, normalActivity1.getSequenceNumber().intValue() ); - assertEquals( id3, normalActivity2.getId() ); - assertEquals( 2, normalActivity2.getSequenceNumber().intValue() ); - } - - @Test - public void doTestFirstRevisionOfCheckInActivity() throws Exception { - CheckInActivity checkInActivity = getAuditReader().find( CheckInActivity.class, id2, 2 ); - NormalActivity normalActivity = getAuditReader().find( NormalActivity.class, id1, 2 ); - - assertEquals( id2, checkInActivity.getId() ); - assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); - assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); - Activity relatedActivity = checkInActivity.getRelatedActivity(); - assertEquals( normalActivity.getId(), relatedActivity.getId() ); - assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); - } - - @Test - public void doTestSecondRevisionOfCheckInActivity() throws Exception { - CheckInActivity checkInActivity = getAuditReader().find( CheckInActivity.class, id2, 4 ); - NormalActivity normalActivity = getAuditReader().find( NormalActivity.class, id3, 4 ); - - assertEquals( id2, checkInActivity.getId() ); - assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); - assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); - Activity relatedActivity = checkInActivity.getRelatedActivity(); - assertEquals( normalActivity.getId(), relatedActivity.getId() ); - assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/AbstractActivity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/AbstractActivity.java deleted file mode 100644 index 584c38e38f8d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/AbstractActivity.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed.entities; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -@Audited -@Entity -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -public abstract class AbstractActivity implements Activity { - @EmbeddedId - private ActivityId id; - - private Integer sequenceNumber; - - public ActivityId getId() { - return id; - } - - public void setId(ActivityId id) { - this.id = id; - } - - public Integer getSequenceNumber() { - return sequenceNumber; - } - - public void setSequenceNumber(Integer sequenceNumber) { - this.sequenceNumber = sequenceNumber; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/AbstractCheckActivity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/AbstractCheckActivity.java deleted file mode 100644 index 5245cd8bdef3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/AbstractCheckActivity.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed.entities; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.PrimaryKeyJoinColumn; -import jakarta.persistence.SecondaryTable; - -import org.hibernate.envers.Audited; - -@Audited -@Entity -@DiscriminatorValue(value = "CHECK") -@SecondaryTable(name = "ACTIVITY_CHECK", - pkJoinColumns = { - @PrimaryKeyJoinColumn(name = "ACTIVITY_ID"), - @PrimaryKeyJoinColumn(name = "ACTIVITY_ID2") - }) -public abstract class AbstractCheckActivity extends AbstractActivity { - @Column(table = "ACTIVITY_CHECK") - private Integer durationInMinutes; - @ManyToOne(targetEntity = AbstractActivity.class, cascade = CascadeType.MERGE, fetch = FetchType.LAZY) - @JoinColumns({ - @JoinColumn(table = "ACTIVITY_CHECK", referencedColumnName = "id"), - @JoinColumn(table = "ACTIVITY_CHECK", referencedColumnName = "id2") - }) - private Activity relatedActivity; - - public Integer getDurationInMinutes() { - return durationInMinutes; - } - - public void setDurationInMinutes(Integer durationInMinutes) { - this.durationInMinutes = durationInMinutes; - } - - public Activity getRelatedActivity() { - return relatedActivity; - } - - public void setRelatedActivity(Activity relatedActivity) { - this.relatedActivity = relatedActivity; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/Activity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/Activity.java deleted file mode 100644 index 31afeede820e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/Activity.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed.entities; - -import java.io.Serializable; - -public interface Activity extends Serializable { - ActivityId getId(); - - Integer getSequenceNumber(); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/ActivityId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/ActivityId.java deleted file mode 100644 index f7b85fead413..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/ActivityId.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed.entities; - -import java.io.Serializable; -import jakarta.persistence.Embeddable; - -@Embeddable -public class ActivityId implements Serializable { - private Integer id; - private Integer id2; - - public ActivityId() { - } - - public ActivityId(int i, int i1) { - id = i; - id2 = i1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - @Override - public boolean equals(Object obj) { - if ( obj == null ) { - return true; - } - if ( !(obj instanceof ActivityId) ) { - return false; - } - ActivityId id = (ActivityId) obj; - return getId().equals( id.getId() ) && getId2().equals( id.getId2() ); - } - - @Override - public int hashCode() { - int result = getId().hashCode(); - result = 31 * result + getId2().hashCode(); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/CheckInActivity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/CheckInActivity.java deleted file mode 100644 index 9d32000ac088..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/CheckInActivity.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed.entities; - -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -@Audited -@Entity -@DiscriminatorValue(value = "CHECK_IN") -public class CheckInActivity extends AbstractCheckActivity { - - @Override - public boolean equals(Object obj) { - if ( obj == this ) { - return true; - } - if ( !(obj instanceof CheckInActivity) ) { - return false; - } - CheckInActivity checkInActivity = (CheckInActivity) obj; - return getId().equals( checkInActivity.getId() ); - } - - @Override - public int hashCode() { - return getId().hashCode(); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/NormalActivity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/NormalActivity.java deleted file mode 100644 index f048d0760e43..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/entities/NormalActivity.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.mixed.entities; - -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -@Audited -@Entity -@DiscriminatorValue(value = "NORMAL") -public class NormalActivity extends AbstractActivity { - - @Override - public boolean equals(Object obj) { - if ( obj == this ) { - return true; - } - if ( !(obj instanceof NormalActivity) ) { - return false; - } - NormalActivity normalActivity = (NormalActivity) obj; - return getId().equals( normalActivity.getId() ); - } - - @Override - public int hashCode() { - return getId().hashCode(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java deleted file mode 100644 index 6c6dec6d8971..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( "x", 1l ); - em.persist( ce ); - id1 = ce.getId(); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - ChildEntity ver1 = new ChildEntity( id1, "x", 1l ); - ChildEntity ver2 = new ChildEntity( id1, "y", 2l ); - - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildEntity.java deleted file mode 100644 index f33017809d7f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single; - -import jakarta.persistence.Basic; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@DiscriminatorValue("2") -@Audited -public class ChildEntity extends ParentEntity { - @Basic - private Long numVal; - - public ChildEntity() { - } - - public ChildEntity(String data, Long numVal) { - super( data ); - this.numVal = numVal; - } - - public ChildEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildEntity childEntity = (ChildEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildPrimaryKeyJoinEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java deleted file mode 100644 index e080a6aff15f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ParentAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - ParentEntity pe = new ParentEntity( "x" ); - em.persist( pe ); - id1 = pe.getId(); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - pe = em.find( ParentEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ParentEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - assert getAuditReader().find( ChildEntity.class, id1, 1 ) == null; - assert getAuditReader().find( ChildEntity.class, id1, 2 ) == null; - } - - @Test - public void testHistoryOfParentId1() { - ParentEntity ver1 = new ParentEntity( id1, "x" ); - ParentEntity ver2 = new ParentEntity( id1, "y" ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ParentEntity parentVer1 = new ParentEntity( id1, "x" ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( parentVer1 ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) - .getResultList().size() == 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentEntity.java deleted file mode 100644 index 8a8f6b952111..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentEntity.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single; - -import jakarta.persistence.Basic; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.INTEGER) -@DiscriminatorValue("1") -@Audited -public class ParentEntity { - @Id - @GeneratedValue - private Integer id; - - @Basic - private String data; - - public ParentEntity() { - } - - public ParentEntity(String data) { - this.data = data; - } - - public ParentEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentEntity) ) { - return false; - } - - ParentEntity that = (ParentEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildIngEntity.java deleted file mode 100644 index 3fad3c0ef58a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildIngEntity.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.childrelation; - -import jakarta.persistence.Basic; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@DiscriminatorValue("2") -@Audited -public class ChildIngEntity extends ParentNotIngEntity { - @Basic - private Long numVal; - - @ManyToOne - private ReferencedEntity referenced; - - public ChildIngEntity() { - } - - public ChildIngEntity(String data, Long numVal) { - super( data ); - this.numVal = numVal; - } - - public ChildIngEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public ReferencedEntity getReferenced() { - return referenced; - } - - public void setReferenced(ReferencedEntity referenced) { - this.referenced = referenced; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIngEntity childEntity = (ChildIngEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java deleted file mode 100644 index 48266a93fcd7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.childrelation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildReferencing extends BaseEnversJPAFunctionalTestCase { - private Integer re_id1; - private Integer re_id2; - private Integer c_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity(); - em.persist( re1 ); - re_id1 = re1.getId(); - - ReferencedEntity re2 = new ReferencedEntity(); - em.persist( re2 ); - re_id2 = re2.getId(); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id2 ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection1() { - assert getAuditReader().find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() == 0; - } - - @Test - public void testHistoryOfReferencedCollection2() { - assert getAuditReader().find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 3 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - } - - @Test - public void testChildHistory() { - assert getAuditReader().find( ChildIngEntity.class, c_id, 1 ) == null; - assert getAuditReader().find( ChildIngEntity.class, c_id, 2 ).getReferenced().equals( - new ReferencedEntity( re_id1 ) - ); - assert getAuditReader().find( ChildIngEntity.class, c_id, 3 ).getReferenced().equals( - new ReferencedEntity( re_id2 ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ParentNotIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ParentNotIngEntity.java deleted file mode 100644 index 06185b4fb679..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ParentNotIngEntity.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.childrelation; - -import jakarta.persistence.Basic; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.INTEGER) -@DiscriminatorValue("1") -@Audited -public class ParentNotIngEntity { - @Id - @GeneratedValue - private Integer id; - - @Basic - private String data; - - public ParentNotIngEntity() { - } - - public ParentNotIngEntity(String data) { - this.data = data; - } - - public ParentNotIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentNotIngEntity) ) { - return false; - } - - ParentNotIngEntity that = (ParentNotIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentNotIngEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java deleted file mode 100644 index d04b1d9e7504..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.childrelation; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ReferencedEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToMany(mappedBy = "referenced") - private Set referencing; - - public ReferencedEntity(Integer id) { - this.id = id; - } - - public ReferencedEntity() { - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferencedEntity) ) { - return false; - } - - ReferencedEntity that = (ReferencedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ChildEntity.java deleted file mode 100644 index b073f3d1d6a5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ChildEntity.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula; - -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@DiscriminatorValue(ClassTypeEntity.CHILD_TYPE) -@Audited -public class ChildEntity extends ParentEntity { - private String specificData; - - public ChildEntity() { - } - - public ChildEntity(Long typeId, String data, String specificData) { - super( typeId, data ); - this.specificData = specificData; - } - - public ChildEntity(Long id, Long typeId, String data, String specificData) { - super( id, typeId, data ); - this.specificData = specificData; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildEntity that = (ChildEntity) o; - - if ( specificData != null ? !specificData.equals( that.specificData ) : that.specificData != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (specificData != null ? specificData.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildEntity(id = " + id + ", typeId = " + typeId + ", data = " + data + ", specificData = " + specificData + ")"; - } - - public String getSpecificData() { - return specificData; - } - - public void setSpecificData(String specificData) { - this.specificData = specificData; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ClassTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ClassTypeEntity.java deleted file mode 100644 index 8712d7ca66f5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ClassTypeEntity.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class ClassTypeEntity { - public static final String PARENT_TYPE = "Parent"; - public static final String CHILD_TYPE = "Child"; - - @Id - @GeneratedValue - private Long id; - - private String type; - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ClassTypeEntity) ) { - return false; - } - - ClassTypeEntity that = (ClassTypeEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( type != null ? !type.equals( that.type ) : that.type != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - result = 31 * result + (type != null ? type.hashCode() : 0); - return result; - } - - public String toString() { - return "ClassTypeEntity(id = " + id + ", type = " + type + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java deleted file mode 100644 index 67435f62b9a4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula; - -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Formula; -import org.hibernate.mapping.PersistentClass; - -import org.hibernate.testing.orm.junit.SkipForDialect; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class DiscriminatorFormulaTest extends BaseEnversJPAFunctionalTestCase { - private PersistentClass parentAudit = null; - private ChildEntity childVer1 = null; - private ChildEntity childVer2 = null; - private ParentEntity parentVer1 = null; - private ParentEntity parentVer2 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ClassTypeEntity.class, ParentEntity.class, ChildEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - parentAudit = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula.ParentEntity_AUD" - ); - - EntityManager em = getEntityManager(); - - // Child entity type - em.getTransaction().begin(); - ClassTypeEntity childType = new ClassTypeEntity(); - childType.setType( ClassTypeEntity.CHILD_TYPE ); - em.persist( childType ); - Long childTypeId = childType.getId(); - em.getTransaction().commit(); - - // Parent entity type - em.getTransaction().begin(); - ClassTypeEntity parentType = new ClassTypeEntity(); - parentType.setType( ClassTypeEntity.PARENT_TYPE ); - em.persist( parentType ); - Long parentTypeId = parentType.getId(); - em.getTransaction().commit(); - - // Child Rev 1 - em.getTransaction().begin(); - ChildEntity child = new ChildEntity( childTypeId, "Child data", "Child specific data" ); - em.persist( child ); - Long childId = child.getId(); - em.getTransaction().commit(); - - // Parent Rev 2 - em.getTransaction().begin(); - ParentEntity parent = new ParentEntity( parentTypeId, "Parent data" ); - em.persist( parent ); - Long parentId = parent.getId(); - em.getTransaction().commit(); - - // Child Rev 3 - em.getTransaction().begin(); - child = em.find( ChildEntity.class, childId ); - child.setData( "Child data modified" ); - em.getTransaction().commit(); - - // Parent Rev 4 - em.getTransaction().begin(); - parent = em.find( ParentEntity.class, parentId ); - parent.setData( "Parent data modified" ); - em.getTransaction().commit(); - - childVer1 = new ChildEntity( childId, childTypeId, "Child data", "Child specific data" ); - childVer2 = new ChildEntity( childId, childTypeId, "Child data modified", "Child specific data" ); - parentVer1 = new ParentEntity( parentId, parentTypeId, "Parent data" ); - parentVer2 = new ParentEntity( parentId, parentTypeId, "Parent data modified" ); - } - - @Test - public void testDiscriminatorFormulaInAuditTable() { - assert parentAudit.getDiscriminator().hasFormula(); - Iterator iterator = parentAudit.getDiscriminator().getSelectables().iterator(); - while ( iterator.hasNext() ) { - Object o = iterator.next(); - if ( o instanceof Formula ) { - Formula formula = (Formula) o; - Assert.assertEquals( ParentEntity.DISCRIMINATOR_QUERY, formula.getText() ); - return; - } - } - assert false; - } - - @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 3 ), getAuditReader().getRevisions( - ChildEntity.class, - childVer1.getId() - ) - ); - Assert.assertEquals( - Arrays.asList( 2, 4 ), getAuditReader().getRevisions( - ParentEntity.class, - parentVer1.getId() - ) - ); - } - - @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testHistoryOfParent() { - Assert.assertEquals( parentVer1, getAuditReader().find( ParentEntity.class, parentVer1.getId(), 2 ) ); - Assert.assertEquals( parentVer2, getAuditReader().find( ParentEntity.class, parentVer2.getId(), 4 ) ); - } - - @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testHistoryOfChild() { - Assert.assertEquals( childVer1, getAuditReader().find( ChildEntity.class, childVer1.getId(), 1 ) ); - Assert.assertEquals( childVer2, getAuditReader().find( ChildEntity.class, childVer2.getId(), 3 ) ); - } - - @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testPolymorphicQuery() { - Assert.assertEquals( - childVer1, getAuditReader().createQuery() - .forEntitiesAtRevision( ChildEntity.class, 1 ) - .getSingleResult() - ); - Assert.assertEquals( - childVer1, getAuditReader().createQuery() - .forEntitiesAtRevision( ParentEntity.class, 1 ) - .getSingleResult() - ); - - List childEntityRevisions = getAuditReader().createQuery().forRevisionsOfEntity( - ChildEntity.class, - true, - false - ).getResultList(); - Assert.assertEquals( Arrays.asList( childVer1, childVer2 ), childEntityRevisions ); - - List parentEntityRevisions = getAuditReader().createQuery().forRevisionsOfEntity( - ParentEntity.class, - true, - false - ).getResultList(); - Assert.assertEquals( Arrays.asList( childVer1, parentVer1, childVer2, parentVer2 ), parentEntityRevisions ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ParentEntity.java deleted file mode 100644 index 8856ab270a3b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/ParentEntity.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula; - -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.DiscriminatorFormula; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@DiscriminatorFormula(ParentEntity.DISCRIMINATOR_QUERY) -@DiscriminatorValue(ClassTypeEntity.PARENT_TYPE) -@Audited -public class ParentEntity { - public static final String DISCRIMINATOR_QUERY = "(SELECT c.type FROM ClassTypeEntity c WHERE c.id = typeId)"; - - @Id - @GeneratedValue - protected Long id; - - protected Long typeId; - - protected String data; - - public ParentEntity() { - } - - public ParentEntity(Long typeId, String data) { - this.typeId = typeId; - this.data = data; - } - - public ParentEntity(Long id, Long typeId, String data) { - this.id = id; - this.typeId = typeId; - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentEntity) ) { - return false; - } - - ParentEntity that = (ParentEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( typeId != null ? !typeId.equals( that.typeId ) : that.typeId != null ) { - return false; - } - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (typeId != null ? typeId.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentEntity(id = " + id + ", typeId = " + typeId + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getTypeId() { - return typeId; - } - - public void setTypeId(Long typeId) { - this.typeId = typeId; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/Address.java deleted file mode 100644 index 0bf89ab08386..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/Address.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.notownedrelation; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class Address implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String address1; - - @ManyToOne - private Contact contact; - - public Address() { - } - - public Address(Long id, String address1) { - this.id = id; - this.address1 = address1; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getAddress1() { - return address1; - } - - public void setAddress1(String address1) { - this.address1 = address1; - } - - public Contact getContact() { - return contact; - } - - public void setContact(Contact contact) { - this.contact = contact; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Address) ) { - return false; - } - - Address address = (Address) o; - - if ( address1 != null ? !address1.equals( address.address1 ) : address.address1 != null ) { - return false; - } - if ( id != null ? !id.equals( address.id ) : address.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (address1 != null ? address1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/Contact.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/Contact.java deleted file mode 100644 index a9e175af0b5d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/Contact.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.notownedrelation; - -import java.io.Serializable; -import java.util.Set; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -@Entity -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@DiscriminatorValue("Contact") -@DiscriminatorColumn(name = "contactType", discriminatorType = jakarta.persistence.DiscriminatorType.STRING) -@Audited -public class Contact implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String email; - - @OneToMany(mappedBy = "contact") - private Set
    addresses; - - public Contact() { - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Set
    getAddresses() { - return addresses; - } - - public void setAddresses(Set
    addresses) { - this.addresses = addresses; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java deleted file mode 100644 index bdbc092cb4f7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.notownedrelation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotOwnedBidirectional extends BaseEnversJPAFunctionalTestCase { - private Long pc_id; - private Long a1_id; - private Long a2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact(); - pc.setEmail( "e" ); - pc.setFirstname( "f" ); - - Address a1 = new Address(); - a1.setAddress1( "a1" ); - a1.setContact( pc ); - - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc.getId() ); - - Address a2 = new Address(); - a2.setAddress1( "a2" ); - a2.setContact( pc ); - - em.persist( a2 ); - - em.getTransaction().commit(); - - // - - pc_id = pc.getId(); - a1_id = a1.getId(); - a2_id = a2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( Contact.class, pc_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PersonalContact.class, pc_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - } - - @Test - public void testHistoryOfContact() { - assert getAuditReader().find( Contact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( Contact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); - } - - @Test - public void testHistoryOfPersonalContact() { - assert getAuditReader().find( PersonalContact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( PersonalContact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/PersonalContact.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/PersonalContact.java deleted file mode 100644 index ae64e660139d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/PersonalContact.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.notownedrelation; - -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -@Entity -@DiscriminatorValue("PersonalContact") -@Audited -public class PersonalContact extends Contact { - private String firstname; - - public String getFirstname() { - return firstname; - } - - public void setFirstname(String firstname) { - this.firstname = firstname; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ChildIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ChildIngEntity.java deleted file mode 100644 index e66baf1ccf91..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ChildIngEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.relation; - -import jakarta.persistence.Basic; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@DiscriminatorValue("2") -@Audited -public class ChildIngEntity extends ParentIngEntity { - @Basic - private Long numVal; - - public ChildIngEntity() { - } - - public ChildIngEntity(String data, Long numVal) { - super( data ); - this.numVal = numVal; - } - - public ChildIngEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIngEntity childEntity = (ChildIngEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ParentIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ParentIngEntity.java deleted file mode 100644 index 203267b6c3ca..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ParentIngEntity.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.relation; - -import jakarta.persistence.Basic; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.SINGLE_TABLE) -@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.INTEGER) -@DiscriminatorValue("1") -@Audited -public class ParentIngEntity { - @Id - @GeneratedValue - private Integer id; - - @Basic - private String data; - - @ManyToOne - private ReferencedEntity referenced; - - public ParentIngEntity() { - } - - public ParentIngEntity(String data) { - this.data = data; - } - - public ParentIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ReferencedEntity getReferenced() { - return referenced; - } - - public void setReferenced(ReferencedEntity referenced) { - this.referenced = referenced; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentIngEntity) ) { - return false; - } - - ParentIngEntity that = (ParentIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentIngEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java deleted file mode 100644 index d5057aee46c0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.relation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class PolymorphicCollection extends BaseEnversJPAFunctionalTestCase { - private Integer ed_id1; - private Integer c_id; - private Integer p_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re = new ReferencedEntity(); - em.persist( re ); - ed_id1 = re.getId(); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ParentIngEntity pie = new ParentIngEntity( "x" ); - pie.setReferenced( re ); - em.persist( pie ); - p_id = pie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ChildIngEntity cie = new ChildIngEntity( "y", 1l ); - cie.setReferenced( re ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, ed_id1 ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( ParentIngEntity.class, p_id ) ); - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection() { - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 3 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java deleted file mode 100644 index 60e95dcd5ce1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.relation; - -import java.util.Arrays; -import java.util.Set; - -import jakarta.persistence.Column; -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; - -/** - * Tests that after the removal of an entity that maintains a polymorphic relation that - * the {@code AuditReader} queries return the correct polymorphic type for revisions. - *

    - * Previously, this test would have returned {@link EmployeeType} when looking up the - * entity associated to revision 3 of typeId; however after the fix it properly will - * return {@link SalaryEmployeeType} instances instead. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7249") -public class PolymorphicRemovalTest extends BaseEnversJPAFunctionalTestCase { - private Integer typeId; - private Integer employeeId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Employee.class, EmployeeType.class, SalaryEmployeeType.class }; - } - - @Test - @Priority(10) - public void initData() { - // revision 1 - this.typeId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - SalaryEmployeeType type = new SalaryEmployeeType(); - type.setData( "salaried" ); - entityManager.persist( type ); - return type.getId(); - } ); - // revision 2 - this.employeeId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - EmployeeType type = entityManager.find( EmployeeType.class, typeId ); - Employee employee = new Employee(); - employee.setType( type ); - entityManager.persist( employee ); - return employee.getId(); - } ); - // revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Employee employee = entityManager.find( Employee.class, employeeId ); - entityManager.remove( employee ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals(Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( EmployeeType.class, typeId ) ); - assertEquals( Arrays.asList( 2, 3 ), getAuditReader().getRevisions( Employee.class, employeeId ) ); - } - - @Test - public void testRevisionHistoryPayment() { - final EmployeeType rev1 = getAuditReader().find( EmployeeType.class, typeId, 1 ); - assertTyping( SalaryEmployeeType.class, rev1 ); - assertEquals( "SALARY", rev1.getType() ); - final EmployeeType rev2 = getAuditReader().find( EmployeeType.class, typeId, 2 ); - assertTyping( SalaryEmployeeType.class, rev2 ); - assertEquals( "SALARY", rev2.getType() ); - final EmployeeType rev3 = getAuditReader().find( EmployeeType.class, typeId, 3 ); - assertTyping( SalaryEmployeeType.class, rev3 ); - assertEquals( "SALARY", rev3.getType() ); - } - - @Entity(name = "EmployeeType") - @Inheritance(strategy = InheritanceType.SINGLE_TABLE) - @DiscriminatorColumn(name = "TYPE") - @DiscriminatorValue("UNKNOWN") - @Audited - public static class EmployeeType { - @Id - @GeneratedValue - private Integer id; - @OneToMany(mappedBy = "type") - private Set employees; - // used to expose the discriminator value for assertion checking - @Column(name = "TYPE", insertable = false, updatable = false, nullable = false, length = 31) - private String type; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getEmployees() { - return employees; - } - - public void setEmployees(Set employees) { - this.employees = employees; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - } - - @Entity(name = "SalaryEmployee") - @DiscriminatorValue("SALARY") - @Audited - public static class SalaryEmployeeType extends EmployeeType { - private String data; - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - } - - @Entity(name = "Employee") - @Audited - public static class Employee { - @Id - @GeneratedValue - private Integer id; - private String name; - @ManyToOne(fetch = FetchType.LAZY) - private EmployeeType type; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public EmployeeType getType() { - return type; - } - - public void setType(EmployeeType type) { - this.type = type; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ReferencedEntity.java deleted file mode 100644 index 824fe4aca964..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/ReferencedEntity.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.single.relation; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ReferencedEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToMany(mappedBy = "referenced") - private Set referencing; - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferencedEntity) ) { - return false; - } - - ReferencedEntity that = (ReferencedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java deleted file mode 100644 index c5bb1fe07f59..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - ChildEntity ver1 = new ChildEntity( id1, "x", 1l ); - ChildEntity ver2 = new ChildEntity( id1, "y", 2l ); - - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildEntity.java deleted file mode 100644 index 0ae3858b1d27..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildEntity.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildEntity extends ParentEntity { - @Basic - private Long numVal; - - public ChildEntity() { - } - - public ChildEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildEntity childEntity = (ChildEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildPrimaryKeyJoinEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java deleted file mode 100644 index 41ccf0e74ffe..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ParentAuditing extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ParentEntity pe = new ParentEntity( id1, "x" ); - em.persist( pe ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - pe = em.find( ParentEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ParentEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfChildId1() { - assert getAuditReader().find( ChildEntity.class, id1, 1 ) == null; - assert getAuditReader().find( ChildEntity.class, id1, 2 ) == null; - } - - @Test - public void testHistoryOfParentId1() { - ParentEntity ver1 = new ParentEntity( id1, "x" ); - ParentEntity ver2 = new ParentEntity( id1, "y" ); - - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); - } - - @Test - public void testPolymorphicQuery() { - ParentEntity parentVer1 = new ParentEntity( id1, "x" ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( parentVer1 ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) - .getResultList().size() == 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentEntity.java deleted file mode 100644 index 341ebc3890bd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@Audited -public class ParentEntity { - @Id - private Integer id; - - @Basic - private String data; - - public ParentEntity() { - } - - public ParentEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentEntity) ) { - return false; - } - - ParentEntity that = (ParentEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AbstractEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AbstractEntity.java deleted file mode 100644 index afa9a2351781..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AbstractEntity.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.abstractparent; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@Audited -public abstract class AbstractEntity { - @Id - public Long id; - - @Column - public String commonField; - - public AbstractEntity() { - } - - protected AbstractEntity(Long id, String commonField) { - this.commonField = commonField; - this.id = id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java deleted file mode 100644 index ebb4c1a6b562..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.abstractparent; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Table; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-5910") -public class AuditedAbstractParentTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {AbstractEntity.class, EffectiveEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - EffectiveEntity1 entity = new EffectiveEntity1( 1L, "commonField", "specificField1" ); - em.persist( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testAbstractTableExistence() { - for ( Table table : metadata().collectTableMappings() ) { - if ( "AbstractEntity_AUD".equals( table.getName() ) ) { - Assert.assertFalse( table.isPhysicalTable() ); - return; - } - } - Assert.fail(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/EffectiveEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/EffectiveEntity1.java deleted file mode 100644 index 25995ec7ad6f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/EffectiveEntity1.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.abstractparent; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "ENTITY_1") -@Audited -public class EffectiveEntity1 extends AbstractEntity { - @Column - public String specificField1; - - public EffectiveEntity1() { - } - - public EffectiveEntity1(Long id, String commonField, String specificField1) { - super( id, commonField ); - this.specificField1 = specificField1; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildIngEntity.java deleted file mode 100644 index 1ad3c8ac15f9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildIngEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.childrelation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildIngEntity extends ParentNotIngEntity { - @Basic - private Long numVal; - - @ManyToOne - private ReferencedEntity referenced; - - public ChildIngEntity() { - } - - public ChildIngEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public ReferencedEntity getReferenced() { - return referenced; - } - - public void setReferenced(ReferencedEntity referenced) { - this.referenced = referenced; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIngEntity childEntity = (ChildIngEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java deleted file mode 100644 index 244bc6fcfac7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.childrelation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ChildReferencing extends BaseEnversJPAFunctionalTestCase { - private Integer re_id1; - private Integer re_id2; - private Integer c_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - re_id1 = 1; - re_id2 = 10; - c_id = 100; - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity( re_id1 ); - em.persist( re1 ); - - ReferencedEntity re2 = new ReferencedEntity( re_id2 ); - em.persist( re2 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id2 ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection1() { - assert getAuditReader().find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() == 0; - } - - @Test - public void testHistoryOfReferencedCollection2() { - assert getAuditReader().find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 3 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - } - - @Test - public void testChildHistory() { - assert getAuditReader().find( ChildIngEntity.class, c_id, 1 ) == null; - assert getAuditReader().find( ChildIngEntity.class, c_id, 2 ).getReferenced().equals( - new ReferencedEntity( re_id1 ) - ); - assert getAuditReader().find( ChildIngEntity.class, c_id, 3 ).getReferenced().equals( - new ReferencedEntity( re_id2 ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ParentNotIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ParentNotIngEntity.java deleted file mode 100644 index dc1fe38fce37..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ParentNotIngEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.childrelation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@Audited -public class ParentNotIngEntity { - @Id - private Integer id; - - @Basic - private String data; - - public ParentNotIngEntity() { - } - - public ParentNotIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentNotIngEntity) ) { - return false; - } - - ParentNotIngEntity that = (ParentNotIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentNotIngEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java deleted file mode 100644 index d9bc00f7ae6d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.childrelation; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ReferencedEntity { - @Id - private Integer id; - - @OneToMany(mappedBy = "referenced") - private Set referencing; - - public ReferencedEntity(Integer id) { - this.id = id; - } - - public ReferencedEntity() { - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferencedEntity) ) { - return false; - } - - ReferencedEntity that = (ReferencedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return id; - } - - public String toString() { - return "ReferencedEntity(id = " + getId() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/Address.java deleted file mode 100644 index 92670160f6f5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/Address.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.notownedrelation; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class Address implements Serializable { - @Id - private Long id; - - private String address1; - - @ManyToOne - private Contact contact; - - public Address() { - } - - public Address(Long id, String address1) { - this.id = id; - this.address1 = address1; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getAddress1() { - return address1; - } - - public void setAddress1(String address1) { - this.address1 = address1; - } - - public Contact getContact() { - return contact; - } - - public void setContact(Contact contact) { - this.contact = contact; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Address) ) { - return false; - } - - Address address = (Address) o; - - if ( address1 != null ? !address1.equals( address.address1 ) : address.address1 != null ) { - return false; - } - if ( id != null ? !id.equals( address.id ) : address.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (address1 != null ? address1.hashCode() : 0); - return result; - } - - public String toString() { - return "Address(id = " + getId() + ", address1 = " + getAddress1() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/Contact.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/Contact.java deleted file mode 100644 index 2ef24790b062..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/Contact.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.notownedrelation; - -import java.io.Serializable; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -@Entity -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@Audited -public class Contact implements Serializable { - @Id - private Long id; - - private String email; - - @OneToMany(mappedBy = "contact") - private Set

    addresses; - - public Contact() { - } - - public Contact(Long id, String email) { - this.id = id; - this.email = email; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Set
    getAddresses() { - return addresses; - } - - public void setAddresses(Set
    addresses) { - this.addresses = addresses; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java deleted file mode 100644 index 018895be1074..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.notownedrelation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotOwnedBidirectional extends BaseEnversJPAFunctionalTestCase { - private Long pc_id; - private Long a1_id; - private Long a2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - pc_id = 1l; - a1_id = 10l; - a2_id = 100l; - - // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); - - Address a1 = new Address( a1_id, "a1" ); - a1.setContact( pc ); - - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc_id ); - - Address a2 = new Address( a2_id, "a2" ); - a2.setContact( pc ); - - em.persist( a2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( Contact.class, pc_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PersonalContact.class, pc_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - } - - @Test - public void testHistoryOfContact() { - assert getAuditReader().find( Contact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( Contact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); - } - - @Test - public void testHistoryOfPersonalContact() { - assert getAuditReader().find( PersonalContact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( PersonalContact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/PersonalContact.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/PersonalContact.java deleted file mode 100644 index aac5bc121ea8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/PersonalContact.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.notownedrelation; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class PersonalContact extends Contact { - private String firstname; - - public PersonalContact() { - } - - public PersonalContact(Long id, String email, String firstname) { - super( id, email ); - this.firstname = firstname; - } - - public String getFirstname() { - return firstname; - } - - public void setFirstname(String firstname) { - this.firstname = firstname; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ChildIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ChildIngEntity.java deleted file mode 100644 index 03ba15551347..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ChildIngEntity.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.relation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildIngEntity extends ParentIngEntity { - @Basic - private Long numVal; - - public ChildIngEntity() { - } - - public ChildIngEntity(Integer id, String data, Long numVal) { - super( id, data ); - this.numVal = numVal; - } - - public Long getNumVal() { - return numVal; - } - - public void setNumVal(Long numVal) { - this.numVal = numVal; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildIngEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildIngEntity childEntity = (ChildIngEntity) o; - - if ( numVal != null ? !numVal.equals( childEntity.numVal ) : childEntity.numVal != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (numVal != null ? numVal.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildIngEntity(id = " + getId() + ", data = " + getData() + ", numVal = " + numVal + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ParentIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ParentIngEntity.java deleted file mode 100644 index 19aa2eb88627..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ParentIngEntity.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.relation; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) -@Audited -public class ParentIngEntity { - @Id - private Integer id; - - @Basic - private String data; - - @ManyToOne - private ReferencedEntity referenced; - - public ParentIngEntity() { - } - - public ParentIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ReferencedEntity getReferenced() { - return referenced; - } - - public void setReferenced(ReferencedEntity referenced) { - this.referenced = referenced; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ParentIngEntity) ) { - return false; - } - - ParentIngEntity that = (ParentIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "ParentIngEntity(id = " + getId() + ", data = " + getData() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java deleted file mode 100644 index f1f0cf5beb47..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.relation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class PolymorphicCollection extends BaseEnversJPAFunctionalTestCase { - private Integer ed_id1; - private Integer c_id; - private Integer p_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ed_id1 = 1; - p_id = 10; - c_id = 100; - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re = new ReferencedEntity( ed_id1 ); - em.persist( re ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ParentIngEntity pie = new ParentIngEntity( p_id, "x" ); - pie.setReferenced( re ); - em.persist( pie ); - p_id = pie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, ed_id1 ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( ParentIngEntity.class, p_id ) ); - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); - } - - @Test - public void testHistoryOfReferencedCollection() { - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 3 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ReferencedEntity.java deleted file mode 100644 index 7ecd83d16918..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/ReferencedEntity.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.relation; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ReferencedEntity { - @Id - private Integer id; - - @OneToMany(mappedBy = "referenced") - private Set referencing; - - public ReferencedEntity() { - } - - public ReferencedEntity(Integer id) { - this.id = id; - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ReferencedEntity) ) { - return false; - } - - ReferencedEntity that = (ReferencedEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return id; - } - - public String toString() { - return "ReferencedEntity(id = " + getId() + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/Component1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/Component1.java deleted file mode 100644 index 5589463a8fe0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/Component1.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.components; - -import jakarta.persistence.Embeddable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class Component1 implements IComponent { - private String data; - - public Component1(String data) { - this.data = data; - } - - public Component1() { - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Component1) ) { - return false; - } - - Component1 that = (Component1) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - return data != null ? data.hashCode() : 0; - } - - @Override - public String toString() { - return "Component1{" + - "data='" + data + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/ComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/ComponentTestEntity.java deleted file mode 100644 index 277675b08380..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/ComponentTestEntity.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.components; - -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.Target; -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ComponentTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Embedded - @Target(Component1.class) - private IComponent comp1; - - public ComponentTestEntity() { - } - - public ComponentTestEntity(IComponent comp1) { - this.comp1 = comp1; - } - - public ComponentTestEntity(Integer id, IComponent comp1) { - this.id = id; - this.comp1 = comp1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public IComponent getComp1() { - return comp1; - } - - public void setComp1(IComponent comp1) { - this.comp1 = comp1; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ComponentTestEntity) ) { - return false; - } - - ComponentTestEntity that = (ComponentTestEntity) o; - - if ( comp1 != null ? !comp1.equals( that.comp1 ) : that.comp1 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (comp1 != null ? comp1.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ComponentTestEntity{" + - "id=" + id + - ", comp1=" + comp1 + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/IComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/IComponent.java deleted file mode 100644 index b70ba352dc5f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/IComponent.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.components; - - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface IComponent { - String getData(); - - void setData(String data); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java deleted file mode 100644 index 7ceb76f2ce1e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.components; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class InterfacesComponents extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a" ) ); - - em.persist( cte1 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - - cte1.setComp1( new Component1( "b" ) ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - - cte1.getComp1().setData( "c" ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - ComponentTestEntity ver1 = new ComponentTestEntity( id1, new Component1( "a" ) ); - ComponentTestEntity ver2 = new ComponentTestEntity( id1, new Component1( "b" ) ); - ComponentTestEntity ver3 = new ComponentTestEntity( id1, new Component1( "c" ) ); - - assert getAuditReader().find( ComponentTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 3 ).equals( ver3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java deleted file mode 100644 index 8e72c97fa294..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Hern�n Chanfreau - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractAllAuditedTest extends BaseEnversJPAFunctionalTestCase { - private long ai_id; - private long nai_id; - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - AuditedImplementor ai = new AuditedImplementor(); - ai.setData( "La data" ); - ai.setAuditedImplementorData( "audited implementor data" ); - - NonAuditedImplementor nai = new NonAuditedImplementor(); - nai.setData( "info" ); - nai.setNonAuditedImplementorData( "sttring" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ai ); - - em.persist( nai ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ai = em.find( AuditedImplementor.class, ai.getId() ); - nai = em.find( NonAuditedImplementor.class, nai.getId() ); - - ai.setData( "La data 2" ); - ai.setAuditedImplementorData( "audited implementor data 2" ); - - nai.setData( "info 2" ); - nai.setNonAuditedImplementorData( "sttring 2" ); - - em.getTransaction().commit(); - - // - - ai_id = ai.getId(); - nai_id = nai.getId(); - } - - @Test - public void testRevisions() { - Assert.assertEquals( getAuditReader().getRevisions( AuditedImplementor.class, ai_id ), Arrays.asList( 1, 2 ) ); - } - - @Test - public void testRetrieveAudited() { - // levanto las versiones actuales - AuditedImplementor ai = getEntityManager().find( AuditedImplementor.class, ai_id ); - assert ai != null; - SimpleInterface si = getEntityManager().find( SimpleInterface.class, ai_id ); - assert si != null; - - // levanto las de la revisi�n 1, ninguna debe ser null - AuditedImplementor ai_rev1 = getAuditReader().find( AuditedImplementor.class, ai_id, 1 ); - assert ai_rev1 != null; - SimpleInterface si_rev1 = getAuditReader().find( SimpleInterface.class, ai_id, 1 ); - assert si_rev1 != null; - - AuditedImplementor ai_rev2 = getAuditReader().find( AuditedImplementor.class, ai_id, 2 ); - assert ai_rev2 != null; - SimpleInterface si_rev2 = getAuditReader().find( SimpleInterface.class, ai_id, 2 ); - assert si_rev2 != null; - - // data de las actuales no debe ser null - Assert.assertEquals( ai.getData(), "La data 2" ); - Assert.assertEquals( si.getData(), "La data 2" ); - // la data de las revisiones no debe ser null - Assert.assertEquals( ai_rev1.getData(), "La data" ); - Assert.assertEquals( si_rev1.getData(), "La data" ); - - Assert.assertEquals( ai_rev2.getData(), "La data 2" ); - Assert.assertEquals( si_rev2.getData(), "La data 2" ); - } - - @Test - public void testRetrieveNonAudited() { - // levanto las versiones actuales - NonAuditedImplementor nai = getEntityManager().find( NonAuditedImplementor.class, nai_id ); - assert nai != null; - SimpleInterface si = getEntityManager().find( SimpleInterface.class, nai_id ); - assert si != null; - - assert si.getData().equals( nai.getData() ); - - try { - // levanto la revision - getAuditReader().find( NonAuditedImplementor.class, nai_id, 1 ); - assert false; - } - catch (Exception e) { - // no es auditable!!! - assert (e instanceof NotAuditedException); - } - - // levanto la revision que no es auditable pero con la interfaz, el resultado debe ser null - SimpleInterface si_rev1 = getAuditReader().find( SimpleInterface.class, nai_id, 1 ); - assert si_rev1 == null; - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AuditedImplementor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AuditedImplementor.java deleted file mode 100644 index f9c5230862cc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AuditedImplementor.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hern�n Chanfreau - */ -@Audited -public class AuditedImplementor implements SimpleInterface { - private long id; - private String data; - private String auditedImplementorData; - - protected AuditedImplementor() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getAuditedImplementorData() { - return auditedImplementorData; - } - - public void setAuditedImplementorData(String implementorData) { - this.auditedImplementorData = implementorData; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/NonAuditedImplementor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/NonAuditedImplementor.java deleted file mode 100644 index 552ecddb9be6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/NonAuditedImplementor.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited; - - - -/** - * @author Hern�n Chanfreau - */ -public class NonAuditedImplementor implements SimpleInterface { - private long id; - private String data; - private String nonAuditedImplementorData; - - protected NonAuditedImplementor() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getNonAuditedImplementorData() { - return nonAuditedImplementorData; - } - - public void setNonAuditedImplementorData(String implementorData) { - this.nonAuditedImplementorData = implementorData; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/SimpleInterface.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/SimpleInterface.java deleted file mode 100644 index dc6cc17c3bd0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/SimpleInterface.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hern�n Chanfreau - */ -@Audited -public interface SimpleInterface { - - long getId(); - - void setId(long id); - - String getData(); - - void setData(String data); - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java deleted file mode 100644 index 4f051f5dd2b0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.subclass; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class SubclassAllAuditedTest extends AbstractAllAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/subclassAllAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java deleted file mode 100644 index 3190d75966d4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.union; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class UnionAllAuditedTest extends AbstractAllAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/unionAllAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java deleted file mode 100644 index 4c7be716b32e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hern�n Chanfreau - */ -public abstract class AbstractPropertiesAuditedTest extends BaseEnversJPAFunctionalTestCase { - private long ai_id; - private long nai_id; - - private static int NUMERITO = 555; - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - AuditedImplementor ai = new AuditedImplementor(); - ai.setData( "La data" ); - ai.setAuditedImplementorData( "audited implementor data" ); - ai.setNumerito( NUMERITO ); - - NonAuditedImplementor nai = new NonAuditedImplementor(); - nai.setData( "info" ); - nai.setNonAuditedImplementorData( "sttring" ); - nai.setNumerito( NUMERITO ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ai ); - - em.persist( nai ); - - em.getTransaction().commit(); - - // Revision 2 - - // Revision 3 - - ai_id = ai.getId(); - nai_id = nai.getId(); - } - - @Test - public void testRetrieveAudited() { - // levanto las versiones actuales - AuditedImplementor ai = getEntityManager().find( - AuditedImplementor.class, ai_id - ); - assert ai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - ai_id - ); - assert si != null; - - // levanto las de la revisi�n 1, ninguna debe ser null - AuditedImplementor ai_rev1 = getAuditReader().find( - AuditedImplementor.class, ai_id, 1 - ); - assert ai_rev1 != null; - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - ai_id, 1 - ); - assert si_rev1 != null; - - // data de las actuales no debe ser null - assert ai.getData() != null; - assert si.getData() != null; - // data de las revisiones No est� auditada - assert ai_rev1.getData() == null; - assert si_rev1.getData() == null; - // numerito de las revisiones est� auditada, debe ser igual a NUMERITO - assert ai_rev1.getNumerito() == NUMERITO; - assert si_rev1.getNumerito() == NUMERITO; - } - - @Test - public void testRetrieveNonAudited() { - // levanto las versiones actuales - NonAuditedImplementor nai = getEntityManager().find( - NonAuditedImplementor.class, nai_id - ); - assert nai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - nai_id - ); - assert si != null; - - assert si.getData().equals( nai.getData() ); - - try { - // levanto la revision - getAuditReader().find( NonAuditedImplementor.class, nai_id, 1 ); - assert false; - } - catch (Exception e) { - // no es auditable!!! - assert (e instanceof NotAuditedException); - } - - // levanto la revision que no es auditable pero con la interfaz, el - // resultado debe ser null - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - nai_id, 1 - ); - assert si_rev1 == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AuditedImplementor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AuditedImplementor.java deleted file mode 100644 index 5a9b9f8385f7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AuditedImplementor.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hern�n Chanfreau - */ -@Audited -public class AuditedImplementor implements SimpleInterface { - private long id; - private String data; - private String auditedImplementorData; - private int numerito; - - protected AuditedImplementor() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getAuditedImplementorData() { - return auditedImplementorData; - } - - public void setAuditedImplementorData(String implementorData) { - this.auditedImplementorData = implementorData; - } - - public int getNumerito() { - return numerito; - } - - public void setNumerito(int numerito) { - this.numerito = numerito; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/NonAuditedImplementor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/NonAuditedImplementor.java deleted file mode 100644 index 7dbc4fbf3604..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/NonAuditedImplementor.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited; - - -/** - * @author Hern�n Chanfreau - */ -public class NonAuditedImplementor implements SimpleInterface { - private long id; - private String data; - private String nonAuditedImplementorData; - private int numerito; - - protected NonAuditedImplementor() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getNonAuditedImplementorData() { - return nonAuditedImplementorData; - } - - public void setNonAuditedImplementorData(String implementorData) { - this.nonAuditedImplementorData = implementorData; - } - - public int getNumerito() { - return numerito; - } - - public void setNumerito(int numerito) { - this.numerito = numerito; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/SimpleInterface.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/SimpleInterface.java deleted file mode 100644 index bd66ac2576f4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/SimpleInterface.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited; - -import org.hibernate.envers.Audited; - -/** - * @author Hern�n Chanfreau - */ -public interface SimpleInterface { - - long getId(); - - void setId(long id); - - String getData(); - - void setData(String data); - - @Audited - int getNumerito(); - - void setNumerito(int num); - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java deleted file mode 100644 index ebc61deeb654..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.joined; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.AbstractPropertiesAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class JoinedPropertiesAuditedTest extends AbstractPropertiesAuditedTest { - - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/joinedPropertiesAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java deleted file mode 100644 index 1043ac0729d4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.subclass; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.AbstractPropertiesAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class SubclassPropertiesAuditedTest extends AbstractPropertiesAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/subclassPropertiesAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java deleted file mode 100644 index e393ceffdb47..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.union; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.AbstractPropertiesAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class UnionPropertiesAuditedTest extends AbstractPropertiesAuditedTest { - - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/unionPropertiesAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java deleted file mode 100644 index bb9d2aec24ef..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hern�n Chanfreau - */ -public abstract class AbstractPropertiesAudited2Test extends BaseEnversJPAFunctionalTestCase { - private long ai_id; - private long nai_id; - - private static int NUMERITO = 555; - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - AuditedImplementor ai = new AuditedImplementor(); - ai.setData( "La data" ); - ai.setAuditedImplementorData( "audited implementor data" ); - ai.setNumerito( NUMERITO ); - - NonAuditedImplementor nai = new NonAuditedImplementor(); - nai.setData( "info" ); - nai.setNonAuditedImplementorData( "sttring" ); - nai.setNumerito( NUMERITO ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ai ); - - em.persist( nai ); - - em.getTransaction().commit(); - - // Revision 2 - - // Revision 3 - - ai_id = ai.getId(); - nai_id = nai.getId(); - } - - @Test - public void testRetrieveAudited() { - // levanto las versiones actuales - AuditedImplementor ai = getEntityManager().find( - AuditedImplementor.class, ai_id - ); - assert ai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - ai_id - ); - assert si != null; - - // levanto las de la revisi�n 1, ninguna debe ser null - AuditedImplementor ai_rev1 = getAuditReader().find( - AuditedImplementor.class, ai_id, 1 - ); - assert ai_rev1 != null; - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - ai_id, 1 - ); - assert si_rev1 != null; - - // data de las actuales no debe ser null - assert ai.getData() != null; - assert si.getData() != null; - // data de las revisiones est� auditada - assert ai_rev1.getData() != null; - assert si_rev1.getData() != null; - // numerito de las revisiones est� auditada, debe ser igual a NUMERITO - assert ai_rev1.getNumerito() == NUMERITO; - assert si_rev1.getNumerito() == NUMERITO; - } - - @Test - public void testRetrieveNonAudited() { - // levanto las versiones actuales - NonAuditedImplementor nai = getEntityManager().find( - NonAuditedImplementor.class, nai_id - ); - assert nai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - nai_id - ); - assert si != null; - - assert si.getData().equals( nai.getData() ); - - try { - // levanto la revision - getAuditReader().find( NonAuditedImplementor.class, nai_id, 1 ); - assert false; - } - catch (Exception e) { - // no es auditable!!! - assert (e instanceof NotAuditedException); - } - - // levanto la revision que no es auditable pero con la interfaz, el - // resultado debe ser null - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - nai_id, 1 - ); - assert si_rev1 == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AuditedImplementor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AuditedImplementor.java deleted file mode 100644 index 559d24a7ff48..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AuditedImplementor.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2; - -import org.hibernate.envers.Audited; - -/** - * @author Hern�n Chanfreau - */ -@Audited -public class AuditedImplementor implements SimpleInterface { - private long id; - private String data; - private String auditedImplementorData; - private int numerito; - - protected AuditedImplementor() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getAuditedImplementorData() { - return auditedImplementorData; - } - - public void setAuditedImplementorData(String implementorData) { - this.auditedImplementorData = implementorData; - } - - public int getNumerito() { - return numerito; - } - - public void setNumerito(int numerito) { - this.numerito = numerito; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/NonAuditedImplementor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/NonAuditedImplementor.java deleted file mode 100644 index c5dff659335f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/NonAuditedImplementor.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2; - - -/** - * @author Hern�n Chanfreau - */ -public class NonAuditedImplementor implements SimpleInterface { - private long id; - private String data; - private String nonAuditedImplementorData; - private int numerito; - - protected NonAuditedImplementor() { - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getNonAuditedImplementorData() { - return nonAuditedImplementorData; - } - - public void setNonAuditedImplementorData(String implementorData) { - this.nonAuditedImplementorData = implementorData; - } - - public int getNumerito() { - return numerito; - } - - public void setNumerito(int numerito) { - this.numerito = numerito; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/SimpleInterface.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/SimpleInterface.java deleted file mode 100644 index 9898d67d7055..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/SimpleInterface.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2; - -import org.hibernate.envers.Audited; - -/** - * @author Hern�n Chanfreau - */ -public interface SimpleInterface { - - long getId(); - - void setId(long id); - - @Audited - String getData(); - - void setData(String data); - - @Audited - int getNumerito(); - - void setNumerito(int num); - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java deleted file mode 100644 index e34dad3d8bb7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.joined; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.AbstractPropertiesAudited2Test; - -/** - * @author Hern�n Chanfreau - */ -public class JoinedPropertiesAudited2Test extends AbstractPropertiesAudited2Test { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/joinedPropertiesAudited2Mappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java deleted file mode 100644 index d69211bf8628..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.subclass; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.AbstractPropertiesAudited2Test; - -/** - * @author Hern�n Chanfreau - */ -public class SubclassPropertiesAudited2Test extends AbstractPropertiesAudited2Test { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/subclassPropertiesAudited2Mappings.hbm.xml"}; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java deleted file mode 100644 index 6e14483fd2e9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.union; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.AbstractPropertiesAudited2Test; - -/** - * @author Hern�n Chanfreau - */ -public class UnionPropertiesAudited2Test extends AbstractPropertiesAudited2Test { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/unionPropertiesAudited2Mappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/ISetRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/ISetRefEdEntity.java deleted file mode 100644 index 3dc38cbd0813..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/ISetRefEdEntity.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.relation; - - -/** - * @author Adam Warski (adam at warski dot org) - */ -public interface ISetRefEdEntity { - Integer getId(); - - void setId(Integer id); - - String getData(); - - void setData(String data); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java deleted file mode 100644 index 4a3e6ccb8b8b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.relation; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class InterfacesRelation extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - - ing1.setReference( ed1 ); - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); - } - - @Test - public void testHistoryOfEdIng1() { - SetRefEdEntity ed1 = getEntityManager().find( SetRefEdEntity.class, ed1_id ); - SetRefEdEntity ed2 = getEntityManager().find( SetRefEdEntity.class, ed2_id ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 3 ); - - assert rev1 == null; - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java deleted file mode 100644 index f5abdf80c510..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.relation; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class SetRefEdEntity implements ISetRefEdEntity { - @Id - private Integer id; - - private String data; - - public SetRefEdEntity() { - } - - public SetRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public SetRefEdEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefEdEntity) ) { - return false; - } - - SetRefEdEntity that = (SetRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefIngEntity.java deleted file mode 100644 index e177ea35d01d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefIngEntity.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.interfaces.relation; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SetRefIngEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne(targetEntity = SetRefEdEntity.class) - private ISetRefEdEntity reference; - - public SetRefIngEntity() { - } - - public SetRefIngEntity(Integer id, String data, ISetRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public SetRefIngEntity(String data, ISetRefEdEntity reference) { - this.data = data; - this.reference = reference; - } - - public SetRefIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public ISetRefEdEntity getReference() { - return reference; - } - - public void setReference(ISetRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SetRefIngEntity) ) { - return false; - } - - SetRefIngEntity that = (SetRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "SetRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java deleted file mode 100644 index 5183fe6d7b84..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Andrea Boriero - */ -@JiraKey(value = "HHH-11580") -public class DeleteCollectionJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - private static final int ENTITY_ID = 1; - private static final int OTHER_ENTITY_ID = 2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TestEntity.class, OtherTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); - try { - TestEntity entity = new TestEntity( ENTITY_ID, "Fab" ); - entityManager.persist( entity ); - - OtherTestEntity other = new OtherTestEntity( OTHER_ENTITY_ID, "other" ); - - entity.addOther( other ); - entityManager.persist( entity ); - entityManager.persist( other ); - - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - entityManager = getEntityManager(); - try { - TestEntity entity = entityManager.find( TestEntity.class, ENTITY_ID ); - OtherTestEntity other = entityManager.find( OtherTestEntity.class, OTHER_ENTITY_ID ); - entityManager.remove( entity ); - entityManager.remove( other ); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( - Arrays.asList( 1, 2 ), - getAuditReader().getRevisions( TestEntity.class, ENTITY_ID ) - ); - } - - @Test - public void testRevisionHistory() { - assertEquals( - new TestEntity( 1, "Fab" ), - getAuditReader().find( TestEntity.class, ENTITY_ID, 1 ) - ); - } - - @Audited - @Entity - @Table(name = "ENTITY") - public static class TestEntity { - @Id - private Integer id; - - private String name; - - @OneToMany - @JoinTable(name = "LINK_TABLE", joinColumns = @JoinColumn(name = "ENTITY_ID")) - private List others = new ArrayList<>(); - - public TestEntity() { - } - - public TestEntity(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void addOther(OtherTestEntity other) { - this.others.add( other ); - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - TestEntity that = (TestEntity) o; - - if ( getId() != null ? !getId().equals( that.getId() ) : that.getId() != null ) { - return false; - } - return name != null ? name.equals( that.name ) : that.name == null; - } - - @Override - public int hashCode() { - int result = getId() != null ? getId().hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - return result; - } - } - - @Audited - @Entity - @Table(name = "O_ENTITY") - public static class OtherTestEntity { - - @Id - private Integer id; - private String name; - - public OtherTestEntity() { - } - - public OtherTestEntity(int id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public String getName() { - return name; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java deleted file mode 100644 index d88f2d08b4c7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value="HHH-13191") -@RequiresDialectFeature({ DialectChecks.SupportsNoColumnInsert.class, DialectChecks.SupportsIdentityColumns.class }) -public class IdentifierProxyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { AuthUser.class, AuthClient.class }; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - - // NOTE: This option is critical in order for the problem to be reproducable. - // If this option is not set to 'true', then the failure condition does not happen. - options.put( AvailableSettings.JPA_PROXY_COMPLIANCE, "true" ); - } - - private Integer authUserId; - private Integer authClientId; - - @Test - @Priority(10) - public void initData() throws Exception { - // Revision 1 - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); - try { - final AuthUser authUser = new AuthUser(); - final AuthClient authClient = new AuthClient(); - - authClient.getAuthUsers().add( authUser ); - authUser.setAuthClient( authClient ); - - entityManager.persist( authClient ); - - this.authUserId = authUser.getId(); - this.authClientId = authClient.getId(); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - - // Revision 2 - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - entityManager = getEntityManager(); - try { - final AuthUser authUser = entityManager.find( AuthUser.class, authUserId ); - authUser.setSomeValue( "test" ); - entityManager.merge( authUser ); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( AuthUser.class, authUserId ) ); - } - - @Entity(name = "AuthUser") - @Audited - public static class AuthUser { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - - private String someValue; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="idclient", insertable=false, updatable = false) - private AuthClient authClient; - - public AuthUser() { - - } - - public AuthUser(Integer id, String someValue) { - this.id = id; - this.someValue = someValue; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getSomeValue() { - return someValue; - } - - public void setSomeValue(String someValue) { - this.someValue = someValue; - } - - public AuthClient getAuthClient() { - return authClient; - } - - public void setAuthClient(AuthClient authClient) { - this.authClient = authClient; - } - } - - @Entity(name = "AuthClient") - @Audited - public static class AuthClient { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Integer id; - - @OneToMany(cascade = CascadeType.ALL) - @JoinColumn(name = "idclient") - @AuditJoinTable(name = "AuthClient_AuthUser_AUD") - private List authUsers = new ArrayList<>(); - - public AuthClient() { - - } - - public AuthClient(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getAuthUsers() { - return authUsers; - } - - public void setAuthUsers(List authUsers) { - this.authUsers = authUsers; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java deleted file mode 100644 index 7d1750e3a064..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.Map; -import jakarta.persistence.EntityManager; -import jakarta.transaction.RollbackException; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.integration.reventity.ExceptionListenerRevEntity; - -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Assert; -import org.junit.Test; - -/** - * Same as {@link org.hibernate.orm.test.envers.integration.reventity.ExceptionListener}, but in a JTA environment. - * - * @author Adam Warski (adam at warski dot org) - */ -public class JtaExceptionListener extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ExceptionListenerRevEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - } - - @Test(expected = RollbackException.class) - @Priority(5) // must run before testDataNotPersisted() - public void testTransactionRollback() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - try { - EntityManager em = getEntityManager(); - - // Trying to persist an entity - however the listener should throw an exception, so the entity - // shouldn't be persisted - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - } - finally { - TestingJtaPlatformImpl.tryCommit(); - } - } - - @Test - public void testDataNotPersisted() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - try { - // Checking if the entity became persisted - EntityManager em = getEntityManager(); - long count = em.createQuery( "from StrTestEntity s where s.str = 'x'" ).getResultList().size(); - Assert.assertEquals( 0, count ); - } - finally { - TestingJtaPlatformImpl.tryCommit(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java deleted file mode 100644 index 96d4373a257d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.Arrays; -import java.util.Map; - -import jakarta.persistence.EntityManager; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * Simple test that checks that Envers can still perform its beforeTransactionCompletion - * callbacks successfully even if the Hibernate Session/EntityManager has been closed - * prior to the JTA transaction commit. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11232") -public class JtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); - try { - IntTestEntity ite = new IntTestEntity( 10 ); - entityManager.persist( ite ); - entityId = ite.getId(); - // simulates spring JtaTransactionManager.triggerBeforeCompletion() - // this closes the entity manager prior to the JTA transaction. - entityManager.close(); - } - finally { - TestingJtaPlatformImpl.tryCommit(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( - Arrays.asList( 1 ), - getAuditReader().getRevisions( IntTestEntity.class, entityId ) - ); - } - - @Test - public void testRevisionHistory() { - assertEquals( - new IntTestEntity( 10, entityId ), - getAuditReader().find( IntTestEntity.class, entityId, 1 ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java deleted file mode 100644 index e48e2944ab93..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; - -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Assert; -import org.junit.Test; - -/** - * Same as {@link org.hibernate.orm.test.envers.integration.basic.Simple}, but in a JTA environment. - * - * @author Adam Warski (adam at warski dot org) - */ -public class JtaTransaction extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - EntityManager em; - IntTestEntity ite; - try { - em = getEntityManager(); - ite = new IntTestEntity( 10 ); - em.persist( ite ); - id1 = ite.getId(); - } - finally { - TestingJtaPlatformImpl.tryCommit(); - } - em.close(); - - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - try { - em = getEntityManager(); - ite = em.find( IntTestEntity.class, id1 ); - ite.setNumber( 20 ); - } - finally { - TestingJtaPlatformImpl.tryCommit(); - } - em.close(); - } - - @Test - public void testRevisionsCounts() throws Exception { - Assert.assertEquals( - 2, getAuditReader().getRevisions( - IntTestEntity.class, id1 - ).size() - ); - } - - @Test - public void testHistoryOfId1() { - IntTestEntity ver1 = new IntTestEntity( 10, id1 ); - IntTestEntity ver2 = new IntTestEntity( 20, id1 ); - - List revisions = getAuditReader().getRevisions( - IntTestEntity.class, id1 - ); - - Assert.assertEquals( - ver1, getAuditReader().find( - IntTestEntity.class, id1, revisions.get( 0 ) - ) - ); - Assert.assertEquals( - ver2, getAuditReader().find( - IntTestEntity.class, id1, revisions.get( 1 ) - ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java deleted file mode 100644 index c88143b0cf68..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.lang.reflect.Field; -import java.util.Map; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceException; -import jakarta.transaction.RollbackException; -import jakarta.transaction.Status; -import jakarta.transaction.Transaction; - -import org.hibernate.action.spi.BeforeTransactionCompletionProcess; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.internal.synchronization.AuditProcess; -import org.hibernate.envers.internal.synchronization.AuditProcessManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -/** - * An envers specific quest that verifies the {@link AuditProcessManager} gets flushed. - * - * There is a similar to `org.hibernate.test.tm.JtaAfterCompletionTest` in hibernate-core - * which verifies that the callbacks fires. - * - * The premise behind this test is to verify that when a JTA transaction is aborted by - * Arjuna's reaper thread, the original thread will still invoke the after-completion - * callbacks making sure that the Envers {@link AuditProcessManager} gets flushed to - * avoid memory leaks. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12448") -public class JtaTransactionAfterCallbackTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, "jta" ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, Boolean.TRUE ); - } - - @Test - @Priority(10) - public void testAuditProcessManagerFlushedOnTransactionTimeout() throws Exception { - // We will set the timeout to 5 seconds to allow the transaction reaper to kick in for us. - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().setTransactionTimeout( 5 ); - - // Begin the transaction and do some extensive 10s long work - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - EntityManager entityManager = null; - try { - entityManager = getEntityManager(); - - IntTestEntity ite = new IntTestEntity( 10 ); - entityManager.persist( ite ); - - // Register before completion callback - // The before causes this thread to wait until the Reaper thread aborts our transaction - final SessionImplementor session = entityManager.unwrap( SessionImplementor.class ); - session.getActionQueue().registerProcess( new BeforeCallbackCompletionHandler() ); - - TestingJtaPlatformImpl.transactionManager().commit(); - } - catch ( Exception e ) { - // This is expected - assertTyping( RollbackException.class, e ); - } - finally { - try { - if ( entityManager != null ) { - entityManager.close(); - } - } - catch ( PersistenceException e ) { - // we expect this - assertTrue( e.getMessage().contains( "Transaction was rolled back in a different thread" ) ); - } - - // test the audit process manager was flushed - assertAuditProcessManagerEmpty(); - } - } - - public static class BeforeCallbackCompletionHandler implements BeforeTransactionCompletionProcess { - @Override - public void doBeforeTransactionCompletion(SessionImplementor session) { - try { - // Wait for the transaction to be rolled back by the Reaper thread. - final Transaction transaction = TestingJtaPlatformImpl.transactionManager().getTransaction(); - while ( transaction.getStatus() != Status.STATUS_ROLLEDBACK ) - Thread.sleep( 10 ); - } - catch ( Exception e ) { - // we aren't concerned with this. - } - } - } - - private void assertAuditProcessManagerEmpty() throws Exception { - final SessionFactoryImplementor sf = entityManagerFactory().unwrap( SessionFactoryImplementor.class ); - final EnversService enversService = sf.getServiceRegistry().getService( EnversService.class ); - final AuditProcessManager auditProcessManager = enversService.getAuditProcessManager(); - - Map values; - - Field field = auditProcessManager.getClass().getDeclaredField( "auditProcesses" ); - field.setAccessible( true ); - - values = (Map) field.get( auditProcessManager ); - - // assert that the AuditProcess map is not null but empty (e.g. flushed). - assertNotNull( values ); - assertEquals( 0, values.size() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java deleted file mode 100644 index 0af656dcd77e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Andrea Boriero - */ -@JiraKey( value = "HHH-11570") -public class OneToManyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefIngEntity.class, SetRefEdEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); - try { - SetRefEdEntity edEntity = new SetRefEdEntity( 2, "edEntity" ); - entityManager.persist( edEntity ); - - SetRefIngEntity ingEntity = new SetRefIngEntity( 1, "ingEntity" ); - - Set sries = new HashSet<>(); - sries.add( ingEntity ); - ingEntity.setReference( edEntity ); - edEntity.setReffering( sries ); - - entityManager.persist( ingEntity ); - - entityId = ingEntity.getId(); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( - Arrays.asList( 1 ), - getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) - ); - } - - @Test - public void testRevisionHistory() { - assertEquals( - new SetRefIngEntity( 1, "ingEntity" ), - getAuditReader().find( SetRefIngEntity.class, entityId, 1 ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java deleted file mode 100644 index 31f94f7c70e8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.jta; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import jakarta.persistence.EntityManager; -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author VladoKuruc - */ -@JiraKey( value = "HHH-14061") -public class OneToManyLazyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - private Integer parentId; - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefIngEntity.class, SetRefEdEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); - try { - SetRefIngEntity refIngEntity = new SetRefIngEntity( 3, "ingEntityRef" ); - entityManager.persist( refIngEntity ); - - SetRefEdEntity edEntity = new SetRefEdEntity( 2, "edEntity" ); - edEntity.setRef(refIngEntity); - entityManager.persist( edEntity ); - parentId = edEntity.getId(); - - SetRefIngEntity ingEntity = new SetRefIngEntity( 1, "ingEntity" ); - - Set sries = new HashSet<>(); - sries.add( ingEntity ); - ingEntity.setReference( edEntity ); - edEntity.setReffering( sries ); - - entityManager.persist( ingEntity ); - - entityId = ingEntity.getId(); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - entityManager = getEntityManager(); - try { - entityManager.unwrap(Session.class).setHibernateFlushMode(FlushMode.MANUAL); - SetRefEdEntity edEntity = entityManager.find(SetRefEdEntity.class, parentId); - Set reffering = edEntity.getReffering(); - SetRefIngEntity ingEntity = reffering.iterator().next(); - ingEntity.setReference(null); - reffering.remove(ingEntity); - entityManager.merge(ingEntity); - entityManager.flush(); - //clear context in transaction - entityManager.clear(); - entityManager.merge(edEntity); - entityManager.flush(); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( - Arrays.asList(1, 2), - getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) - ); - assertEquals( - Arrays.asList(1, 2), - getAuditReader().getRevisions( SetRefEdEntity.class, parentId ) - ); - } - - @Test - public void testRevisionHistory() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( SetRefEdEntity.class, parentId ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java deleted file mode 100644 index f82e6af46d15..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.lazy; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.junit.Assert.assertEquals; -import org.hibernate.Hibernate; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner; -import org.hibernate.testing.bytecode.enhancement.EnhancementOptions; - -/** - * @author Fabricio Gregorio - */ -@JiraKey(value = "HHH-15522") -@RunWith(BytecodeEnhancerRunner.class) -@EnhancementOptions(lazyLoading = true) -@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not support identity key generation") -public class IsCollectionInitializedBytecodeEnhancementTest extends BaseEnversJPAFunctionalTestCase { - - private Long mce1Id = null; - private Long mcre1Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ - MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); - mce1.setText( "MultipleCollectionEntity-1-1" ); - em.persist( mce1 ); // Persisting entity with empty collections. - em.getTransaction().commit(); - - mce1Id = mce1.getId(); - - // Revision 2 - update. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); - mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); - mcre1.setMultipleCollectionEntity( mce1 ); - mce1.addRefEntity1( mcre1 ); - em.persist( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - mcre1Id = mcre1.getId(); - - em.close(); - } - - @Test - @SuppressWarnings("unchecked") - public void testIsInitialized() { - EntityManager em = getEntityManager(); - - AuditReader reader = AuditReaderFactory.get( em ); - List res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 ) - .add( AuditEntity.id().eq( mce1Id ) ) - .getResultList(); - - MultipleCollectionEntity ret = res.get( 0 ); - - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), false ); - - Hibernate.initialize(ret.getRefEntities1()); - - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), true ); - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java deleted file mode 100644 index 193223e73fe0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.lazy; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import static org.junit.Assert.assertEquals; -import org.hibernate.Hibernate; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; - -/** - * @author Fabricio Gregorio - */ -@JiraKey(value = "HHH-15522") -@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not support identity key generation") -public class IsCollectionInitializedTest extends BaseEnversJPAFunctionalTestCase { - - private Long mce1Id = null; - private Long mcre1Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ - MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); - mce1.setText( "MultipleCollectionEntity-1-1" ); - em.persist( mce1 ); // Persisting entity with empty collections. - em.getTransaction().commit(); - - mce1Id = mce1.getId(); - - // Revision 2 - update. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); - mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); - mcre1.setMultipleCollectionEntity( mce1 ); - mce1.addRefEntity1( mcre1 ); - em.persist( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - mcre1Id = mcre1.getId(); - - em.close(); - } - - @Test - @SuppressWarnings("unchecked") - public void testIsInitialized() { - EntityManager em = getEntityManager(); - - AuditReader reader = AuditReaderFactory.get( em ); - List res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 ) - .add( AuditEntity.id().eq( mce1Id ) ) - .getResultList(); - - MultipleCollectionEntity ret = res.get( 0 ); - - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), false ); - - Hibernate.initialize(ret.getRefEntities1()); - - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), true ); - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java deleted file mode 100644 index 5d599ba6f17e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListOwningEntity.class, ListOwnedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListOwnedEntity ed1 = new ListOwnedEntity( 1, "data_ed_1" ); - ListOwnedEntity ed2 = new ListOwnedEntity( 2, "data_ed_2" ); - - ListOwningEntity ing1 = new ListOwningEntity( 3, "data_ing_1" ); - ListOwningEntity ing2 = new ListOwningEntity( 4, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - ing2 = em.find( ListOwningEntity.class, ing2.getId() ); - ed1 = em.find( ListOwnedEntity.class, ed1.getId() ); - ed2 = em.find( ListOwnedEntity.class, ed2.getId() ); - - ing1.setReferences( new ArrayList() ); - ing1.getReferences().add( ed1 ); - - ing2.setReferences( new ArrayList() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - ed2 = em.find( ListOwnedEntity.class, ed2.getId() ); - ed1 = em.find( ListOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - ed2 = em.find( ListOwnedEntity.class, ed2.getId() ); - ed1 = em.find( ListOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().remove( ed1 ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( ListOwnedEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3, 5 ).equals( getAuditReader().getRevisions( ListOwnedEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( - getAuditReader().getRevisions( - ListOwningEntity.class, - ing1_id - ) - ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ListOwningEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - ListOwningEntity ing1 = getEntityManager().find( ListOwningEntity.class, ing1_id ); - ListOwningEntity ing2 = getEntityManager().find( ListOwningEntity.class, ing2_id ); - - ListOwnedEntity rev1 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 1 ); - ListOwnedEntity rev2 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 2 ); - ListOwnedEntity rev3 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 3 ); - ListOwnedEntity rev4 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 4 ); - ListOwnedEntity rev5 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev3.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev4.getReferencing(), ing2 ); - assert TestTools.checkCollection( rev5.getReferencing(), ing2 ); - } - - @Test - public void testHistoryOfEdId2() { - ListOwningEntity ing1 = getEntityManager().find( ListOwningEntity.class, ing1_id ); - ListOwningEntity ing2 = getEntityManager().find( ListOwningEntity.class, ing2_id ); - - ListOwnedEntity rev1 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 1 ); - ListOwnedEntity rev2 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 2 ); - ListOwnedEntity rev3 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 3 ); - ListOwnedEntity rev4 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 4 ); - ListOwnedEntity rev5 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferencing(), ing2 ); - assert TestTools.checkCollection( rev3.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev4.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev5.getReferencing(), ing2 ); - } - - @Test - public void testHistoryOfEdIng1() { - ListOwnedEntity ed1 = getEntityManager().find( ListOwnedEntity.class, ed1_id ); - ListOwnedEntity ed2 = getEntityManager().find( ListOwnedEntity.class, ed2_id ); - - ListOwningEntity rev1 = getAuditReader().find( ListOwningEntity.class, ing1_id, 1 ); - ListOwningEntity rev2 = getAuditReader().find( ListOwningEntity.class, ing1_id, 2 ); - ListOwningEntity rev3 = getAuditReader().find( ListOwningEntity.class, ing1_id, 3 ); - ListOwningEntity rev4 = getAuditReader().find( ListOwningEntity.class, ing1_id, 4 ); - ListOwningEntity rev5 = getAuditReader().find( ListOwningEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed2 ); - assert rev5.getReferences().equals( Collections.EMPTY_LIST ); - } - - @Test - public void testHistoryOfEdIng2() { - ListOwnedEntity ed1 = getEntityManager().find( ListOwnedEntity.class, ed1_id ); - ListOwnedEntity ed2 = getEntityManager().find( ListOwnedEntity.class, ed2_id ); - - ListOwningEntity rev1 = getAuditReader().find( ListOwningEntity.class, ing2_id, 1 ); - ListOwningEntity rev2 = getAuditReader().find( ListOwningEntity.class, ing2_id, 2 ); - ListOwningEntity rev3 = getAuditReader().find( ListOwningEntity.class, ing2_id, 3 ); - ListOwningEntity rev4 = getAuditReader().find( ListOwningEntity.class, ing2_id, 4 ); - ListOwningEntity rev5 = getAuditReader().find( ListOwningEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev5.getReferences(), ed1, ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java deleted file mode 100644 index 4ce2902c6b86..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.MapOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.MapOwningEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicMap extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MapOwningEntity.class, MapOwnedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - MapOwnedEntity ed1 = new MapOwnedEntity( 1, "data_ed_1" ); - MapOwnedEntity ed2 = new MapOwnedEntity( 2, "data_ed_2" ); - - MapOwningEntity ing1 = new MapOwningEntity( 3, "data_ing_1" ); - MapOwningEntity ing2 = new MapOwningEntity( 4, "data_ing_2" ); - - // Revision 1 (ing1: initialy empty, ing2: one mapping) - em.getTransaction().begin(); - - ing2.getReferences().put( "2", ed2 ); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: adding two mappings, ing2: replacing an existing mapping) - - em.getTransaction().begin(); - - ing1 = em.find( MapOwningEntity.class, ing1.getId() ); - ing2 = em.find( MapOwningEntity.class, ing2.getId() ); - ed1 = em.find( MapOwnedEntity.class, ed1.getId() ); - ed2 = em.find( MapOwnedEntity.class, ed2.getId() ); - - ing1.getReferences().put( "1", ed1 ); - ing1.getReferences().put( "2", ed1 ); - - ing2.getReferences().put( "2", ed1 ); - - em.getTransaction().commit(); - - // No revision (ing1: adding an existing mapping, ing2: removing a non existing mapping) - em.getTransaction().begin(); - - ing1 = em.find( MapOwningEntity.class, ing1.getId() ); - ing2 = em.find( MapOwningEntity.class, ing2.getId() ); - - ing1.getReferences().put( "1", ed1 ); - - ing2.getReferences().remove( "3" ); - - em.getTransaction().commit(); - - // Revision 3 (ing1: clearing, ing2: replacing with a new map) - em.getTransaction().begin(); - - ing1 = em.find( MapOwningEntity.class, ing1.getId() ); - ed1 = em.find( MapOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().clear(); - ing2.setReferences( new HashMap() ); - ing2.getReferences().put( "1", ed2 ); - - em.getTransaction().commit(); - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwnedEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwnedEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwningEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwningEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - MapOwningEntity ing1 = getEntityManager().find( MapOwningEntity.class, ing1_id ); - MapOwningEntity ing2 = getEntityManager().find( MapOwningEntity.class, ing2_id ); - - MapOwnedEntity rev1 = getAuditReader().find( MapOwnedEntity.class, ed1_id, 1 ); - MapOwnedEntity rev2 = getAuditReader().find( MapOwnedEntity.class, ed1_id, 2 ); - MapOwnedEntity rev3 = getAuditReader().find( MapOwnedEntity.class, ed1_id, 3 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_SET ); - assert rev2.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev3.getReferencing().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdId2() { - MapOwningEntity ing2 = getEntityManager().find( MapOwningEntity.class, ing2_id ); - - MapOwnedEntity rev1 = getAuditReader().find( MapOwnedEntity.class, ed2_id, 1 ); - MapOwnedEntity rev2 = getAuditReader().find( MapOwnedEntity.class, ed2_id, 2 ); - MapOwnedEntity rev3 = getAuditReader().find( MapOwnedEntity.class, ed2_id, 3 ); - - assert rev1.getReferencing().equals( TestTools.makeSet( ing2 ) ); - assert rev2.getReferencing().equals( Collections.EMPTY_SET ); - assert rev3.getReferencing().equals( TestTools.makeSet( ing2 ) ); - } - - @Test - public void testHistoryOfEdIng1() { - MapOwnedEntity ed1 = getEntityManager().find( MapOwnedEntity.class, ed1_id ); - - MapOwningEntity rev1 = getAuditReader().find( MapOwningEntity.class, ing1_id, 1 ); - MapOwningEntity rev2 = getAuditReader().find( MapOwningEntity.class, ing1_id, 2 ); - MapOwningEntity rev3 = getAuditReader().find( MapOwningEntity.class, ing1_id, 3 ); - - assert rev1.getReferences().equals( Collections.EMPTY_MAP ); - assert rev2.getReferences().equals( TestTools.makeMap( "1", ed1, "2", ed1 ) ); - assert rev3.getReferences().equals( Collections.EMPTY_MAP ); - } - - @Test - public void testHistoryOfEdIng2() { - MapOwnedEntity ed1 = getEntityManager().find( MapOwnedEntity.class, ed1_id ); - MapOwnedEntity ed2 = getEntityManager().find( MapOwnedEntity.class, ed2_id ); - - MapOwningEntity rev1 = getAuditReader().find( MapOwningEntity.class, ing2_id, 1 ); - MapOwningEntity rev2 = getAuditReader().find( MapOwningEntity.class, ing2_id, 2 ); - MapOwningEntity rev3 = getAuditReader().find( MapOwningEntity.class, ing2_id, 3 ); - - assert rev1.getReferences().equals( TestTools.makeMap( "2", ed2 ) ); - assert rev2.getReferences().equals( TestTools.makeMap( "2", ed1 ) ); - assert rev3.getReferences().equals( TestTools.makeMap( "1", ed2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java deleted file mode 100644 index d0cb0eaf8e52..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.SetOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.SetOwningEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSet extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetOwningEntity.class, SetOwnedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetOwnedEntity ed1 = new SetOwnedEntity( 1, "data_ed_1" ); - SetOwnedEntity ed2 = new SetOwnedEntity( 2, "data_ed_2" ); - - SetOwningEntity ing1 = new SetOwningEntity( 3, "data_ing_1" ); - SetOwningEntity ing2 = new SetOwningEntity( 4, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - ing2 = em.find( SetOwningEntity.class, ing2.getId() ); - ed1 = em.find( SetOwnedEntity.class, ed1.getId() ); - ed2 = em.find( SetOwnedEntity.class, ed2.getId() ); - - ing1.setReferences( new HashSet() ); - ing1.getReferences().add( ed1 ); - - ing2.setReferences( new HashSet() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - ed2 = em.find( SetOwnedEntity.class, ed2.getId() ); - ed1 = em.find( SetOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - ed2 = em.find( SetOwnedEntity.class, ed2.getId() ); - ed1 = em.find( SetOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().remove( ed1 ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( SetOwnedEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3, 5 ).equals( getAuditReader().getRevisions( SetOwnedEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( SetOwningEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetOwningEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - SetOwningEntity ing1 = getEntityManager().find( SetOwningEntity.class, ing1_id ); - SetOwningEntity ing2 = getEntityManager().find( SetOwningEntity.class, ing2_id ); - - SetOwnedEntity rev1 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 1 ); - SetOwnedEntity rev2 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 2 ); - SetOwnedEntity rev3 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 3 ); - SetOwnedEntity rev4 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 4 ); - SetOwnedEntity rev5 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_SET ); - assert rev2.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev3.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev4.getReferencing().equals( TestTools.makeSet( ing2 ) ); - assert rev5.getReferencing().equals( TestTools.makeSet( ing2 ) ); - } - - @Test - public void testHistoryOfEdId2() { - SetOwningEntity ing1 = getEntityManager().find( SetOwningEntity.class, ing1_id ); - SetOwningEntity ing2 = getEntityManager().find( SetOwningEntity.class, ing2_id ); - - SetOwnedEntity rev1 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 1 ); - SetOwnedEntity rev2 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 2 ); - SetOwnedEntity rev3 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 3 ); - SetOwnedEntity rev4 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 4 ); - SetOwnedEntity rev5 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_SET ); - assert rev2.getReferencing().equals( TestTools.makeSet( ing2 ) ); - assert rev3.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev4.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev5.getReferencing().equals( TestTools.makeSet( ing2 ) ); - } - - @Test - public void testHistoryOfEdIng1() { - SetOwnedEntity ed1 = getEntityManager().find( SetOwnedEntity.class, ed1_id ); - SetOwnedEntity ed2 = getEntityManager().find( SetOwnedEntity.class, ed2_id ); - - SetOwningEntity rev1 = getAuditReader().find( SetOwningEntity.class, ing1_id, 1 ); - SetOwningEntity rev2 = getAuditReader().find( SetOwningEntity.class, ing1_id, 2 ); - SetOwningEntity rev3 = getAuditReader().find( SetOwningEntity.class, ing1_id, 3 ); - SetOwningEntity rev4 = getAuditReader().find( SetOwningEntity.class, ing1_id, 4 ); - SetOwningEntity rev5 = getAuditReader().find( SetOwningEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed2 ) ); - assert rev5.getReferences().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdIng2() { - SetOwnedEntity ed1 = getEntityManager().find( SetOwnedEntity.class, ed1_id ); - SetOwnedEntity ed2 = getEntityManager().find( SetOwnedEntity.class, ed2_id ); - - SetOwningEntity rev1 = getAuditReader().find( SetOwningEntity.class, ing2_id, 1 ); - SetOwningEntity rev2 = getAuditReader().find( SetOwningEntity.class, ing2_id, 2 ); - SetOwningEntity rev3 = getAuditReader().find( SetOwningEntity.class, ing2_id, 3 ); - SetOwningEntity rev4 = getAuditReader().find( SetOwningEntity.class, ing2_id, 4 ); - SetOwningEntity rev5 = getAuditReader().find( SetOwningEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev5.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java deleted file mode 100644 index 0761850e525c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.Set; - -import org.hibernate.annotations.SQLRestriction; -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.Table; - -import static org.junit.Assert.assertEquals; - -/** - * Provides test cases for the following {@link ManyToMany} mapping with {@linkplain SQLRestriction} - * - * @author Chris Cranford - */ -@JiraKey("HHH-9432") -@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") -public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase { - private Integer aId; - private Integer xId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityA.class, - EntityB.class, - EntityC.class, - EntityX.class, - EntityY.class, - EntityZ.class - }; - } - - @Test - @Priority(10) - public void initData() { - aId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = new EntityA(); - a.setName( "a" ); - entityManager.persist( a ); - return a.getId(); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = entityManager.find( EntityA.class, aId ); - final EntityC c = new EntityC(); - c.setName( "c" ); - a.getAllMyC().add( c ); - entityManager.persist( c ); - entityManager.merge( a ); - } ); - - xId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityX x = new EntityX(); - x.setName( "x" ); - entityManager.persist( x ); - return x.getId(); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityX x = entityManager.find( EntityX.class, xId ); - final EntityZ z = new EntityZ(); - z.setName( "z" ); - x.getAllMyZ().add( z ); - entityManager.persist( z ); - entityManager.merge( x ); - } ); - } - - @Test - public void testWherePredicateWithAuditJoinTable() { - final EntityA a = getAuditReader().find( EntityA.class, aId, 2 ); - assertEquals( 1, a.getAllMyC().size() ); - } - - @Test - public void testWherePredicateWithoutAuditJoinTable() { - final EntityX x = getAuditReader().find( EntityX.class, xId, 4 ); - assertEquals( 1, x.getAllMyZ().size() ); - } - - @Audited - @Entity(name = "EntityA") - @Table(name = "a_tab") - public static class EntityA { - @Id - @GeneratedValue - private Integer id; - private String name; - - @ManyToMany - @JoinTable(joinColumns = @JoinColumn(name = "allC")) - @SQLRestriction("type = 'C'") - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @AuditJoinTable(name = "A_C_AUD") - private Set allMyC; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getAllMyC() { - return allMyC; - } - - public void setAllMyC(Set allMyC) { - this.allMyC = allMyC; - } - } - - @Audited - @Entity(name = "EntityB") - @Table(name = "b_tab") - @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) - @DiscriminatorValue( value = "B") - public static class EntityB { - @Id - @GeneratedValue - private Integer id; - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityC") - @DiscriminatorValue(value = "C") - public static class EntityC extends EntityB { - - } - - @Audited - @Entity(name = "EntityX") - @Table(name = "x_tab") - public static class EntityX { - @Id - @GeneratedValue - private Integer id; - private String name; - - @ManyToMany - @SQLRestriction("type = 'Z'") - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Set allMyZ; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getAllMyZ() { - return allMyZ; - } - - public void setAllMyZ(Set allMyZ) { - this.allMyZ = allMyZ; - } - } - - @Entity(name = "EntityY") - @Table(name = "y_tab") - @Audited - @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) - @DiscriminatorValue(value = "Y") - public static class EntityY { - @Id - @GeneratedValue - private Integer id; - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityZ") - @DiscriminatorValue(value = "Z") - public static class EntityZ extends EntityY { - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java deleted file mode 100644 index d09b34dc2e78..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.Arrays; -import java.util.Iterator; -import java.util.Map; -import java.util.SortedMap; -import java.util.SortedSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntityComparator; -import org.hibernate.orm.test.envers.entities.manytomany.SortedSetEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Michal Skowronek (mskowr at o2 pl) - */ -public class CustomComparatorEntityTest extends BaseEnversJPAFunctionalTestCase { - - private Integer id1; - private Integer id2; - private Integer id3; - private Integer id4; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SortedSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SortedSetEntity entity1 = new SortedSetEntity( 1, "sortedEntity1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( entity1 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity1 = new StrTestEntity( "abc" ); - em.persist( strTestEntity1 ); - id1 = strTestEntity1.getId(); - entity1.getSortedSet().add( strTestEntity1 ); - entity1.getSortedMap().put( strTestEntity1, "abc" ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity2 = new StrTestEntity( "aaa" ); - em.persist( strTestEntity2 ); - id2 = strTestEntity2.getId(); - entity1.getSortedSet().add( strTestEntity2 ); - entity1.getSortedMap().put( strTestEntity2, "aaa" ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity3 = new StrTestEntity( "aba" ); - em.persist( strTestEntity3 ); - id3 = strTestEntity3.getId(); - entity1.getSortedSet().add( strTestEntity3 ); - entity1.getSortedMap().put( strTestEntity3, "aba" ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity4 = new StrTestEntity( "aac" ); - em.persist( strTestEntity4 ); - id4 = strTestEntity4.getId(); - entity1.getSortedSet().add( strTestEntity4 ); - entity1.getSortedMap().put( strTestEntity4, "aac" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( SortedSetEntity.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( StrTestEntity.class, id1 ) ); - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( StrTestEntity.class, id2 ) ); - assertEquals( Arrays.asList( 4 ), getAuditReader().getRevisions( StrTestEntity.class, id3 ) ); - assertEquals( Arrays.asList( 5 ), getAuditReader().getRevisions( StrTestEntity.class, id4 ) ); - } - - @Test - public void testCurrentStateOfEntity1() { - final SortedSetEntity entity1 = getEntityManager().find( SortedSetEntity.class, 1 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - final SortedSet sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 4, sortedSet.size() ); - final Iterator iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id4, "aac" ); - checkStrTestEntity( iterator.next(), id3, "aba" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - final SortedMap sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 4, sortedMap.size() ); - Iterator> mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id4, "aac" ); - checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "aac" ); - assertEquals( mapIterator.next().getValue(), "aba" ); - assertEquals( mapIterator.next().getValue(), "abc" ); - } - - private void checkStrTestEntity(StrTestEntity entity, Integer id, String sortKey) { - assertEquals( id, entity.getId() ); - assertEquals( sortKey, entity.getStr() ); - } - - @Test - public void testHistoryOfEntity1() throws Exception { - SortedSetEntity entity1 = getAuditReader().find( SortedSetEntity.class, 1, 1 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - SortedSet sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 0, sortedSet.size() ); - - SortedMap sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 0, sortedMap.size() ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 2 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 1, sortedSet.size() ); - Iterator iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 1, sortedMap.size() ); - Iterator> mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "abc" ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 3 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 2, sortedSet.size() ); - iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 2, sortedMap.size() ); - mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "abc" ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 4 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 3, sortedSet.size() ); - iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id3, "aba" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 3, sortedMap.size() ); - mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "aba" ); - assertEquals( mapIterator.next().getValue(), "abc" ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 5 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 4, sortedSet.size() ); - iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id4, "aac" ); - checkStrTestEntity( iterator.next(), id3, "aba" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 4, sortedMap.size() ); - mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id4, "aac" ); - checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "aac" ); - assertEquals( mapIterator.next().getValue(), "aba" ); - assertEquals( mapIterator.next().getValue(), "abc" ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java deleted file mode 100644 index c5f98d18cb53..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java +++ /dev/null @@ -1,278 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7940") -public class IndexColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Parent p = new Parent( 1 ); - p.addChild( new Child( 1, "child1" ) ); - p.addChild( new Child( 2, "child2" ) ); - entityManager.persist( p ); - p.getChildren().forEach( entityManager::persist ); - } ); - - // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // should remove child with id 1 - p.removeChild( p.getChildren().get( 0 ) ); - entityManager.merge( p ); - } ); - - // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // add child with id 3 - final Child child = new Child( 3, "child3" ); - p.getChildren().add( 0, child ); - child.getParents().add( p ); - entityManager.persist( child ); - entityManager.merge( p ); - } ); - - // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - while ( !p.getChildren().isEmpty() ) { - Child child = p.getChildren().get( 0 ); - p.removeChild( child ); - entityManager.remove( child ); - } - entityManager.merge( p ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); - } - - @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); - } - - @Audited - @Entity(name = "Parent") - public static class Parent { - @Id - private Integer id; - - @ManyToMany - @OrderColumn(name = "`index`") - private List children = new ArrayList(); - - Parent() { - - } - - Parent(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public void addChild(Child child) { - child.getParents().add( this ); - getChildren().add( child ); - } - - public void removeChild(Child child) { - child.getParents().remove( this ); - getChildren().remove( child ); - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Parent parent = (Parent) o; - - return id != null ? id.equals( parent.id ) : parent.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "Parent{" + - "id=" + id + - '}'; - } - } - - @Audited - @Entity(name = "Child") - public static class Child { - @Id - private Integer id; - private String name; - - @ManyToMany(mappedBy = "children") - private List parents; - - Child() { - - } - - Child(Integer id, String name) { - this( id, name, null ); - } - - Child(Integer id, String name, Parent... parents) { - this.id = id; - this.name = name; - if ( parents != null && parents.length > 0 ) { - this.parents = new ArrayList<>( Arrays.asList( parents ) ); - } - else { - this.parents = new ArrayList<>(); - } - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getParents() { - return parents; - } - - public void setParent(List parent) { - this.parents = parents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Child child = (Child) o; - - if ( id != null ? !id.equals( child.id ) : child.id != null ) { - return false; - } - if ( name != null ? !name.equals( child.name ) : child.name != null ) { - return false; - } - return parents != null ? parents.equals( child.parents ) : child.parents == null; - - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( parents != null ? parents.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "Child{" + - "id=" + id + - ", name='" + name + '\'' + - ", parents=" + parents + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java deleted file mode 100644 index ef08be65da4d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; - -import org.hamcrest.BaseMatcher; -import org.hamcrest.Description; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hamcrest.CoreMatchers.hasItem; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12240") -public class MappedByEmbeddableAttributeTest extends BaseEnversJPAFunctionalTestCase { - - @Audited - @Entity(name = "EntityA") - public static class EntityA { - @Id - @GeneratedValue - private Integer id; - private String name; - @Embedded - private Container container; - - EntityA() { - - } - - EntityA(String name) { - this( name, new Container() ); - } - - EntityA(String name, Container container) { - this.name = name; - this.container = container; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Container getContainer() { - return container; - } - - public void setContainer(Container container) { - this.container = container; - } - } - - @Embeddable - public static class Container { - @ManyToMany - private List bList = new ArrayList<>(); - - public List getbList() { - return bList; - } - - public void setbList(List bList) { - this.bList = bList; - } - } - - @Audited - @Entity(name = "EntityB") - public static class EntityB { - @Id - @GeneratedValue - private Integer id; - private String name; - @ManyToMany(mappedBy = "container.bList") - private List aList = new ArrayList<>(); - - EntityB() { - - } - - EntityB(String name, EntityA... objects) { - this.name = name; - if ( objects.length > 0 ) { - for ( EntityA a : objects ) { - this.aList.add( a ); - a.getContainer().getbList().add( this ); - } - } - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getaList() { - return aList; - } - - public void setaList(List aList) { - this.aList = aList; - } - } - - private static class EntityBNameMatcher extends BaseMatcher { - - private final String expectedValue; - - public EntityBNameMatcher(String name) { - this.expectedValue = name; - } - - @Override - public boolean matches(Object item) { - if ( !( item instanceof EntityB ) ) { - return false; - } - - EntityB entityB = (EntityB) item; - return Objects.equals( entityB.getName(), this.expectedValue ); - } - - @Override - public void describeTo(Description description) { - description.appendText( "an instance of " ).appendText( EntityB.class.getName() ).appendText( " named " ).appendValue( this.expectedValue ); - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityA.class, EntityB.class }; - } - - private Integer aId; - private Integer bId1; - private Integer bId2; - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = new EntityA( "A" ); - final EntityB b = new EntityB( "B", a ); - entityManager.persist( a ); - entityManager.persist( b ); - - this.aId = a.getId(); - this.bId1 = b.getId(); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = entityManager.find( EntityA.class, this.aId ); - for ( EntityB b : a.getContainer().getbList() ) { - b.setName( b.getName() + "-Updated" ); - entityManager.merge( b ); - } - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = entityManager.find( EntityA.class, this.aId ); - final EntityB b = new EntityB( "B2", a ); - entityManager.persist( b ); - entityManager.merge( a ); - - this.bId2 = b.getId(); - } ); - } - - @Test - public void testRevisionHistoryEntityA() { - List aRevisions = getAuditReader().getRevisions( EntityA.class, this.aId ); - assertEquals( Arrays.asList( 1, 3 ), aRevisions ); - - EntityA rev1 = getAuditReader().find( EntityA.class, this.aId, 1 ); - assertEquals( 1, rev1.getContainer().getbList().size() ); - assertEquals( "B", rev1.getContainer().getbList().get( 0 ).getName() ); - - EntityA rev3 = getAuditReader().find( EntityA.class, this.aId, 3 ); - assertEquals( 2, rev3.getContainer().getbList().size() ); - assertThat( rev3.getContainer().getbList(), hasItem( new EntityBNameMatcher( "B-Updated" ) ) ); - assertThat( rev3.getContainer().getbList(), hasItem( new EntityBNameMatcher( "B2" ) ) ); - - } - - @Test - public void testRevisionHistoryEntityB() { - List b1Revisions = getAuditReader().getRevisions( EntityB.class, this.bId1 ); - assertEquals( Arrays.asList( 1, 2 ), b1Revisions ); - - EntityB b1Rev1 = getAuditReader().find( EntityB.class, this.bId1, 1 ); - assertEquals( "B", b1Rev1.getName() ); - assertEquals( 1, b1Rev1.getaList().size() ); - assertEquals( this.aId, b1Rev1.getaList().get( 0 ).getId() ); - - EntityB b1Rev2 = getAuditReader().find( EntityB.class, this.bId1, 2 ); - assertEquals( "B-Updated", b1Rev2.getName() ); - assertEquals( 1, b1Rev1.getaList().size() ); - assertEquals( this.aId, b1Rev1.getaList().get( 0 ).getId() ); - - List b2Revisions = getAuditReader().getRevisions( EntityB.class, this.bId2 ); - assertEquals( Arrays.asList( 3 ), b2Revisions ); - - EntityB b2Rev3 = getAuditReader().find( EntityB.class, this.bId2, 3 ); - assertEquals( "B2", b2Rev3.getName() ); - assertEquals( 1, b2Rev3.getaList().size() ); - assertEquals( this.aId, b2Rev3.getaList().get( 0 ).getId() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java deleted file mode 100644 index fd9d2f0cbe87..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java +++ /dev/null @@ -1,278 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7940") -public class OrderColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Parent p = new Parent( 1 ); - p.addChild( new Child( 1, "child1" ) ); - p.addChild( new Child( 2, "child2" ) ); - entityManager.persist( p ); - p.getChildren().forEach( entityManager::persist ); - } ); - - // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // should remove child with id 1 - p.removeChild( p.getChildren().get( 0 ) ); - entityManager.merge( p ); - } ); - - // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // add child with id 3 - final Child child = new Child( 3, "child3" ); - p.getChildren().add( 0, child ); - child.getParents().add( p ); - entityManager.persist( child ); - entityManager.merge( p ); - } ); - - // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - while ( !p.getChildren().isEmpty() ) { - Child child = p.getChildren().get( 0 ); - p.removeChild( child ); - entityManager.remove( child ); - } - entityManager.merge( p ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); - } - - @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); - } - - @Audited - @Entity(name = "Parent") - public static class Parent { - @Id - private Integer id; - - @ManyToMany - @OrderColumn - private List children = new ArrayList(); - - Parent() { - - } - - Parent(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public void addChild(Child child) { - child.getParents().add( this ); - getChildren().add( child ); - } - - public void removeChild(Child child) { - child.getParents().remove( this ); - getChildren().remove( child ); - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Parent parent = (Parent) o; - - return id != null ? id.equals( parent.id ) : parent.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "Parent{" + - "id=" + id + - '}'; - } - } - - @Audited - @Entity(name = "Child") - public static class Child { - @Id - private Integer id; - private String name; - - @ManyToMany(mappedBy = "children") - private List parents; - - Child() { - - } - - Child(Integer id, String name) { - this( id, name, null ); - } - - Child(Integer id, String name, Parent... parents) { - this.id = id; - this.name = name; - if ( parents != null && parents.length > 0 ) { - this.parents = new ArrayList<>( Arrays.asList( parents ) ); - } - else { - this.parents = new ArrayList<>(); - } - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getParents() { - return parents; - } - - public void setParent(List parent) { - this.parents = parents; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Child child = (Child) o; - - if ( id != null ? !id.equals( child.id ) : child.id != null ) { - return false; - } - if ( name != null ? !name.equals( child.name ) : child.name != null ) { - return false; - } - return parents != null ? parents.equals( child.parents ) : child.parents == null; - - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( parents != null ? parents.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "Child{" + - "id=" + id + - ", name='" + name + '\'' + - ", parents=" + parents + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java deleted file mode 100644 index acc36c0aa336..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.biowned; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.biowned.ListBiowning1Entity; -import org.hibernate.orm.test.envers.entities.manytomany.biowned.ListBiowning2Entity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicBiowned extends BaseEnversJPAFunctionalTestCase { - private Integer o1_1_id; - private Integer o1_2_id; - private Integer o2_1_id; - private Integer o2_2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListBiowning1Entity.class, ListBiowning2Entity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListBiowning1Entity o1_1 = new ListBiowning1Entity( "o1_1" ); - ListBiowning1Entity o1_2 = new ListBiowning1Entity( "o1_2" ); - ListBiowning2Entity o2_1 = new ListBiowning2Entity( "o2_1" ); - ListBiowning2Entity o2_2 = new ListBiowning2Entity( "o2_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( o1_1 ); - em.persist( o1_2 ); - em.persist( o2_1 ); - em.persist( o2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 (1_1 <-> 2_1; 1_2 <-> 2_2) - - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o1_2 = em.find( ListBiowning1Entity.class, o1_2.getId() ); - o2_1 = em.find( ListBiowning2Entity.class, o2_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o1_1.getReferences().add( o2_1 ); - o1_2.getReferences().add( o2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (1_1 <-> 2_1, 2_2; 1_2 <-> 2_2) - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o1_1.getReferences().add( o2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (1_2 <-> 2_1, 2_2) - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o1_2 = em.find( ListBiowning1Entity.class, o1_2.getId() ); - o2_1 = em.find( ListBiowning2Entity.class, o2_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o2_2.getReferences().remove( o1_1 ); - o2_1.getReferences().remove( o1_1 ); - o2_1.getReferences().add( o1_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 5 (1_1 <-> 2_2, 1_2 <-> 2_2) - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o1_2 = em.find( ListBiowning1Entity.class, o1_2.getId() ); - o2_1 = em.find( ListBiowning2Entity.class, o2_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o1_2.getReferences().remove( o2_1 ); - o1_1.getReferences().add( o2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - o1_1_id = o1_1.getId(); - o1_2_id = o1_2.getId(); - o2_1_id = o2_1.getId(); - o2_2_id = o2_2.getId(); - } - - @Test - public void testRevisionsCounts() { - // Although it would seem that when modifying references both entities should be marked as modified, because - // ownly the owning side is notified (because of the bi-owning mapping), a revision is created only for - // the entity where the collection was directly modified. - - assertEquals( - Arrays.asList( 1, 2, 3, 5 ), getAuditReader().getRevisions( - ListBiowning1Entity.class, - o1_1_id - ) - ); - assertEquals( Arrays.asList( 1, 2, 5 ), getAuditReader().getRevisions( ListBiowning1Entity.class, o1_2_id ) ); - - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( ListBiowning2Entity.class, o2_1_id ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( ListBiowning2Entity.class, o2_2_id ) ); - } - - @Test - public void testHistoryOfO1_1() { - ListBiowning2Entity o2_1 = getEntityManager().find( ListBiowning2Entity.class, o2_1_id ); - ListBiowning2Entity o2_2 = getEntityManager().find( ListBiowning2Entity.class, o2_2_id ); - - ListBiowning1Entity rev1 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 1 ); - ListBiowning1Entity rev2 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 2 ); - ListBiowning1Entity rev3 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 3 ); - ListBiowning1Entity rev4 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 4 ); - ListBiowning1Entity rev5 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o2_1 ); - assert TestTools.checkCollection( rev3.getReferences(), o2_1, o2_2 ); - assert TestTools.checkCollection( rev4.getReferences() ); - assert TestTools.checkCollection( rev5.getReferences(), o2_2 ); - } - - @Test - public void testHistoryOfO1_2() { - ListBiowning2Entity o2_1 = getEntityManager().find( ListBiowning2Entity.class, o2_1_id ); - ListBiowning2Entity o2_2 = getEntityManager().find( ListBiowning2Entity.class, o2_2_id ); - - ListBiowning1Entity rev1 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 1 ); - ListBiowning1Entity rev2 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 2 ); - ListBiowning1Entity rev3 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 3 ); - ListBiowning1Entity rev4 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 4 ); - ListBiowning1Entity rev5 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o2_2 ); - assert TestTools.checkCollection( rev3.getReferences(), o2_2 ); - assert TestTools.checkCollection( rev4.getReferences(), o2_1, o2_2 ); - assert TestTools.checkCollection( rev5.getReferences(), o2_2 ); - } - - @Test - public void testHistoryOfO2_1() { - ListBiowning1Entity o1_1 = getEntityManager().find( ListBiowning1Entity.class, o1_1_id ); - ListBiowning1Entity o1_2 = getEntityManager().find( ListBiowning1Entity.class, o1_2_id ); - - ListBiowning2Entity rev1 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 1 ); - ListBiowning2Entity rev2 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 2 ); - ListBiowning2Entity rev3 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 3 ); - ListBiowning2Entity rev4 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 4 ); - ListBiowning2Entity rev5 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o1_1 ); - assert TestTools.checkCollection( rev3.getReferences(), o1_1 ); - assert TestTools.checkCollection( rev4.getReferences(), o1_2 ); - assert TestTools.checkCollection( rev5.getReferences() ); - } - - @Test - public void testHistoryOfO2_2() { - ListBiowning1Entity o1_1 = getEntityManager().find( ListBiowning1Entity.class, o1_1_id ); - ListBiowning1Entity o1_2 = getEntityManager().find( ListBiowning1Entity.class, o1_2_id ); - - ListBiowning2Entity rev1 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 1 ); - ListBiowning2Entity rev2 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 2 ); - ListBiowning2Entity rev3 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 3 ); - ListBiowning2Entity rev4 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 4 ); - ListBiowning2Entity rev5 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o1_2 ); - assert TestTools.checkCollection( rev3.getReferences(), o1_1, o1_2 ); - assert TestTools.checkCollection( rev4.getReferences(), o1_2 ); - assert TestTools.checkCollection( rev5.getReferences(), o1_1, o1_2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSubclass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSubclass.java deleted file mode 100644 index fec3ec8fa6cd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSubclass.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.inverseToSuperclass; - -import org.hibernate.envers.Audited; - -@Audited -public class DetailSubclass extends DetailSuperclass { - - private String str2; - - public DetailSubclass() { - - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSubclass2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSubclass2.java deleted file mode 100644 index 657c495a835a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSubclass2.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.inverseToSuperclass; - -import org.hibernate.envers.Audited; - -@Audited -public class DetailSubclass2 extends DetailSubclass { - - private String str3; - - public DetailSubclass2() { - - } - - public String getStr3() { - return str3; - } - - public void setStr3(String str3) { - this.str3 = str3; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSuperclass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSuperclass.java deleted file mode 100644 index 09b67c392311..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/DetailSuperclass.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.inverseToSuperclass; - -import java.util.List; - -import org.hibernate.envers.Audited; - -@Audited -public class DetailSuperclass { - - private long id; - - private List roots; - - public DetailSuperclass() { - - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public List getRoots() { - return roots; - } - - public void setRoots(List roots) { - this.roots = roots; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java deleted file mode 100644 index 03b5ca5e6488..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.inverseToSuperclass; - -import java.util.ArrayList; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hern�n Chanfreau - */ -public class ManyToManyInverseToSuperclassTest extends BaseEnversJPAFunctionalTestCase { - private long m1_id; - - @Override - protected String[] getMappings() { - return new String[] {"mappings/manyToMany/inverseToSuperclass/mappings.hbm.xml"}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - Root m1 = new Root(); - DetailSubclass det1 = new DetailSubclass2(); - - // Revision 1 - em.getTransaction().begin(); - - det1.setStr2( "detail 1" ); - - m1.setStr( "root" ); - m1.setItems( new ArrayList() ); - m1.getItems().add( det1 ); - - det1.setRoots( new ArrayList() ); - det1.getRoots().add( m1 ); - - em.persist( m1 ); - em.getTransaction().commit(); - m1_id = m1.getId(); - } - - @Test - public void testHistoryExists() { - Root rev1_1 = getAuditReader().find( Root.class, m1_id, 1 ); - Root rev1_2 = getAuditReader().find( Root.class, m1_id, 2 ); - Root rev1_3 = getAuditReader().find( Root.class, m1_id, 3 ); - Root rev1_4 = getAuditReader().find( Root.class, m1_id, 4 ); - - assert (rev1_1 != null); - assert (rev1_2 != null); - assert (rev1_3 != null); - assert (rev1_4 != null); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/Root.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/Root.java deleted file mode 100644 index 75d8a6140ef5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/Root.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.inverseToSuperclass; - -import java.util.List; - -import org.hibernate.envers.Audited; - -@Audited -public class Root { - - private long id; - - private String str; - - private List items; - - public Root() { - - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java deleted file mode 100644 index f509b33ec113..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.sametable; - -import java.sql.Types; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child1Entity; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child2Entity; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Test which checks that auditing entities which contain multiple mappings to same tables work. - * - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSametable extends BaseEnversJPAFunctionalTestCase { - private Integer p1_id; - private Integer p2_id; - private Integer c1_1_id; - private Integer c1_2_id; - private Integer c2_1_id; - private Integer c2_2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ParentEntity.class, Child1Entity.class, Child2Entity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() - .getDdlTypeRegistry(); - - em.getTransaction().begin(); - Session session = (Session) em.getDelegate(); - session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); - session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); - em.getTransaction().commit(); - em.clear(); - - // We need first to modify the columns in the middle (join table) to allow null values. Hbm2ddl doesn't seem - // to allow this. - em.getTransaction().begin(); - session = (Session) em.getDelegate(); - session.createNativeQuery( - "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ).executeUpdate(); - session.createNativeQuery( - "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + " NOT NULL" + - ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, getDialect() ) + - ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ).executeUpdate(); - em.getTransaction().commit(); - em.clear(); - - ParentEntity p1 = new ParentEntity( "parent_1" ); - ParentEntity p2 = new ParentEntity( "parent_2" ); - - Child1Entity c1_1 = new Child1Entity( "child1_1" ); - Child1Entity c1_2 = new Child1Entity( "child1_2" ); - - Child2Entity c2_1 = new Child2Entity( "child2_1" ); - Child2Entity c2_2 = new Child2Entity( "child2_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( p1 ); - em.persist( p2 ); - em.persist( c1_1 ); - em.persist( c1_2 ); - em.persist( c2_1 ); - em.persist( c2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 - (p1: c1_1, p2: c2_1) - - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_1 = em.find( Child2Entity.class, c2_1.getId() ); - - p1.getChildren1().add( c1_1 ); - p2.getChildren2().add( c2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 - (p1: c1_1, c1_2, c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - p1.getChildren1().add( c1_2 ); - p1.getChildren2().add( c2_2 ); - - p2.getChildren1().add( c1_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 - (p1: c1_2, c2_2, p2: c1_1, c2_1, c2_2) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - p1.getChildren1().remove( c1_1 ); - p2.getChildren2().add( c2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 5 - (p1: c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - c2_2.getParents().remove( p2 ); - c1_2.getParents().remove( p1 ); - - em.getTransaction().commit(); - em.clear(); - - // - - p1_id = p1.getId(); - p2_id = p2.getId(); - c1_1_id = c1_1.getId(); - c1_2_id = c1_2.getId(); - c2_1_id = c2_1.getId(); - c2_2_id = c2_2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( ParentEntity.class, p1_id ) ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( ParentEntity.class, p2_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Child1Entity.class, c1_1_id ) ); - assert Arrays.asList( 1, 5 ).equals( getAuditReader().getRevisions( Child1Entity.class, c1_2_id ) ); - - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Child2Entity.class, c2_1_id ) ); - Assert.assertEquals( Arrays.asList( 1, 5 ), getAuditReader().getRevisions( Child2Entity.class, c2_2_id ) ); - } - - @Test - public void testHistoryOfParent1() { - Child1Entity c1_1 = getEntityManager().find( Child1Entity.class, c1_1_id ); - Child1Entity c1_2 = getEntityManager().find( Child1Entity.class, c1_2_id ); - Child2Entity c2_2 = getEntityManager().find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p1_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p1_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p1_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p1_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p1_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); - assert TestTools.checkCollection( rev5.getChildren1() ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2() ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); - } - - @Test - public void testHistoryOfParent2() { - Child1Entity c1_1 = getEntityManager().find( Child1Entity.class, c1_1_id ); - Child2Entity c2_1 = getEntityManager().find( Child2Entity.class, c2_1_id ); - Child2Entity c2_2 = getEntityManager().find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p2_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p2_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p2_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p2_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p2_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1() ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); - } - - @Test - public void testHistoryOfChild1_1() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child1Entity rev1 = getAuditReader().find( Child1Entity.class, c1_1_id, 1 ); - Child1Entity rev2 = getAuditReader().find( Child1Entity.class, c1_1_id, 2 ); - Child1Entity rev3 = getAuditReader().find( Child1Entity.class, c1_1_id, 3 ); - Child1Entity rev4 = getAuditReader().find( Child1Entity.class, c1_1_id, 4 ); - Child1Entity rev5 = getAuditReader().find( Child1Entity.class, c1_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p1 ); - assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); - } - - // TODO: was disabled? - @Test - public void testHistoryOfChild1_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - - Child1Entity rev1 = getAuditReader().find( Child1Entity.class, c1_2_id, 1 ); - Child1Entity rev2 = getAuditReader().find( Child1Entity.class, c1_2_id, 2 ); - Child1Entity rev3 = getAuditReader().find( Child1Entity.class, c1_2_id, 3 ); - Child1Entity rev4 = getAuditReader().find( Child1Entity.class, c1_2_id, 4 ); - Child1Entity rev5 = getAuditReader().find( Child1Entity.class, c1_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1 ); - assert TestTools.checkCollection( rev5.getParents() ); - } - - @Test - public void testHistoryOfChild2_1() { - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( Child2Entity.class, c2_1_id, 1 ); - Child2Entity rev2 = getAuditReader().find( Child2Entity.class, c2_1_id, 2 ); - Child2Entity rev3 = getAuditReader().find( Child2Entity.class, c2_1_id, 3 ); - Child2Entity rev4 = getAuditReader().find( Child2Entity.class, c2_1_id, 4 ); - Child2Entity rev5 = getAuditReader().find( Child2Entity.class, c2_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p2 ); - assert TestTools.checkCollection( rev3.getParents(), p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); - } - - @Test - public void testHistoryOfChild2_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( Child2Entity.class, c2_2_id, 1 ); - Child2Entity rev2 = getAuditReader().find( Child2Entity.class, c2_2_id, 2 ); - Child2Entity rev3 = getAuditReader().find( Child2Entity.class, c2_2_id, 3 ); - Child2Entity rev4 = getAuditReader().find( Child2Entity.class, c2_2_id, 4 ); - Child2Entity rev5 = getAuditReader().find( Child2Entity.class, c2_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev5.getParents(), p1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java deleted file mode 100644 index 91bfa05ae71a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.ternary; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.HSQLDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; -import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class TernaryMap extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - - private Integer int1_id; - private Integer int2_id; - - private Integer map1_id; - private Integer map2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestPrivSeqEntity str1 = new StrTestPrivSeqEntity( "a" ); - StrTestPrivSeqEntity str2 = new StrTestPrivSeqEntity( "b" ); - - IntTestPrivSeqEntity int1 = new IntTestPrivSeqEntity( 1 ); - IntTestPrivSeqEntity int2 = new IntTestPrivSeqEntity( 2 ); - - TernaryMapEntity map1 = new TernaryMapEntity(); - TernaryMapEntity map2 = new TernaryMapEntity(); - - // Revision 1 (map1: initialy one mapping int1 -> str1, map2: empty) - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - em.persist( int1 ); - em.persist( int2 ); - - map1.getMap().put( int1, str1 ); - - em.persist( map1 ); - em.persist( map2 ); - - em.getTransaction().commit(); - - // Revision 2 (map1: replacing the mapping, map2: adding two mappings) - - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - map2 = em.find( TernaryMapEntity.class, map2.getId() ); - - str1 = em.find( StrTestPrivSeqEntity.class, str1.getId() ); - str2 = em.find( StrTestPrivSeqEntity.class, str2.getId() ); - - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - int2 = em.find( IntTestPrivSeqEntity.class, int2.getId() ); - - map1.getMap().put( int1, str2 ); - - map2.getMap().put( int1, str1 ); - map2.getMap().put( int2, str1 ); - - em.getTransaction().commit(); - - // Revision 3 (map1: removing a non-existing mapping, adding an existing mapping - no changes, map2: removing a mapping) - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - map2 = em.find( TernaryMapEntity.class, map2.getId() ); - - str2 = em.find( StrTestPrivSeqEntity.class, str2.getId() ); - - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - int2 = em.find( IntTestPrivSeqEntity.class, int2.getId() ); - - map1.getMap().remove( int2 ); - map1.getMap().put( int1, str2 ); - - map2.getMap().remove( int1 ); - - em.getTransaction().commit(); - - // Revision 4 (map1: adding a mapping, map2: adding a mapping) - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - map2 = em.find( TernaryMapEntity.class, map2.getId() ); - - str2 = em.find( StrTestPrivSeqEntity.class, str2.getId() ); - - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - int2 = em.find( IntTestPrivSeqEntity.class, int2.getId() ); - - map1.getMap().put( int2, str2 ); - - map2.getMap().put( int1, str2 ); - - em.getTransaction().commit(); - // - - map1_id = map1.getId(); - map2_id = map2.getId(); - - str1_id = str1.getId(); - str2_id = str2.getId(); - - int1_id = int1.getId(); - int2_id = int2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( TernaryMapEntity.class, map1_id ) ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( TernaryMapEntity.class, map2_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str2_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int2_id ) ); - } - - @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testHistoryOfMap1() { - StrTestPrivSeqEntity str1 = getEntityManager().find( StrTestPrivSeqEntity.class, str1_id ); - StrTestPrivSeqEntity str2 = getEntityManager().find( StrTestPrivSeqEntity.class, str2_id ); - - IntTestPrivSeqEntity int1 = getEntityManager().find( IntTestPrivSeqEntity.class, int1_id ); - IntTestPrivSeqEntity int2 = getEntityManager().find( IntTestPrivSeqEntity.class, int2_id ); - - TernaryMapEntity rev1 = getAuditReader().find( TernaryMapEntity.class, map1_id, 1 ); - TernaryMapEntity rev2 = getAuditReader().find( TernaryMapEntity.class, map1_id, 2 ); - TernaryMapEntity rev3 = getAuditReader().find( TernaryMapEntity.class, map1_id, 3 ); - TernaryMapEntity rev4 = getAuditReader().find( TernaryMapEntity.class, map1_id, 4 ); - - Assert.assertEquals( TestTools.makeMap( int1, str1 ), rev1.getMap() ); - Assert.assertEquals( TestTools.makeMap( int1, str2 ), rev2.getMap() ); - Assert.assertEquals( TestTools.makeMap( int1, str2 ), rev3.getMap() ); - Assert.assertEquals( TestTools.makeMap( int1, str2, int2, str2 ), rev4.getMap() ); - } - - @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testHistoryOfMap2() { - StrTestPrivSeqEntity str1 = getEntityManager().find( StrTestPrivSeqEntity.class, str1_id ); - StrTestPrivSeqEntity str2 = getEntityManager().find( StrTestPrivSeqEntity.class, str2_id ); - - IntTestPrivSeqEntity int1 = getEntityManager().find( IntTestPrivSeqEntity.class, int1_id ); - IntTestPrivSeqEntity int2 = getEntityManager().find( IntTestPrivSeqEntity.class, int2_id ); - - TernaryMapEntity rev1 = getAuditReader().find( TernaryMapEntity.class, map2_id, 1 ); - TernaryMapEntity rev2 = getAuditReader().find( TernaryMapEntity.class, map2_id, 2 ); - TernaryMapEntity rev3 = getAuditReader().find( TernaryMapEntity.class, map2_id, 3 ); - TernaryMapEntity rev4 = getAuditReader().find( TernaryMapEntity.class, map2_id, 4 ); - - assert rev1.getMap().equals( TestTools.makeMap() ); - assert rev2.getMap().equals( TestTools.makeMap( int1, str1, int2, str1 ) ); - assert rev3.getMap().equals( TestTools.makeMap( int2, str1 ) ); - assert rev4.getMap().equals( TestTools.makeMap( int1, str2, int2, str1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapEntity.java deleted file mode 100644 index 8a432e43ee0f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapEntity.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.ternary; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; -import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class TernaryMapEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ManyToMany - @jakarta.persistence.MapKeyJoinColumn - private Map map; - - public TernaryMapEntity() { - map = new HashMap(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getMap() { - return map; - } - - public void setMap(Map map) { - this.map = map; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof TernaryMapEntity) ) { - return false; - } - - TernaryMapEntity that = (TernaryMapEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "TME(id = " + id + ", map = " + map + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java deleted file mode 100644 index a867e06d34ff..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.ternary; - -import java.util.Arrays; -import java.util.HashMap; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.HSQLDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; -import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class TernaryMapFlush extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - private Integer int1_id; - private Integer int2_id; - private Integer map1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class}; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - StrTestPrivSeqEntity str1 = new StrTestPrivSeqEntity( "a" ); - StrTestPrivSeqEntity str2 = new StrTestPrivSeqEntity( "b" ); - IntTestPrivSeqEntity int1 = new IntTestPrivSeqEntity( 1 ); - IntTestPrivSeqEntity int2 = new IntTestPrivSeqEntity( 2 ); - TernaryMapEntity map1 = new TernaryMapEntity(); - - // Revision 1 (int1 -> str1) - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - em.persist( int1 ); - em.persist( int2 ); - - map1.getMap().put( int1, str1 ); - - em.persist( map1 ); - - em.getTransaction().commit(); - - // Revision 2 (removing int1->str1, flushing, adding int1->str1 again and a new int2->str2 mapping to force a change) - - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - str1 = em.find( StrTestPrivSeqEntity.class, str1.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - - map1.setMap( new HashMap() ); - - em.flush(); - - map1.getMap().put( int1, str1 ); - map1.getMap().put( int2, str2 ); - - em.getTransaction().commit(); - - // Revision 3 (removing int1->str1, flushing, overwriting int2->str1) - - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - str1 = em.find( StrTestPrivSeqEntity.class, str1.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - - map1.getMap().remove( int1 ); - - em.flush(); - - map1.getMap().put( int2, str1 ); - - em.getTransaction().commit(); - - // - - map1_id = map1.getId(); - str1_id = str1.getId(); - str2_id = str2.getId(); - int1_id = int1.getId(); - int2_id = int2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( TernaryMapEntity.class, map1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str2_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int2_id ) ); - } - - @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testHistoryOfMap1() { - StrTestPrivSeqEntity str1 = getEntityManager().find( StrTestPrivSeqEntity.class, str1_id ); - StrTestPrivSeqEntity str2 = getEntityManager().find( StrTestPrivSeqEntity.class, str2_id ); - IntTestPrivSeqEntity int1 = getEntityManager().find( IntTestPrivSeqEntity.class, int1_id ); - IntTestPrivSeqEntity int2 = getEntityManager().find( IntTestPrivSeqEntity.class, int2_id ); - - TernaryMapEntity rev1 = getAuditReader().find( TernaryMapEntity.class, map1_id, 1 ); - TernaryMapEntity rev2 = getAuditReader().find( TernaryMapEntity.class, map1_id, 2 ); - TernaryMapEntity rev3 = getAuditReader().find( TernaryMapEntity.class, map1_id, 3 ); - - assertEquals( rev1.getMap(), TestTools.makeMap( int1, str1 ) ); - assertEquals( rev2.getMap(), TestTools.makeMap( int1, str1, int2, str2 ) ); - assertEquals( rev3.getMap(), TestTools.makeMap( int2, str1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java deleted file mode 100644 index adc8479328e4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.unidirectional; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.ListUniEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicUniList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListUniEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity ed1 = new StrTestEntity( "data_ed_1" ); - StrTestEntity ed2 = new StrTestEntity( "data_ed_2" ); - - ListUniEntity ing1 = new ListUniEntity( 3, "data_ing_1" ); - ListUniEntity ing2 = new ListUniEntity( 4, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - ing2 = em.find( ListUniEntity.class, ing2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - - ing1.setReferences( new ArrayList() ); - ing1.getReferences().add( ed1 ); - - ing2.setReferences( new ArrayList() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().remove( ed1 ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( ListUniEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ListUniEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdIng1() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - ListUniEntity rev1 = getAuditReader().find( ListUniEntity.class, ing1_id, 1 ); - ListUniEntity rev2 = getAuditReader().find( ListUniEntity.class, ing1_id, 2 ); - ListUniEntity rev3 = getAuditReader().find( ListUniEntity.class, ing1_id, 3 ); - ListUniEntity rev4 = getAuditReader().find( ListUniEntity.class, ing1_id, 4 ); - ListUniEntity rev5 = getAuditReader().find( ListUniEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed2 ); - assert rev5.getReferences().equals( Collections.EMPTY_LIST ); - } - - @Test - public void testHistoryOfEdIng2() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - ListUniEntity rev1 = getAuditReader().find( ListUniEntity.class, ing2_id, 1 ); - ListUniEntity rev2 = getAuditReader().find( ListUniEntity.class, ing2_id, 2 ); - ListUniEntity rev3 = getAuditReader().find( ListUniEntity.class, ing2_id, 3 ); - ListUniEntity rev4 = getAuditReader().find( ListUniEntity.class, ing2_id, 4 ); - ListUniEntity rev5 = getAuditReader().find( ListUniEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev5.getReferences(), ed1, ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java deleted file mode 100644 index b00f1bd8eed0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.unidirectional; - -import java.util.Arrays; -import java.util.HashMap; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.MapUniEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicUniMap extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - - private Integer coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, MapUniEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - MapUniEntity coll1 = new MapUniEntity( 3, "coll1" ); - - // Revision 1 (coll1: initialy one mapping) - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setMap( new HashMap() ); - coll1.getMap().put( "1", str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 (coll1: adding one mapping) - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( MapUniEntity.class, coll1.getId() ); - - coll1.getMap().put( "2", str2 ); - - em.getTransaction().commit(); - - // Revision 3 (coll1: replacing one mapping) - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( MapUniEntity.class, coll1.getId() ); - - coll1.getMap().put( "2", str1 ); - - em.getTransaction().commit(); - - // Revision 4 (coll1: removing one mapping) - em.getTransaction().begin(); - - coll1 = em.find( MapUniEntity.class, coll1.getId() ); - - coll1.getMap().remove( "1" ); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( MapUniEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - MapUniEntity rev1 = getAuditReader().find( MapUniEntity.class, coll1_id, 1 ); - MapUniEntity rev2 = getAuditReader().find( MapUniEntity.class, coll1_id, 2 ); - MapUniEntity rev3 = getAuditReader().find( MapUniEntity.class, coll1_id, 3 ); - MapUniEntity rev4 = getAuditReader().find( MapUniEntity.class, coll1_id, 4 ); - - assert rev1.getMap().equals( TestTools.makeMap( "1", str1 ) ); - assert rev2.getMap().equals( TestTools.makeMap( "1", str1, "2", str2 ) ); - assert rev3.getMap().equals( TestTools.makeMap( "1", str1, "2", str1 ) ); - assert rev4.getMap().equals( TestTools.makeMap( "2", str1 ) ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java deleted file mode 100644 index af616571660c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.unidirectional; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.SetUniEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicUniSet extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetUniEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity ed1 = new StrTestEntity( "data_ed_1" ); - StrTestEntity ed2 = new StrTestEntity( "data_ed_2" ); - - SetUniEntity ing1 = new SetUniEntity( 3, "data_ing_1" ); - SetUniEntity ing2 = new SetUniEntity( 4, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - ing2 = em.find( SetUniEntity.class, ing2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - - ing1.setReferences( new HashSet() ); - ing1.getReferences().add( ed1 ); - - ing2.setReferences( new HashSet() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().remove( ed1 ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( SetUniEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetUniEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdIng1() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - SetUniEntity rev1 = getAuditReader().find( SetUniEntity.class, ing1_id, 1 ); - SetUniEntity rev2 = getAuditReader().find( SetUniEntity.class, ing1_id, 2 ); - SetUniEntity rev3 = getAuditReader().find( SetUniEntity.class, ing1_id, 3 ); - SetUniEntity rev4 = getAuditReader().find( SetUniEntity.class, ing1_id, 4 ); - SetUniEntity rev5 = getAuditReader().find( SetUniEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed2 ) ); - assert rev5.getReferences().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdIng2() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - SetUniEntity rev1 = getAuditReader().find( SetUniEntity.class, ing2_id, 1 ); - SetUniEntity rev2 = getAuditReader().find( SetUniEntity.class, ing2_id, 2 ); - SetUniEntity rev3 = getAuditReader().find( SetUniEntity.class, ing2_id, 3 ); - SetUniEntity rev4 = getAuditReader().find( SetUniEntity.class, ing2_id, 4 ); - SetUniEntity rev5 = getAuditReader().find( SetUniEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev5.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java deleted file mode 100644 index 1cca348b9360..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.unidirectional; - -import java.util.Arrays; -import java.util.HashSet; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.JoinTableEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -import jakarta.persistence.EntityManager; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-8087") -public class JoinTableDetachedTest extends BaseEnversJPAFunctionalTestCase { - private Long collectionEntityId = null; - private Integer element1Id = null; - private Integer element2Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinTableEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - addition - em.getTransaction().begin(); - JoinTableEntity collectionEntity = new JoinTableEntity( "some data" ); - StrTestEntity element1 = new StrTestEntity( "str1" ); - StrTestEntity element2 = new StrTestEntity( "str2" ); - collectionEntity.getReferences().add( element1 ); - collectionEntity.getReferences().add( element2 ); - em.persist( element1 ); - em.persist( element2 ); - em.persist( collectionEntity ); - em.getTransaction().commit(); - - collectionEntityId = collectionEntity.getId(); - element1Id = element1.getId(); - element2Id = element2.getId(); - - em.close(); - em = getEntityManager(); - - // Revision 2 - simple modification - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.setData( "some other data" ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 3 - remove detached object from collection - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.getReferences().remove( element1 ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 4 - replace the collection - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.setReferences( new HashSet() ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 5 - add to collection - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.getReferences().add( element1 ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( - JoinTableEntity.class, - collectionEntityId - ) - ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, element1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, element2Id ) ); - } - - @Test - public void testHistoryOfCollectionEntity() { - // Revision 1 - JoinTableEntity collectionEntity = new JoinTableEntity( collectionEntityId, "some data" ); - StrTestEntity element1 = new StrTestEntity( "str1", element1Id ); - StrTestEntity element2 = new StrTestEntity( "str2", element2Id ); - collectionEntity.getReferences().add( element1 ); - collectionEntity.getReferences().add( element2 ); - JoinTableEntity ver1 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 1 ); - Assert.assertEquals( collectionEntity, ver1 ); - Assert.assertEquals( collectionEntity.getReferences(), ver1.getReferences() ); - - // Revision 2 - collectionEntity.setData( "some other data" ); - JoinTableEntity ver2 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 2 ); - Assert.assertEquals( collectionEntity, ver2 ); - Assert.assertEquals( collectionEntity.getReferences(), ver2.getReferences() ); - - // Revision 3 - collectionEntity.getReferences().remove( element1 ); - JoinTableEntity ver3 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 3 ); - Assert.assertEquals( collectionEntity, ver3 ); - Assert.assertEquals( collectionEntity.getReferences(), ver3.getReferences() ); - - // Revision 4 - collectionEntity.setReferences( new HashSet() ); - JoinTableEntity ver4 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 4 ); - Assert.assertEquals( collectionEntity, ver4 ); - Assert.assertEquals( collectionEntity.getReferences(), ver4.getReferences() ); - - // Revision 5 - collectionEntity.getReferences().add( element1 ); - JoinTableEntity ver5 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 5 ); - Assert.assertEquals( collectionEntity, ver5 ); - Assert.assertEquals( collectionEntity.getReferences(), ver5.getReferences() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java deleted file mode 100644 index 929e90fcc4d9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.unidirectional; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.M2MIndexedListTargetNotAuditedEntity; - -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -/** - * A test for auditing a many-to-many indexed list where the target entity is not audited. - * - * @author Vladimir Klyushnikov - * @author Adam Warski - */ -public class M2MIndexedListNotAuditedTarget extends BaseEnversJPAFunctionalTestCase { - private Integer itnae1_id; - private Integer itnae2_id; - - private UnversionedStrTestEntity uste1; - private UnversionedStrTestEntity uste2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UnversionedStrTestEntity.class, M2MIndexedListTargetNotAuditedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - uste1 = new UnversionedStrTestEntity( "str1" ); - uste2 = new UnversionedStrTestEntity( "str2" ); - - // No revision - em.getTransaction().begin(); - - em.persist( uste1 ); - em.persist( uste2 ); - - em.getTransaction().commit(); - - // Revision 1 - em.getTransaction().begin(); - - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - - M2MIndexedListTargetNotAuditedEntity itnae1 = new M2MIndexedListTargetNotAuditedEntity( 1, "tnae1" ); - - itnae1.getReferences().add( uste1 ); - itnae1.getReferences().add( uste2 ); - - em.persist( itnae1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - M2MIndexedListTargetNotAuditedEntity itnae2 = new M2MIndexedListTargetNotAuditedEntity( 2, "tnae2" ); - - itnae2.getReferences().add( uste2 ); - - em.persist( itnae2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - itnae1.getReferences().set( 0, uste2 ); - itnae1.getReferences().set( 1, uste1 ); - em.getTransaction().commit(); - - itnae1_id = itnae1.getId(); - itnae2_id = itnae2.getId(); - } - - @Test - public void testRevisionsCounts() { - List revisions = getAuditReader().getRevisions( M2MIndexedListTargetNotAuditedEntity.class, itnae1_id ); - assertEquals( revisions, Arrays.asList( 1, 3 ) ); - - revisions = getAuditReader().getRevisions( M2MIndexedListTargetNotAuditedEntity.class, itnae2_id ); - assertEquals( revisions, Arrays.asList( 2 ) ); - } - - @Test - public void testHistory1() throws Exception { - M2MIndexedListTargetNotAuditedEntity rev1 = getAuditReader().find( - M2MIndexedListTargetNotAuditedEntity.class, - itnae1_id, - 1 - ); - M2MIndexedListTargetNotAuditedEntity rev2 = getAuditReader().find( - M2MIndexedListTargetNotAuditedEntity.class, - itnae1_id, - 2 - ); - M2MIndexedListTargetNotAuditedEntity rev3 = getAuditReader().find( - M2MIndexedListTargetNotAuditedEntity.class, - itnae1_id, - 3 - ); - - assertTrue( checkCollection( rev1.getReferences(), uste1, uste2 ) ); - assertTrue( checkCollection( rev2.getReferences(), uste1, uste2 ) ); - assertTrue( checkCollection( rev3.getReferences(), uste2, uste1 ) ); - } - - @Test - public void testHistory2() throws Exception { - M2MIndexedListTargetNotAuditedEntity rev1 = getAuditReader().find( - M2MIndexedListTargetNotAuditedEntity.class, - itnae2_id, - 1 - ); - M2MIndexedListTargetNotAuditedEntity rev2 = getAuditReader().find( - M2MIndexedListTargetNotAuditedEntity.class, - itnae2_id, - 2 - ); - M2MIndexedListTargetNotAuditedEntity rev3 = getAuditReader().find( - M2MIndexedListTargetNotAuditedEntity.class, - itnae2_id, - 3 - ); - - assertNull( rev1 ); - assertTrue( checkCollection( rev2.getReferences(), uste2 ) ); - assertTrue( checkCollection( rev3.getReferences(), uste2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java deleted file mode 100644 index fb552a6187f4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytomany.unidirectional; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.M2MTargetNotAuditedEntity; - -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertTrue; - -/** - * A test for auditing a many-to-many relation where the target entity is not audited. - * - * @author Adam Warski - */ -public class M2MRelationNotAuditedTarget extends BaseEnversJPAFunctionalTestCase { - private Integer tnae1_id; - private Integer tnae2_id; - - private Integer uste1_id; - private Integer uste2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {M2MTargetNotAuditedEntity.class, UnversionedStrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - UnversionedStrTestEntity uste1 = new UnversionedStrTestEntity( "str1" ); - UnversionedStrTestEntity uste2 = new UnversionedStrTestEntity( "str2" ); - - // No revision - em.getTransaction().begin(); - - em.persist( uste1 ); - em.persist( uste2 ); - - em.getTransaction().commit(); - - // Revision 1 - em.getTransaction().begin(); - - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - - M2MTargetNotAuditedEntity tnae1 = new M2MTargetNotAuditedEntity( - 1, - "tnae1", - new ArrayList() - ); - M2MTargetNotAuditedEntity tnae2 = new M2MTargetNotAuditedEntity( - 2, - "tnae2", - new ArrayList() - ); - tnae2.getReferences().add( uste1 ); - tnae2.getReferences().add( uste2 ); - em.persist( tnae1 ); - em.persist( tnae2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.getReferences().add( uste1 ); - tnae2.getReferences().remove( uste1 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2.getId() ); - - //field not changed!!! - tnae1.getReferences().add( uste1 ); - tnae2.getReferences().remove( uste2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.getReferences().add( uste2 ); - tnae2.getReferences().add( uste1 ); - - em.getTransaction().commit(); - - // - tnae1_id = tnae1.getId(); - tnae2_id = tnae2.getId(); - uste1_id = uste1.getId(); - uste2_id = uste2.getId(); - } - - @Test - public void testRevisionsCounts() { - List revisions = getAuditReader().getRevisions( M2MTargetNotAuditedEntity.class, tnae1_id ); - assert Arrays.asList( 1, 2, 4 ).equals( revisions ); - revisions = getAuditReader().getRevisions( M2MTargetNotAuditedEntity.class, tnae2_id ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( revisions ); - } - - @Test - public void testHistoryOfTnae1_id() { - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - M2MTargetNotAuditedEntity rev1 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 1 ); - M2MTargetNotAuditedEntity rev2 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 2 ); - M2MTargetNotAuditedEntity rev3 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 3 ); - M2MTargetNotAuditedEntity rev4 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 4 ); - - assertTrue( checkCollection( rev1.getReferences() ) ); - assertTrue( checkCollection( rev2.getReferences(), uste1 ) ); - assertTrue( checkCollection( rev3.getReferences(), uste1 ) ); - assertTrue( checkCollection( rev4.getReferences(), uste1, uste2 ) ); - } - - @Test - public void testHistoryOfTnae2_id() { - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - M2MTargetNotAuditedEntity rev1 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 1 ); - M2MTargetNotAuditedEntity rev2 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 2 ); - M2MTargetNotAuditedEntity rev3 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 3 ); - M2MTargetNotAuditedEntity rev4 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 4 ); - - assertTrue( checkCollection( rev1.getReferences(), uste1, uste2 ) ); - assertTrue( checkCollection( rev2.getReferences(), uste2 ) ); - assertTrue( checkCollection( rev3.getReferences() ) ); - assertTrue( checkCollection( rev4.getReferences(), uste1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java deleted file mode 100644 index 10cc02e43f90..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Objects; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; - -/** - * Test updating a detached audited entity using native Session API - * with a many-to-one association. - * - * @author Chris Cranford - */ -@JiraKey("HHH-11859") -public class DetachedUpdateTest extends BaseEnversFunctionalTestCase { - private Bank bank1; - private Bank bank2; - private BankContact contact; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Bank.class, BankContact.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - doInHibernate( this::sessionFactory, session -> { - bank1 = new Bank(); - bank1.setDescription( "Bank of Italy" ); - session.persist( bank1 ); - - bank2 = new Bank(); - bank2.setDescription( "Bradesco Bank" ); - session.persist( bank2 ); - - contact = new BankContact(); - contact.setBank( bank1 ); - contact.setPhoneNumber( "1234" ); - contact.setName( "Test" ); - session.persist( contact ); - } ); - - // Revision 2 - doInHibernate( this::sessionFactory, session -> { - contact.setName( "Other" ); - contact.setBank( bank2 ); - session.merge( contact ); - } ); - - // Revision 3 - // Test changing the detached entity reference to Bank and delete the prior reference - // within the same transaction to make sure the audit history flushes properly. - doInHibernate( this::sessionFactory, session -> { - contact.setBank( bank1 ); - session.remove( bank2 ); - session.merge( contact ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Collections.singletonList( 1 ), getAuditReader().getRevisions( Bank.class, bank1.getId() ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Bank.class, bank2.getId() ) ); - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( BankContact.class, contact.getId() ) ); - } - - @Test - public void testRevisionHistory() { - final BankContact rev1 = getAuditReader().find( BankContact.class, contact.getId(), 1 ); - assertEquals( rev1.getBank(), bank1 ); - - final BankContact rev2 = getAuditReader().find( BankContact.class, contact.getId(), 2 ); - assertEquals( rev2.getBank(), bank2 ); - - final BankContact rev3 = getAuditReader().find( BankContact.class, contact.getId(), 3 ); - assertEquals( rev3.getBank(), bank1 ); - } - - @Entity(name="Bank") - @Audited(withModifiedFlag = true) - public static class Bank { - @Id - @GeneratedValue - private Integer id; - private String description; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - Bank bank = (Bank) o; - return Objects.equals( id, bank.id ) && - Objects.equals( description, bank.description ); - } - - @Override - public int hashCode() { - return Objects.hash( id, description ); - } - } - - @Entity(name = "BankContact") - @Audited(withModifiedFlag = true) - public static class BankContact { - @Id - @GeneratedValue - private Integer id; - private String phoneNumber; - private String name; - @ManyToOne - @JoinColumn(name = "bank_id") - private Bank bank; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Bank getBank() { - return bank; - } - - public void setBank(Bank bank) { - this.bank = bank; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - BankContact that = (BankContact) o; - return Objects.equals( id, that.id ) && - Objects.equals( phoneNumber, that.phoneNumber ) && - Objects.equals( name, that.name ) && - Objects.equals( bank, that.bank ); - } - - @Override - public int hashCode() { - return Objects.hash( id, phoneNumber, name, bank ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java deleted file mode 100644 index 0fcae5534f7f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.ForeignKey; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.mapping.Table; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11463") -public class EmbeddedIdManyToOneForeignKeyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Customer.class, CustomerAddress.class, Address.class }; - } - - @Test - public void testJoinTableForeignKeyToNonAuditTables() { - // there should only be references to REVINFO and not to the Customer or Address tables - for ( Table table : metadata().getDatabase().getDefaultNamespace().getTables() ) { - if ( table.getName().equals( "CustomerAddress_AUD" ) ) { - for ( org.hibernate.mapping.ForeignKey foreignKey : table.getForeignKeys().values() ) { - assertEquals( "REVINFO", foreignKey.getReferencedTable().getName() ); - } - } - } - } - - @Audited - @Entity(name = "Customer") - public static class Customer { - @Id - private Integer id; - - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @OneToMany - @JoinTable(name = "CustomerAddress") - @AuditJoinTable(name = "CustomerAddress_AUD") - @JoinColumn(name = "customerId", foreignKey = @ForeignKey(name = "FK_CUSTOMER_ADDRESS")) - private List addresses = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getAddresses() { - return addresses; - } - - public void setAddresses(List addresses) { - this.addresses = addresses; - } - } - - @Audited - @Entity(name = "Address") - public static class Address { - @Id - private Integer id; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Embeddable - public static class CustomerAddressId implements Serializable { - @ManyToOne - private Address address; - @ManyToOne - private Customer customer; - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - public Customer getCustomer() { - return customer; - } - - public void setCustomer(Customer customer) { - this.customer = customer; - } - } - - @Audited - @Entity(name = "CustomerAddress") - public static class CustomerAddress { - @EmbeddedId - private CustomerAddressId id; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BiRefedOptionalEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BiRefedOptionalEntity.java deleted file mode 100644 index 1166ad201c43..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BiRefedOptionalEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class BiRefedOptionalEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToMany(mappedBy = "reference") - private List references = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getReferences() { - return references; - } - - public void setReferences(List references) { - this.references = references; - } - - @Override - public int hashCode() { - return ( id != null ? id.hashCode() : 0 ); - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( !( object instanceof BiRefedOptionalEntity ) ) { - return false; - } - BiRefedOptionalEntity that = (BiRefedOptionalEntity) object; - return !( id != null ? !id.equals( that.id ) : that.id != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BiRefingOptionalEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BiRefingOptionalEntity.java deleted file mode 100644 index d70c4fa31ac5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BiRefingOptionalEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class BiRefingOptionalEntity { - @Id - @GeneratedValue - private Integer id; - - @ManyToOne(optional = true) - @JoinTable(name = "A_B", joinColumns = @JoinColumn(name = "a_id", unique = true), inverseJoinColumns = @JoinColumn(name = "b_id") ) - private BiRefedOptionalEntity reference; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public BiRefedOptionalEntity getReference() { - return reference; - } - - public void setReference(BiRefedOptionalEntity reference) { - this.reference = reference; - } - - @Override - public int hashCode() { - return ( id != null ? id.hashCode() : 0 ); - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( !( object instanceof BiRefingOptionalEntity ) ) { - return false; - } - BiRefingOptionalEntity that = (BiRefingOptionalEntity) object; - return !( id != null ? !id.equals( that.id ) : that.id != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java deleted file mode 100644 index 1bcb623a573e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8305") -public class BidirectionalManyToOneOptionalTest extends BaseEnversJPAFunctionalTestCase { - private Integer refingWithNoRefedId; - private Integer refingId; - private Integer refedId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - BiRefingOptionalEntity.class, - BiRefedOptionalEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); - - // store refing with null refed entity - BiRefingOptionalEntity refingWithNoRefed = new BiRefingOptionalEntity(); - refingWithNoRefed.setReference( null ); - entityManager.persist( refingWithNoRefed ); - - // store refing with non-null refed entity - BiRefingOptionalEntity refing = new BiRefingOptionalEntity(); - BiRefedOptionalEntity refed = new BiRefedOptionalEntity(); - refed.getReferences().add( refing ); - refing.setReference( refed ); - entityManager.persist( refing ); - entityManager.persist( refed ); - - entityManager.getTransaction().commit(); - - this.refingId = refing.getId(); - this.refedId = refed.getId(); - this.refingWithNoRefedId = refingWithNoRefed.getId(); - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingWithNoRefedId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefedOptionalEntity.class, refedId ).size() ); - } - - @Test - public void testRevisionHistoryNullReference() { - BiRefingOptionalEntity rev1 = getAuditReader().find( BiRefingOptionalEntity.class, refingWithNoRefedId, 1 ); - assertNull( rev1.getReference() ); - } - - @Test - public void testRevisionHistoryWithNonNullReference() { - assertNotNull( getAuditReader().find( BiRefingOptionalEntity.class, refingId, 1).getReference() ); - assertEquals( 1, getAuditReader().find( BiRefedOptionalEntity.class, refedId, 1 ).getReferences().size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java deleted file mode 100644 index 2127a1f34271..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-4962") -public class ImplicitMappedByTest extends BaseEnversJPAFunctionalTestCase { - private Long ownedId = null; - private Long owning1Id = null; - private Long owning2Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {OneToManyOwned.class, ManyToOneOwning.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - OneToManyOwned owned = new OneToManyOwned( "data", null ); - Set referencing = new HashSet(); - ManyToOneOwning owning1 = new ManyToOneOwning( "data1", owned ); - referencing.add( owning1 ); - ManyToOneOwning owning2 = new ManyToOneOwning( "data2", owned ); - referencing.add( owning2 ); - owned.setReferencing( referencing ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( owned ); - em.persist( owning1 ); - em.persist( owning2 ); - em.getTransaction().commit(); - - ownedId = owned.getId(); - owning1Id = owning1.getId(); - owning2Id = owning2.getId(); - - // Revision 2 - em.getTransaction().begin(); - owning1 = em.find( ManyToOneOwning.class, owning1.getId() ); - em.remove( owning1 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - owning2 = em.find( ManyToOneOwning.class, owning2.getId() ); - owning2.setData( "data2modified" ); - em.merge( owning2 ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( OneToManyOwned.class, ownedId ) ); - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ManyToOneOwning.class, owning1Id ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( ManyToOneOwning.class, owning2Id ) ); - } - - @Test - public void testHistoryOfOwned() { - OneToManyOwned owned = new OneToManyOwned( "data", null, ownedId ); - ManyToOneOwning owning1 = new ManyToOneOwning( "data1", owned, owning1Id ); - ManyToOneOwning owning2 = new ManyToOneOwning( "data2", owned, owning2Id ); - - OneToManyOwned ver1 = getAuditReader().find( OneToManyOwned.class, ownedId, 1 ); - Assert.assertEquals( owned, ver1 ); - Assert.assertEquals( TestTools.makeSet( owning1, owning2 ), ver1.getReferencing() ); - - OneToManyOwned ver2 = getAuditReader().find( OneToManyOwned.class, ownedId, 2 ); - Assert.assertEquals( owned, ver2 ); - Assert.assertEquals( TestTools.makeSet( owning2 ), ver2.getReferencing() ); - } - - @Test - public void testHistoryOfOwning1() { - ManyToOneOwning ver1 = new ManyToOneOwning( "data1", null, owning1Id ); - Assert.assertEquals( ver1, getAuditReader().find( ManyToOneOwning.class, owning1Id, 1 ) ); - } - - @Test - public void testHistoryOfOwning2() { - OneToManyOwned owned = new OneToManyOwned( "data", null, ownedId ); - ManyToOneOwning owning1 = new ManyToOneOwning( "data2", owned, owning2Id ); - ManyToOneOwning owning3 = new ManyToOneOwning( "data2modified", owned, owning2Id ); - - ManyToOneOwning ver1 = getAuditReader().find( ManyToOneOwning.class, owning2Id, 1 ); - ManyToOneOwning ver3 = getAuditReader().find( ManyToOneOwning.class, owning2Id, 3 ); - - Assert.assertEquals( owning1, ver1 ); - Assert.assertEquals( owned.getId(), ver1.getReferences().getId() ); - Assert.assertEquals( owning3, ver3 ); - Assert.assertEquals( owned.getId(), ver3.getReferences().getId() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java deleted file mode 100644 index 460f0f64dbe9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.envers.EntityTrackingRevisionListener; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionListener; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; -import org.hibernate.envers.RevisionType; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.Jira; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -@Jira( "https://hibernate.atlassian.net/browse/HHH-17652" ) -public class ManyToOneCustomRevisionListenerTest extends BaseEnversJPAFunctionalTestCase { - private static final ThreadLocal auditReader = ThreadLocal.withInitial( () -> null ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Document.class, - DocumentAuthorEmployee.class, - Employee.class, - CustomRevisionEntity.class, - }; - } - - @Test - @Priority(10) - public void initData() { - // store in thread-local to use it in custom revision listener - auditReader.set( getAuditReader() ); - - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final Employee bilbo = new Employee( "Bilbo Baggins" ); - em.persist( bilbo ); - final Employee frodo = new Employee( "Frodo Baggins" ); - em.persist( frodo ); - - em.getTransaction().commit(); - - em.getTransaction().begin(); - - final Document document = new Document( "The Hobbit" ); - document.getAuthors().add( new DocumentAuthorEmployee( 1L, document, bilbo ) ); - document.getAuthors().add( new DocumentAuthorEmployee( 2L, document, frodo ) ); - em.persist( document ); - - em.getTransaction().commit(); - } - - @Test - public void testDocumentAuthorEmployeeRevisions() { - final AuditReader reader = getAuditReader(); - assertLastRevision( reader, 1L, "Bilbo Baggins" ); - assertLastRevision( reader, 2L, "Frodo Baggins" ); - getEntityManager().close(); - } - - private static void assertLastRevision(AuditReader reader, Long id, String employee) { - final List revisions = reader.getRevisions( DocumentAuthorEmployee.class, id ); - final Number revisionNumber = revisions.get( revisions.size() - 1 ); - final DocumentAuthorEmployee result = reader.find( DocumentAuthorEmployee.class, id, revisionNumber ); - assertThat( result.getEmployee().getName() ).isEqualTo( employee ); - assertThat( result.getDocument().getTitle() ).isEqualTo( "The Hobbit" ); - } - - @Audited(withModifiedFlag = true) - @Entity(name = "Document") - static class Document { - @Id - @GeneratedValue - private Long id; - - private String title; - - @OneToMany(mappedBy = "document", cascade = CascadeType.ALL) - private List authors = new ArrayList<>(); - - public Document() { - } - - public Document(String title) { - this.title = title; - } - - public List getAuthors() { - return authors; - } - - public String getTitle() { - return title; - } - } - - @Audited(withModifiedFlag = true) - @Entity(name = "DocumentAuthorEmployee") - static class DocumentAuthorEmployee { - @Id - private Long id; - - @ManyToOne - @JoinColumn(name = "document_id") - private Document document; - - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "employee_id") - private Employee employee; - - public DocumentAuthorEmployee() { - } - - public DocumentAuthorEmployee(Long id, Document document, Employee employee) { - this.id = id; - this.document = document; - this.employee = employee; - } - - public Long getId() { - return id; - } - - public Document getDocument() { - return document; - } - - public Employee getEmployee() { - return employee; - } - } - - @Audited(withModifiedFlag = true) - @Entity(name = "Employee") - static class Employee { - @Id - @GeneratedValue - private Long id; - - private String name; - - public Employee() { - } - - public Employee(String name) { - this.name = name; - } - - public String getName() { - return name; - } - } - - @Entity(name = "CustomRevisionEntity") - @RevisionEntity(CustomRevisionListener.class) - static class CustomRevisionEntity { - @Id - @GeneratedValue - @RevisionNumber - private int id; - - @RevisionTimestamp - private long timestamp; - } - - static class CustomRevisionListener implements RevisionListener, EntityTrackingRevisionListener { - @SuppressWarnings({"unchecked", "rawtypes"}) - @Override - public void entityChanged(Class entityClass, String entityName, Object entityId, RevisionType revisionType, Object revisionEntity) { - final AuditReader reader = auditReader.get(); - final List revisions = reader.getRevisions( entityClass, entityId ); - final Number revisionNumber = revisions.get( revisions.size() - 1 ); - - // This is what triggered the NPE - final Object obj = reader.find( entityClass, entityId, revisionNumber ); - assertThat( obj ).isNotNull(); - } - - @Override - public void newRevision(Object revisionEntity) { - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneOwning.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneOwning.java deleted file mode 100644 index 817e9c39d3c5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneOwning.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import java.io.Serializable; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class ManyToOneOwning implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - @ManyToOne - @JoinTable(name = "many_to_one_join_table", joinColumns = @JoinColumn(name = "owning_id"), - inverseJoinColumns = @JoinColumn(name = "owned_id")) - private OneToManyOwned references; - - public ManyToOneOwning() { - } - - public ManyToOneOwning(String data, OneToManyOwned references) { - this.data = data; - this.references = references; - } - - public ManyToOneOwning(String data, OneToManyOwned references, Long id) { - this.id = id; - this.data = data; - this.references = references; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ManyToOneOwning) ) { - return false; - } - - ManyToOneOwning that = (ManyToOneOwning) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ManyToOneOwning(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public OneToManyOwned getReferences() { - return references; - } - - public void setReferences(OneToManyOwned references) { - this.references = references; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/OneToManyOwned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/OneToManyOwned.java deleted file mode 100644 index e0be1cd0dde5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/OneToManyOwned.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class OneToManyOwned implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - @OneToMany(mappedBy = "references") - private Set referencing = new HashSet(); - - public OneToManyOwned() { - } - - public OneToManyOwned(String data, Set referencing) { - this.data = data; - this.referencing = referencing; - } - - public OneToManyOwned(String data, Set referencing, Long id) { - this.id = id; - this.data = data; - this.referencing = referencing; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof OneToManyOwned) ) { - return false; - } - - OneToManyOwned that = (OneToManyOwned) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "OneToManyOwned(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getReferencing() { - return referencing; - } - - public void setReferencing(Set referencing) { - this.referencing = referencing; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java deleted file mode 100644 index 1ab793ae6222..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.foreignkey; - -import java.time.LocalDate; -import java.util.ArrayList; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; - -/** - * Tests that no foreign key should be generated from audit schema to main schema. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12965") -public class ForeignKeyExclusionTest extends BaseEnversJPAFunctionalTestCase { - - private RootLayer rootLayer; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { RootLayer.class, MiddleLayer.class, LeafLayer.class }; - } - - @Test - public void testRemovingAuditedEntityWithIdClassAndManyToOneForeignKeyConstraint() { - // Revision 1 - Add Root/Middle/Leaf layers - this.rootLayer = doInJPA( this::entityManagerFactory, entityManager -> { - final RootLayer rootLayer = new RootLayer(); - rootLayer.setMiddleLayers( new ArrayList<>() ); - - MiddleLayer middleLayer = new MiddleLayer(); - rootLayer.getMiddleLayers().add( middleLayer ); - middleLayer.setRootLayer( rootLayer ); - middleLayer.setValidFrom( LocalDate.of( 2019, 3, 19 ) ); - middleLayer.setLeafLayers( new ArrayList<>() ); - - LeafLayer leafLayer = new LeafLayer(); - leafLayer.setMiddleLayer( middleLayer ); - middleLayer.getLeafLayers().add( leafLayer ); - - entityManager.persist( rootLayer ); - return rootLayer; - } ); - - // Revision 2 - Delete Root/Middle/Leaf layers - // This causes FK violation - doInJPA( this::entityManagerFactory, entityManager -> { - final RootLayer rootLayer = entityManager.find( RootLayer.class, this.rootLayer.getId() ); - entityManager.remove( rootLayer ); - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/LeafLayer.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/LeafLayer.java deleted file mode 100644 index 0cd98536a8ff..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/LeafLayer.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.foreignkey; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity(name = "LeafLayer") -@Audited -public class LeafLayer { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - @ManyToOne(optional = false) - @JoinColumns({ - @JoinColumn(name = "middle_layer_valid_from_fk", referencedColumnName = "valid_from"), - @JoinColumn(name = "middle_layer_root_layer_fk", referencedColumnName = "root_layer_fk") }) - private MiddleLayer middleLayer; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public MiddleLayer getMiddleLayer() { - return middleLayer; - } - - public void setMiddleLayer(MiddleLayer middleLayer) { - this.middleLayer = middleLayer; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/MiddleLayer.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/MiddleLayer.java deleted file mode 100644 index a2469e37c888..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/MiddleLayer.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.foreignkey; - -import java.time.LocalDate; -import java.util.List; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Audited -@Entity -@IdClass(MiddleLayerPK.class) -public class MiddleLayer { - @Id - @Column(name = "valid_from", nullable = false) - private LocalDate validFrom; - @Id - @ManyToOne - @JoinColumn(name = "root_layer_fk") - private RootLayer rootLayer; - @OneToMany(mappedBy = "middleLayer", cascade = CascadeType.ALL, orphanRemoval = true) - private List leafLayers; - - public LocalDate getValidFrom() { - return validFrom; - } - - public void setValidFrom(LocalDate validFrom) { - this.validFrom = validFrom; - } - - public RootLayer getRootLayer() { - return rootLayer; - } - - public void setRootLayer(RootLayer rootLayer) { - this.rootLayer = rootLayer; - } - - public List getLeafLayers() { - return leafLayers; - } - - public void setLeafLayers(List leafLayers) { - this.leafLayers = leafLayers; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/MiddleLayerPK.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/MiddleLayerPK.java deleted file mode 100644 index 5a17a4b56b39..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/MiddleLayerPK.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.foreignkey; - -import java.io.Serializable; -import java.time.LocalDate; -import java.util.Objects; - -/** - * @author Chris Cranford - */ -public class MiddleLayerPK implements Serializable { - private Long rootLayer; - private LocalDate validFrom; - - public Long getRootLayer() { - return rootLayer; - } - - public void setRootLayer(Long rootLayer) { - this.rootLayer = rootLayer; - } - - public LocalDate getValidFrom() { - return validFrom; - } - - public void setValidFrom(LocalDate validFrom) { - this.validFrom = validFrom; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - MiddleLayerPK that = (MiddleLayerPK) o; - return Objects.equals( rootLayer, that.rootLayer ) && - Objects.equals( validFrom, that.validFrom ); - } - - @Override - public int hashCode() { - return Objects.hash( rootLayer, validFrom ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/RootLayer.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/RootLayer.java deleted file mode 100644 index 2a8e23fdee56..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/RootLayer.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.foreignkey; - -import java.util.List; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity(name = "RootLayer") -@Audited -public class RootLayer { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - @OneToMany(mappedBy = "rootLayer", cascade = CascadeType.ALL, orphanRemoval = true) - private List middleLayers; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public List getMiddleLayers() { - return middleLayers; - } - - public void setMiddleLayers(List middleLayers) { - this.middleLayers = middleLayers; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java deleted file mode 100644 index 50536b66e273..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.manytoone.unidirectional; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.Hibernate; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.manytoone.unidirectional.TargetNotAuditedEntity; -import org.hibernate.proxy.HibernateProxy; - -import org.hibernate.proxy.LazyInitializer; -import org.junit.Test; - - -/** - * @author Tomasz Bech - */ -public class RelationNotAuditedTarget extends BaseEnversJPAFunctionalTestCase { - private Integer tnae1_id; - private Integer tnae2_id; - - private Integer uste1_id; - private Integer uste2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TargetNotAuditedEntity.class, UnversionedStrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - UnversionedStrTestEntity uste1 = new UnversionedStrTestEntity( "str1" ); - UnversionedStrTestEntity uste2 = new UnversionedStrTestEntity( "str2" ); - - // No revision - em.getTransaction().begin(); - - em.persist( uste1 ); - em.persist( uste2 ); - - em.getTransaction().commit(); - - // Revision 1 - em.getTransaction().begin(); - - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - - TargetNotAuditedEntity tnae1 = new TargetNotAuditedEntity( 1, "tnae1", uste1 ); - TargetNotAuditedEntity tnae2 = new TargetNotAuditedEntity( 2, "tnae2", uste2 ); - em.persist( tnae1 ); - em.persist( tnae2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - tnae1 = em.find( TargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( TargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.setReference( uste2 ); - tnae2.setReference( uste1 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - tnae1 = em.find( TargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( TargetNotAuditedEntity.class, tnae2.getId() ); - - //field not changed!!! - tnae1.setReference( uste2 ); - tnae2.setReference( uste2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - tnae1 = em.find( TargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( TargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.setReference( uste1 ); - tnae2.setReference( uste1 ); - - em.getTransaction().commit(); - - // - tnae1_id = tnae1.getId(); - tnae2_id = tnae2.getId(); - uste1_id = uste1.getId(); - uste2_id = uste2.getId(); - } - - @Test - public void testRevisionsCounts() { - List revisions = getAuditReader().getRevisions( TargetNotAuditedEntity.class, tnae1_id ); - assert Arrays.asList( 1, 2, 4 ).equals( revisions ); - revisions = getAuditReader().getRevisions( TargetNotAuditedEntity.class, tnae2_id ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( revisions ); - } - - static Class getClassWithoutInitializingProxy(Object object) { - final LazyInitializer lazyInitializer = HibernateProxy.extractLazyInitializer( object ); - if ( lazyInitializer != null ) { - return lazyInitializer.getPersistentClass(); - } - else { - return object.getClass(); - } - } - - @Test - public void testHistoryOfTnae1_id() { - // load original "tnae1" TargetNotAuditedEntity to force load "str1" UnversionedStrTestEntity as Proxy - TargetNotAuditedEntity original = getEntityManager().find( TargetNotAuditedEntity.class, tnae1_id ); - - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - TargetNotAuditedEntity rev1 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 1 ); - TargetNotAuditedEntity rev2 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 2 ); - TargetNotAuditedEntity rev3 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 3 ); - TargetNotAuditedEntity rev4 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 4 ); - - assert rev1.getReference().equals( uste1 ); - assert rev2.getReference().equals( uste2 ); - assert rev3.getReference().equals( uste2 ); - assert rev4.getReference().equals( uste1 ); - - assert original.getReference() instanceof HibernateProxy; - assert UnversionedStrTestEntity.class.equals( Hibernate.getClass( original.getReference() ) ); - assert UnversionedStrTestEntity.class.equals( getClassWithoutInitializingProxy( rev1.getReference() ) ); - assert UnversionedStrTestEntity.class.equals( Hibernate.getClass( rev1.getReference() ) ); - } - - @Test - public void testHistoryOfTnae2_id() { - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - TargetNotAuditedEntity rev1 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 1 ); - TargetNotAuditedEntity rev2 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 2 ); - TargetNotAuditedEntity rev3 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 3 ); - TargetNotAuditedEntity rev4 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 4 ); - - assert rev1.getReference().equals( uste2 ); - assert rev2.getReference().equals( uste1 ); - assert rev3.getReference().equals( uste2 ); - assert rev4.getReference().equals( uste1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java deleted file mode 100644 index cfbc39ccff15..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.merge; - -import java.util.Arrays; - -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6753") -public class AddDelTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, GivenIdStrEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Session session = openSession(); - session.getTransaction().begin(); - GivenIdStrEntity entity = new GivenIdStrEntity( 1, "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - // Revision 2 - session.getTransaction().begin(); - session.persist( new StrTestEntity( "another data" ) ); // Just to create second revision. - entity = session.get( GivenIdStrEntity.class, 1 ); - session.remove( entity ); // First try to remove the entity. - session.persist( entity ); // Then save it. - session.getTransaction().commit(); - - // Revision 3 - session.getTransaction().begin(); - entity = session.get( GivenIdStrEntity.class, 1 ); - session.remove( entity ); // First try to remove the entity. - entity.setData( "modified data" ); // Then change it's state. - session.persist( entity ); // Finally save it. - session.getTransaction().commit(); - - session.close(); - } - - @Test - public void testRevisionsCountOfGivenIdStrEntity() { - // Revision 2 has not changed entity's state. - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( GivenIdStrEntity.class, 1 ) ); - } - - @Test - public void testHistoryOfGivenIdStrEntity() { - Assert.assertEquals( new GivenIdStrEntity( 1, "data" ), getAuditReader().find( GivenIdStrEntity.class, 1, 1 ) ); - Assert.assertEquals( - new GivenIdStrEntity( 1, "modified data" ), getAuditReader().find( - GivenIdStrEntity.class, - 1, - 3 - ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/GivenIdStrEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/GivenIdStrEntity.java deleted file mode 100644 index 6b582edfc3fe..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/GivenIdStrEntity.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.merge; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -@AuditTable("GIVENIDSTRENTITY_AUD") -public class GivenIdStrEntity { - @Id - private Integer id; - - private String data; - - public GivenIdStrEntity() { - } - - public GivenIdStrEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof GivenIdStrEntity) ) { - return false; - } - - GivenIdStrEntity that = (GivenIdStrEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "GivenIdStrEntity(id = " + id + ", data = " + data + ")"; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/metamodel/RevisionEntitiesMetamodelTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/metamodel/RevisionEntitiesMetamodelTest.java deleted file mode 100644 index e10e4a825354..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/metamodel/RevisionEntitiesMetamodelTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.metamodel; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.internal.CoreMessageLogger; -import org.hibernate.metamodel.internal.MetadataContext; -import org.hibernate.testing.logger.LogInspectionHelper; -import org.hibernate.testing.logger.TriggerOnPrefixLogListener; -import org.hibernate.testing.orm.junit.Jira; -import org.hibernate.testing.util.ServiceRegistryUtil; -import org.jboss.logging.Logger; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; - -import java.lang.invoke.MethodHandles; -import java.time.Instant; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Marco Belladelli - */ -@Jira( "https://hibernate.atlassian.net/browse/HHH-17612" ) -@TestInstance( TestInstance.Lifecycle.PER_CLASS ) -public class RevisionEntitiesMetamodelTest { - private TriggerOnPrefixLogListener trigger; - - @BeforeAll - public void setUp() { - trigger = new TriggerOnPrefixLogListener( "HHH015007: Illegal argument on static metamodel field injection" ); - LogInspectionHelper.registerListener( - trigger, - Logger.getMessageLogger( - MethodHandles.lookup(), - CoreMessageLogger.class, - MetadataContext.class.getName() - ) - ); - } - - @Test - public void testDefaultRevisionEntity() { - try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true )) { - assertThat( trigger.wasTriggered() ).isFalse(); - } - } - - @Test - public void testSequenceIdRevisionEntity() { - try (final SessionFactoryImplementor ignored = buildSessionFactory( false, false )) { - assertThat( trigger.wasTriggered() ).isFalse(); - } - } - - @Test - public void testDefaultTrackingModifiedEntitiesRevisionEntity() { - try (final SessionFactoryImplementor ignored = buildSessionFactory( true, true )) { - assertThat( trigger.wasTriggered() ).isFalse(); - } - } - - @Test - public void testSequenceIdTrackingModifiedEntitiesRevisionEntity() { - try (final SessionFactoryImplementor ignored = buildSessionFactory( true, false )) { - assertThat( trigger.wasTriggered() ).isFalse(); - } - } - - @SuppressWarnings( "resource" ) - private static SessionFactoryImplementor buildSessionFactory(boolean trackEntities, boolean nativeId) { - final StandardServiceRegistryBuilder registryBuilder = ServiceRegistryUtil.serviceRegistryBuilder(); - registryBuilder.applySetting( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, trackEntities ); - registryBuilder.applySetting( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, nativeId ); - return new MetadataSources( registryBuilder.build() ) - .addAnnotatedClasses( Customer.class ) - .buildMetadata() - .buildSessionFactory() - .unwrap( SessionFactoryImplementor.class ); - } - - @Audited - @Entity( name = "Customer" ) - @SuppressWarnings( "unused" ) - public static class Customer { - @Id - private Long id; - - private String firstName; - - private String lastName; - - @Column( name = "created_on" ) - @CreationTimestamp - private Instant createdOn; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java deleted file mode 100644 index b292381954ed..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; - -/** - * Base test for modified flags feature - * - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public abstract class AbstractModifiedFlagsEntityTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - if ( forceModifiedFlags() ) { - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); - } - } - - public boolean forceModifiedFlags() { - return true; - } - - protected List queryForPropertyHasChanged( - Class clazz, Object id, - String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, false ); - addHasChangedProperties( query, propertyNames ); - return query.getResultList(); - } - - protected List queryForPropertyHasChangedWithDeleted( - Class clazz, Object id, - String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, true ); - addHasChangedProperties( query, propertyNames ); - return query.getResultList(); - } - - protected List queryForPropertyHasNotChanged( - Class clazz, Object id, - String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, false ); - addHasNotChangedProperties( query, propertyNames ); - return query.getResultList(); - } - - protected List queryForPropertyHasNotChangedWithDeleted( - Class clazz, Object id, - String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, true ); - addHasNotChangedProperties( query, propertyNames ); - return query.getResultList(); - } - - private void addHasChangedProperties( - AuditQuery query, - String[] propertyNames) { - for ( String propertyName : propertyNames ) { - query.add( AuditEntity.property( propertyName ).hasChanged() ); - } - } - - private void addHasNotChangedProperties( - AuditQuery query, - String[] propertyNames) { - for ( String propertyName : propertyNames ) { - query.add( AuditEntity.property( propertyName ).hasNotChanged() ); - } - } - - private AuditQuery createForRevisionsQuery(Class clazz, Object id, boolean withDeleted) { - return getAuditReader().createQuery() - .forRevisionsOfEntity( clazz, false, withDeleted ) - .add( AuditEntity.id().eq( id ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java deleted file mode 100644 index 78edaffed778..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import org.hibernate.cfg.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; - -/** - * Base test for modified flags feature - * - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public abstract class AbstractModifiedFlagsOneSessionTest extends - AbstractOneSessionTest { - - @Override - protected void addProperties(Configuration configuration) { - super.addProperties( configuration ); - if ( forceModifiedFlags() ) { - configuration.setProperty( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); - } - } - - public boolean forceModifiedFlags() { - return true; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java deleted file mode 100644 index d0d9b29138c5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.Session; -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.junit.Assert.assertEquals; - -/** - * Test that an updated detached entity will still properly track {@code withModifiedFlag} - * values correctly rather than always triggering that a field was modified so that both a - * detached and attached entity result in the same {@code withModifiedFlag} settings. - * - * @author Chris Cranford - */ -@JiraKey("HHH-8973") -public class DetachedEntityTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Project.class }; - } - - @Test - @Priority(10) - public void initData() { - final Session s = openSession(); - try { - // revision 1 - persist the project entity - s.getTransaction().begin(); - final Project project = new Project( 1, "fooName" ); - s.persist( project ); - s.getTransaction().commit(); - - // detach the project entity - s.clear(); - - // revision 2 to 6 - update the detached project entity. - for( int i = 0; i < 5; ++i ) { - s.getTransaction().begin(); - project.setName( "fooName" + ( i + 2 ) ); - s.merge( project ); - s.getTransaction().commit(); - s.clear(); - } - } - catch ( Throwable t ) { - if ( s.getTransaction().isActive() ) { - s.getTransaction().rollback(); - } - throw t; - } - finally { - s.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), getAuditReader().getRevisions( Project.class, 1 ) ); - } - - @Test - public void testRevisionHistory() { - for ( Integer revision : Arrays.asList( 1, 2, 3, 4, 5, 6 ) ) { - final Project project = getAuditReader().find( Project.class, 1, revision ); - if ( revision == 1 ) { - assertEquals( new Project( 1, "fooName" ), project ); - } - else { - assertEquals( new Project( 1, "fooName" + revision ), project ); - } - } - } - - @Test - public void testModifiedFlagChangesForProjectType() { - final List results = getAuditReader().createQuery() - .forRevisionsOfEntity( Project.class, false, true ) - .add( AuditEntity.property( "type" ).hasChanged() ) - .addProjection( AuditEntity.revisionNumber() ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - assertEquals( Arrays.asList( 1 ), results ); - } - - @Test - public void testModifiedFlagChangesForProjectName() { - final List results = getAuditReader().createQuery() - .forRevisionsOfEntity( Project.class, false, true ) - .add( AuditEntity.property( "name" ).hasChanged() ) - .addProjection( AuditEntity.revisionNumber() ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), results ); - } - - @Entity(name = "Project") - @Audited(withModifiedFlag = true) - public static class Project { - @Id - private Integer id; - private String name; - private String type; - - Project() { - - } - - Project(Integer id, String name) { - this( id, name, "fooType" ); - } - - Project(Integer id, String name, String type) { - this.id = id; - this.name = name; - this.type = type; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Project project = (Project) o; - - if ( id != null ? !id.equals( project.id ) : project.id != null ) { - return false; - } - if ( name != null ? !name.equals( project.name ) : project.name != null ) { - return false; - } - return type != null ? type.equals( project.type ) : project.type == null; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( type != null ? type.hashCode() : 0 ); - return result; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java deleted file mode 100644 index ec9a87a3e0d5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.auditReader.AuditedTestEntity; -import org.hibernate.orm.test.envers.integration.auditReader.NotAuditedTestEntity; - -import org.hibernate.orm.test.envers.integration.modifiedflags.entities.EnumEntity; -import org.hibernate.orm.test.envers.integration.modifiedflags.entities.EnumOption; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; - -/** - * A test which checks the correct behavior of AuditReader.isEntityClassAudited(Class entityClass). - * - * @author Hernan Chanfreau - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedAPITest extends AbstractModifiedFlagsEntityTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {AuditedTestEntity.class, NotAuditedTestEntity.class, EnumEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - AuditedTestEntity ent1 = new AuditedTestEntity( 1, "str1" ); - NotAuditedTestEntity ent2 = new NotAuditedTestEntity( 1, "str1" ); - EnumEntity ent3 = new EnumEntity( 1, EnumOption.A ); - - - em.persist( ent1 ); - em.persist( ent2 ); - em.persist( ent3 ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - - ent1 = em.find( AuditedTestEntity.class, 1 ); - ent2 = em.find( NotAuditedTestEntity.class, 1 ); - ent3 = em.find( EnumEntity.class, 1 ); - ent1.setStr1( "str2" ); - ent2.setStr1( "str2" ); - ent3.setOption( EnumOption.B ); - em.getTransaction().commit(); - } - - @Test - public void testHasChangedHasNotChangedCriteria() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).hasChanged() ).getResultList(); - assertEquals( 2, list.size() ); - assertEquals( "str1", ((AuditedTestEntity) list.get( 0 )).getStr1() ); - assertEquals( "str2", ((AuditedTestEntity) list.get( 1 )).getStr1() ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).hasNotChanged() ).getResultList(); - assertTrue( list.isEmpty() ); - } - - @Test - @JiraKey(value = "HHH-13770") - public void testHasChangedHasNotChangedEnum() { - List list = getAuditReader().createQuery().forRevisionsOfEntity( EnumEntity.class, true, true ) - .add( AuditEntity.property( "option" ).hasChanged() ).getResultList(); - assertEquals( 2, list.size() ); - assertEquals( EnumOption.A, ( (EnumEntity) list.get( 0 ) ).getOption() ); - assertEquals( EnumOption.B, ( (EnumEntity) list.get( 1 ) ).getOption() ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( EnumEntity.class, true, true ) - .add( AuditEntity.property( "option" ).hasNotChanged() ).getResultList(); - assertTrue( list.isEmpty() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java deleted file mode 100644 index b2909962a524..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.Map; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.modifiedflags.entities.Professor; -import org.hibernate.orm.test.envers.integration.modifiedflags.entities.Student; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7510") -public class HasChangedAuditedManyToManyRemovalTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Student.class, - Professor.class - }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - insertion - Professor professor = new Professor(); - Student student = new Student(); - professor.getStudents().add( student ); - student.getProfessors().add( professor ); - entityManager.getTransaction().begin(); - entityManager.persist( professor ); - entityManager.persist( student ); - entityManager.getTransaction().commit(); - entityManager.clear(); - - // Revision 2 - deletion - entityManager.getTransaction().begin(); - professor = entityManager.find( Professor.class, professor.getId() ); - student = entityManager.find( Student.class, student.getId() ); - entityManager.remove( professor ); - entityManager.remove( student ); - // the issue is student.getProfessors() throws a LazyInitializationException. - entityManager.getTransaction().commit(); - } - finally { - entityManager.close(); - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java deleted file mode 100644 index a030594ef606..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.MappingException; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Car; -import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Person; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Hernán Chanfreau - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedAuditedManyToManyTest extends AbstractModifiedFlagsOneSessionTest { - - private long id_car1; - - private long id_pers1; - private long id_pers2; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/manyToManyAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 32 ); - Person pers4 = new Person( "Camomo", 15 ); - - //REV 1 - getSession().getTransaction().begin(); - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - owners.add( pers3 ); - Car car1 = new Car( 5, owners ); - - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - id_pers2 = pers2.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers3 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - } - - @Test - public void testHasChangedPerson1() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers1 ) ) - .add( AuditEntity.property( "cars" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers1 ) ) - .add( AuditEntity.property( "cars" ).hasNotChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedPerson2() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers2 ) ) - .add( AuditEntity.property( "cars" ).hasChanged() ) - .getResultList(); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( Person.class, "Personaje", false, false ) - .add( AuditEntity.id().eq( id_pers2 ) ) - .add( AuditEntity.property( "cars" ).hasNotChanged() ) - .getResultList(); - assertEquals( 0, list.size() ); - } - - @Test - public void testHasChangedCar1() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( Car.class, false, false ) - .add( AuditEntity.id().eq( id_car1 ) ) - .add( AuditEntity.property( "owners" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( Car.class, false, false ) - .add( AuditEntity.id().eq( id_car1 ) ) - .add( AuditEntity.property( "owners" ).hasNotChanged() ) - .getResultList(); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java deleted file mode 100644 index 18afaecb9658..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefEdEntity; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefIngEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedBidirectional2 extends AbstractModifiedFlagsEntityTest { - private Integer ed1_id; - private Integer ed2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); - BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); - - BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); - BiRefIngEntity ing2 = new BiRefIngEntity( 4, "data_ing_2" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - - ing1.setReference( ed1 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ing1.setReference( null ); - ing2.setReference( ed1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ing1.setReference( ed2 ); - ing2.setReference( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - BiRefEdEntity.class, ed1_id, - "referencing" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 2, 3, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - BiRefEdEntity.class, ed2_id, - "referencing" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 4 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java deleted file mode 100644 index 3b16df9b1dfa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7949") -public class HasChangedBidirectionalTest extends AbstractModifiedFlagsEntityTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Ticket.class, Comment.class }; - } - - @Test - @Priority(10) - public void initData() throws Exception { - // Revision 1 | Create ticket with comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Ticket ticket = new Ticket( 1, "data-t1" ); - final Comment comment = new Comment( 1, "Initial comment-t1" ); - ticket.addComment( comment ); - entityManager.persist( comment ); - entityManager.persist( ticket ); - } ); - - // Revision 2 | Create ticket without comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Ticket ticket = new Ticket( 2, "data-t2" ); - entityManager.persist( ticket ); - } ); - - // Revision 3 | Update ticket with comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Ticket ticket = entityManager.find( Ticket.class, 1 ); - ticket.setData( "data-changed-t1" ); - entityManager.merge( ticket ); - } ); - - // Revision 4 | Update ticket without comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Ticket ticket = entityManager.find( Ticket.class, 2 ); - ticket.setData( "data-changed-t2" ); - entityManager.merge( ticket ); - } ); - - // Revision 5 | Update ticket and comment - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Ticket ticket = entityManager.find( Ticket.class, 1 ); - ticket.setData( "data-changed-twice" ); - ticket.getComments().get( 0 ).setText( "comment-modified" ); - ticket.getComments().forEach( entityManager::merge ); - entityManager.merge( ticket ); - } ); - - // Revision 6 | Update ticket and comment collection - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Ticket ticket = entityManager.find( Ticket.class, 1 ); - final Comment comment = new Comment( 2, "Comment2" ); - ticket.addComment( comment ); - entityManager.merge( comment ); - entityManager.merge( ticket ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 3, 5, 6 ), getAuditReader().getRevisions( Ticket.class, 1 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Ticket.class, 2 ) ); - assertEquals( Arrays.asList( 1, 5 ), getAuditReader().getRevisions( Comment.class, 1 ) ); - assertEquals( Arrays.asList( 6 ), getAuditReader().getRevisions( Comment.class, 2 ) ); - } - - @Test - public void testHasChanged() { - assertEquals( Arrays.asList( 1, 6 ), extractRevisionNumbers( queryForPropertyHasChanged( Ticket.class, 1, "comments" ) ) ); - assertEquals( Arrays.asList( 2 ), extractRevisionNumbers( queryForPropertyHasChanged( Ticket.class, 2, "comments" ) ) ); - } - - @Test - public void testHasNotChanged() { - assertEquals( Arrays.asList( 3, 5 ), extractRevisionNumbers( queryForPropertyHasNotChanged( Ticket.class, 1, "comments" ) ) ); - assertEquals( Arrays.asList( 4 ), extractRevisionNumbers( queryForPropertyHasNotChanged( Ticket.class, 2, "comments" ) ) ); - } - - @Entity(name = "Ticket") - @Audited(withModifiedFlag = true) - public static class Ticket { - @Id - private Integer id; - private String data; - @OneToMany(mappedBy = "ticket") - private List comments = new ArrayList<>(); - - Ticket() { - - } - - public Ticket(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getComments() { - return comments; - } - - public void addComment(Comment comment) { - comment.setTicket( this ); - comments.add( comment ); - } - } - - @Entity(name = "Comment") - @Table(name = "COMMENTS") - @Audited(withModifiedFlag = true) - public static class Comment { - @Id - private Integer id; - @ManyToOne - private Ticket ticket; - private String text; - - Comment() { - - } - - public Comment(Integer id, String text) { - this.id = id; - this.text = text; - } - - public Integer getId() { - return id; - } - - public Ticket getTicket() { - return ticket; - } - - public void setTicket(Ticket ticket) { - this.ticket = ticket; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java deleted file mode 100644 index af51b23094aa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1; -import org.hibernate.orm.test.envers.entities.components.Component3; -import org.hibernate.orm.test.envers.entities.components.Component4; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6613") -public class HasChangedComponentCollection extends AbstractModifiedFlagsEntityTest { - private Integer ele1_id = null; - - private final Component4 c4_1 = new Component4( "c41", "c41_value", "c41_description" ); - private final Component4 c4_2 = new Component4( "c42", "c42_value2", "c42_description" ); - private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); - private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 (ele1: initially 1 element in both collections) - em.getTransaction().begin(); - EmbeddableListEntity1 ele1 = new EmbeddableListEntity1(); - ele1.setOtherData( "data" ); - ele1.getComponentList().add( c3_1 ); - em.persist( ele1 ); - em.getTransaction().commit(); - - // Revision (still 1) (ele1: removing non-existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); - - // Revision 2 (ele1: updating singular property and removing non-existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.setOtherData( "modified" ); - ele1.getComponentList().remove( c3_2 ); - ele1 = em.merge( ele1 ); - em.getTransaction().commit(); - - // Revision 3 (ele1: adding one element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_2 ); - em.getTransaction().commit(); - - // Revision 4 (ele1: adding one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_1 ); - em.getTransaction().commit(); - - // Revision 5 (ele1: removing one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); - - // Revision 6 (ele1: changing singular property only) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.setOtherData( "another modification" ); - ele1 = em.merge( ele1 ); - em.getTransaction().commit(); - - ele1_id = ele1.getId(); - - em.close(); - } - - @Test - public void testHasChangedEle() { - List list = queryForPropertyHasChanged( EmbeddableListEntity1.class, ele1_id, "componentList" ); - assertEquals( 4, list.size() ); - assertEquals( makeList( 1, 3, 4, 5 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( EmbeddableListEntity1.class, ele1_id, "otherData" ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 6 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java deleted file mode 100644 index 46410961de9d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.Component2; -import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; -import org.hibernate.orm.test.envers.integration.collection.mapkey.ComponentMapKeyEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedComponentMapKey extends AbstractModifiedFlagsEntityTest { - private Integer cmke_id; - - private Integer cte1_id; - private Integer cte2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentMapKeyEntity.class, ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ComponentMapKeyEntity imke = new ComponentMapKeyEntity(); - - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - - em.persist( cte1 ); - em.persist( cte2 ); - - imke.getIdmap().put( cte1.getComp1(), cte1 ); - - em.persist( imke ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - imke = em.find( ComponentMapKeyEntity.class, imke.getId() ); - - imke.getIdmap().put( cte2.getComp1(), cte2 ); - - em.getTransaction().commit(); - - // - - cmke_id = imke.getId(); - - cte1_id = cte1.getId(); - cte2_id = cte2.getId(); - } - - @Test - public void testHasChangedMapEntity() throws Exception { - List list = queryForPropertyHasChanged( ComponentMapKeyEntity.class, cmke_id, "idmap" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - ComponentMapKeyEntity.class, - cmke_id, "idmap" - ); - assertEquals( 0, list.size() ); - } - - @Test - public void testHasChangedComponentEntity() throws Exception { - List list = queryForPropertyHasChanged( - ComponentTestEntity.class, - cte1_id, "comp1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - ComponentTestEntity.class, cte1_id, - "comp1" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasChanged( ComponentTestEntity.class, cte2_id, "comp1" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ComponentTestEntity.class, cte2_id, "comp1" ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java deleted file mode 100644 index f7f1f913e6d9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.Component2; -import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedComponents extends AbstractModifiedFlagsEntityTest { - private Integer id1; - private Integer id2; - private Integer id3; - private Integer id4; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a", "b" ), new Component2( "x", "y" ) ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "a2", "b2" ), new Component2( - "x2", - "y2" - ) - ); - ComponentTestEntity cte3 = new ComponentTestEntity( - new Component1( "a3", "b3" ), new Component2( - "x3", - "y3" - ) - ); - ComponentTestEntity cte4 = new ComponentTestEntity( null, null ); - - em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte3 ); - em.persist( cte4 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp1( new Component1( "a'", "b'" ) ); - cte2.getComp1().setStr1( "a2'" ); - cte3.getComp2().setStr6( "y3'" ); - cte4.setComp1( new Component1() ); - cte4.getComp1().setStr1( "n" ); - cte4.setComp2( new Component2() ); - cte4.getComp2().setStr5( "m" ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp2( new Component2( "x'", "y'" ) ); - cte3.getComp1().setStr2( "b3'" ); - cte4.setComp1( null ); - cte4.setComp2( null ); - - em.getTransaction().commit(); - - // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - - em.remove( cte2 ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - id2 = cte2.getId(); - id3 = cte3.getId(); - id4 = cte4.getId(); - } - - @Test - public void testModFlagProperties() { - assertEquals( - TestTools.makeSet( "comp1_MOD" ), - TestTools.extractModProperties( - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.entities.components.ComponentTestEntity_AUD" - ) - ) - ); - } - - @Test(expected = IllegalArgumentException.class) - public void testHasChangedNotAudited() throws Exception { - queryForPropertyHasChanged( ComponentTestEntity.class, id1, "comp2" ); - } - - @Test - public void testHasChangedId1() throws Exception { - List list = queryForPropertyHasChanged( ComponentTestEntity.class, id1, "comp1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ComponentTestEntity.class, id1, "comp1" ); - assertEquals( 0, list.size() ); - } - - @Test - public void testHasChangedId2() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( ComponentTestEntity.class, id2, "comp1" ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChangedWithDeleted( ComponentTestEntity.class, id2, "comp1" ); - assertEquals( 0, list.size() ); - } - - @Test - public void testHasChangedId3() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( ComponentTestEntity.class, id3, "comp1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChangedWithDeleted( ComponentTestEntity.class, id3, "comp1" ); - assertEquals( 0, list.size() ); - } - - @Test - public void testHasChangedId4() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( ComponentTestEntity.class, id4, "comp1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChangedWithDeleted( ComponentTestEntity.class, id4, "comp1" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java deleted file mode 100644 index a83fa21e45f2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; -import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; - -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7437") -@SkipForDialect(value = OracleDialect.class, - comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, - comment = "Altibase does not support identity key generation") -public class HasChangedDetachedMultipleCollection extends AbstractModifiedFlagsEntityTest { - private Long mce1Id = null; - private Long mce2Id = null; - private Long mcre1Id = null; - private Long mcre2Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); - mce1.setText( "MultipleCollectionEntity-1-1" ); - em.persist( mce1 ); // Persisting entity with empty collections. - em.getTransaction().commit(); - - mce1Id = mce1.getId(); - - // Revision 2 - update. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); - mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); - mcre1.setMultipleCollectionEntity( mce1 ); - mce1.addRefEntity1( mcre1 ); - em.persist( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - mcre1Id = mcre1.getId(); - - // No changes. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 3 - updating detached collection. - em.getTransaction().begin(); - mce1.removeRefEntity1( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 4 - updating detached entity, no changes to collection attributes. - em.getTransaction().begin(); - mce1.setRefEntities1( new ArrayList() ); - mce1.setRefEntities2( new ArrayList() ); - mce1.setText( "MultipleCollectionEntity-1-2" ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // No changes to detached entity (collections were empty before). - em.getTransaction().begin(); - mce1.setRefEntities1( new ArrayList() ); - mce1.setRefEntities2( new ArrayList() ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - // Revision 5 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce2 = new MultipleCollectionEntity(); - mce2.setText( "MultipleCollectionEntity-2-1" ); - MultipleCollectionRefEntity2 mcre2 = new MultipleCollectionRefEntity2(); - mcre2.setText( "MultipleCollectionRefEntity2-1-1" ); - mcre2.setMultipleCollectionEntity( mce2 ); - mce2.addRefEntity2( mcre2 ); - em.persist( mce2 ); // Cascade persisting related entity. - em.getTransaction().commit(); - - mce2Id = mce2.getId(); - mcre2Id = mcre2.getId(); - - em.close(); - } - - @Test - public void testHasChanged() { - List list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce1Id, "text" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce1Id, "refEntities1" ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce1Id, "refEntities2" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionRefEntity1.class, mcre1Id, "text" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce2Id, "text" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce2Id, "refEntities2" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionRefEntity2.class, mcre2Id, "text" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java deleted file mode 100644 index b0d90636c660..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity1; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity2; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefIngEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * Test for a double "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn - * (and thus owns the relation), and the other uses a @ManyToOne(insertable=false, updatable=false). - * - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedDoubleJoinColumnBidirectionalList extends AbstractModifiedFlagsEntityTest { - private Integer ed1_1_id; - private Integer ed2_1_id; - private Integer ed1_2_id; - private Integer ed2_2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - DoubleListJoinColumnBidirectionalRefIngEntity.class, - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - DoubleListJoinColumnBidirectionalRefEdEntity2.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - "ed1_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - "ed1_2", - null - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - "ed2_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - "ed2_2", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll1" ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll2" ); - - // Revision 1 (ing1: ed1_1, ed2_1, ing2: ed1_2, ed2_2) - em.getTransaction().begin(); - - ing1.getReferences1().add( ed1_1 ); - ing1.getReferences2().add( ed2_1 ); - - ing2.getReferences1().add( ed1_2 ); - ing2.getReferences2().add( ed2_2 ); - - em.persist( ed1_1 ); - em.persist( ed1_2 ); - em.persist( ed2_1 ); - em.persist( ed2_2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing2.getReferences1().clear(); - ing2.getReferences2().clear(); - - ing1.getReferences1().add( ed1_2 ); - ing1.getReferences2().add( ed2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ed1_1.setData( "ed1_1 bis" ); - ed2_2.setData( "ed2_2 bis" ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (ing1: ed2_2, ing2: ed2_1, ed1_1, ed1_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing1.getReferences1().clear(); - ing2.getReferences1().add( ed1_1 ); - ing2.getReferences1().add( ed1_2 ); - - ing1.getReferences2().remove( ed2_1 ); - ing2.getReferences2().add( ed2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_1_id = ed1_1.getId(); - ed1_2_id = ed1_2.getId(); - ed2_1_id = ed2_1.getId(); - ed2_2_id = ed2_2.getId(); - } - - @Test - public void testOwnerHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id, - "owner" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id, - "owner" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id, - "owner" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id, - "owner" - ); - assertEquals( 0, list.size() ); - } - - @Test - public void testOwnerSecEntityHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id, - "owner" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id, - "owner" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id, - "owner" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id, - "owner" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testReferences1HasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references1" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references1" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references1" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references1" - ); - assertEquals( 0, list.size() ); - } - - @Test - public void testReferences2HasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references2" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references2" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references2" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references2" - ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java deleted file mode 100644 index 346254f6d343..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity; -import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E1; -import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E2; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedEnumSet extends AbstractModifiedFlagsEntityTest { - private Integer sse1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EnumSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EnumSetEntity sse1 = new EnumSetEntity(); - - // Revision 1 (sse1: initialy 1 element) - em.getTransaction().begin(); - - sse1.getEnums1().add( E1.X ); - sse1.getEnums2().add( E2.A ); - - em.persist( sse1 ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 1 element/removing a non-existing element) - em.getTransaction().begin(); - - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); - - sse1.getEnums1().add( E1.Y ); - sse1.getEnums2().remove( E2.B ); - - em.getTransaction().commit(); - - // Revision 3 (sse1: removing 1 element/adding an exisiting element) - em.getTransaction().begin(); - - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); - - sse1.getEnums1().remove( E1.X ); - sse1.getEnums2().add( E2.A ); - - em.getTransaction().commit(); - - // - - sse1_id = sse1.getId(); - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - EnumSetEntity.class, sse1_id, - "enums1" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - EnumSetEntity.class, sse1_id, - "enums2" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - EnumSetEntity.class, sse1_id, - "enums1" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - EnumSetEntity.class, sse1_id, - "enums2" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java deleted file mode 100644 index 80041a34239e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java +++ /dev/null @@ -1,276 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.Component2; -import org.hibernate.orm.test.envers.integration.modifiedflags.entities.PartialModifiedFlagsEntity; -import org.hibernate.orm.test.envers.integration.modifiedflags.entities.WithModifiedFlagReferencingEntity; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedForDefaultNotUsing extends AbstractModifiedFlagsEntityTest { - private static final int entityId = 1; - private static final int refEntityId = 1; - - @Override - public boolean forceModifiedFlags() { - return false; - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - PartialModifiedFlagsEntity.class, - WithModifiedFlagReferencingEntity.class, - StrTestEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - - PartialModifiedFlagsEntity entity = - new PartialModifiedFlagsEntity( entityId ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( entity ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - entity.setData( "data1" ); - entity = em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - entity.setComp1( new Component1( "str1", "str2" ) ); - entity = em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - entity.setComp2( new Component2( "str1", "str2" ) ); - entity = em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - - WithModifiedFlagReferencingEntity withModifiedFlagReferencingEntity = new WithModifiedFlagReferencingEntity( - refEntityId, - "first" - ); - withModifiedFlagReferencingEntity.setReference( entity ); - em.persist( withModifiedFlagReferencingEntity ); - - em.getTransaction().commit(); - - // Revision 6 - em.getTransaction().begin(); - - withModifiedFlagReferencingEntity = em.find( WithModifiedFlagReferencingEntity.class, refEntityId ); - withModifiedFlagReferencingEntity.setReference( null ); - withModifiedFlagReferencingEntity.setSecondReference( entity ); - em.merge( withModifiedFlagReferencingEntity ); - - em.getTransaction().commit(); - - // Revision 7 - em.getTransaction().begin(); - - entity.getStringSet().add( "firstElement" ); - entity.getStringSet().add( "secondElement" ); - entity = em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 8 - em.getTransaction().begin(); - - entity.getStringSet().remove( "secondElement" ); - entity.getStringMap().put( "someKey", "someValue" ); - entity = em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 9 - main entity doesn't change - em.getTransaction().begin(); - - StrTestEntity strTestEntity = new StrTestEntity( "first" ); - em.persist( strTestEntity ); - - em.getTransaction().commit(); - - // Revision 10 - em.getTransaction().begin(); - - entity.getEntitiesSet().add( strTestEntity ); - entity = em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 11 - em.getTransaction().begin(); - - entity.getEntitiesSet().remove( strTestEntity ); - entity.getEntitiesMap().put( "someKey", strTestEntity ); - em.merge( entity ); - - em.getTransaction().commit(); - - // Revision 12 - main entity doesn't change - em.getTransaction().begin(); - - strTestEntity.setStr( "second" ); - em.merge( strTestEntity ); - - em.getTransaction().commit(); - - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( (Number) 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 ), - getAuditReader() - .getRevisions( - PartialModifiedFlagsEntity.class, - entityId - ) - ); - } - - @Test - public void testHasChangedData() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "data" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedComp1() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "comp1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - } - - @Test(expected = IllegalArgumentException.class) - public void testHasChangedComp2() throws Exception { - queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "comp2" - ); - } - - @Test - public void testHasChangedReferencing() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "referencing" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 5, 6 ), extractRevisionNumbers( list ) ); - } - - @Test(expected = IllegalArgumentException.class) - public void testHasChangedReferencing2() throws Exception { - queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "referencing2" - ); - } - - @Test - public void testHasChangedStringSet() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "stringSet" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 7, 8 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedStringMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "stringMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 8 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedStringSetAndMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "stringSet", "stringMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 8 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedEntitiesSet() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "entitiesSet" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 10, 11 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedEntitiesMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "entitiesMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 11 ), extractRevisionNumbers( list ) ); - } - - @Test - public void testHasChangedEntitiesSetAndMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "entitiesSet", "entitiesMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 11 ), extractRevisionNumbers( list ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java deleted file mode 100644 index deddf126ce71..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.integration.collection.mapkey.IdMapKeyEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedIdMapKey extends AbstractModifiedFlagsEntityTest { - private Integer imke_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IdMapKeyEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - IdMapKeyEntity imke = new IdMapKeyEntity(); - - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity( "x" ); - StrTestEntity ste2 = new StrTestEntity( "y" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - imke.getIdmap().put( ste1.getId(), ste1 ); - - em.persist( imke ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); - - ste2 = em.find( StrTestEntity.class, ste2.getId() ); - imke = em.find( IdMapKeyEntity.class, imke.getId() ); - - imke.getIdmap().put( ste2.getId(), ste2 ); - - em.getTransaction().commit(); - - // - - imke_id = imke.getId(); - - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - IdMapKeyEntity.class, imke_id, - "idmap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - IdMapKeyEntity.class, imke_id, - "idmap" - ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java deleted file mode 100644 index 555fee61b7ba..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11582") -public class HasChangedInsertUpdateSameTransactionTest extends AbstractModifiedFlagsEntityTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { BasicTestEntity1.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); - BasicTestEntity1 entity = new BasicTestEntity1( "str1", 1 ); - entityManager.persist( entity ); - entity.setStr1( "str2" ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - finally { - entityManager.close(); - } - } - - @Test - public void testPropertyChangedInsrtUpdateSameTransaction() { - // this was only flagged as changed as part of the persist - List list = queryForPropertyHasChanged( BasicTestEntity1.class, 1, "long1" ); - assertEquals( 1, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java deleted file mode 100644 index 42cfeaf4c822..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7918") -public class HasChangedManualFlush extends AbstractModifiedFlagsEntityTest { - private Integer id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - BasicTestEntity1 entity = new BasicTestEntity1( "str1", 1 ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - both properties (str1 and long1) should be marked as modified. - em.getTransaction().begin(); - entity = em.find( BasicTestEntity1.class, entity.getId() ); - entity.setStr1( "str2" ); - entity = em.merge( entity ); - em.flush(); - entity.setLong1( 2 ); - entity = em.merge( entity ); - em.flush(); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testHasChangedOnDoubleFlush() { - List list = queryForPropertyHasChanged( BasicTestEntity1.class, id, "str1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( BasicTestEntity1.class, id, "long1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java deleted file mode 100644 index f45532032649..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponent; -import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponentTestEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedManyToOneInComponent extends AbstractModifiedFlagsEntityTest { - private Integer mtocte_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneComponentTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); - - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ManyToOneComponentTestEntity mtocte1 = new ManyToOneComponentTestEntity( - new ManyToOneComponent( - ste1, - "data1" - ) - ); - - em.persist( mtocte1 ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( ManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setEntity( ste2 ); - - em.getTransaction().commit(); - - mtocte_id1 = mtocte1.getId(); - } - - @Test - public void testHasChangedId1() throws Exception { - List list = queryForPropertyHasChanged( - ManyToOneComponentTestEntity.class, - mtocte_id1, "comp1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - ManyToOneComponentTestEntity.class, - mtocte_id1, "comp1" - ); - assertEquals( 0, list.size() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java deleted file mode 100644 index 65820a5b7b2a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.ListRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ListRefIngEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class HasChangedMergeTest extends AbstractModifiedFlagsEntityTest { - private Integer parent1Id = null; - private Integer child1Id = null; - - private Integer parent2Id = null; - private Integer child2Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefEdEntity.class, ListRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - data preparation - em.getTransaction().begin(); - ListRefEdEntity parent1 = new ListRefEdEntity( 1, "initial data" ); - parent1.setReffering( new ArrayList() ); // Empty collection is not the same as null reference. - ListRefEdEntity parent2 = new ListRefEdEntity( 2, "initial data" ); - parent2.setReffering( new ArrayList() ); - em.persist( parent1 ); - em.persist( parent2 ); - em.getTransaction().commit(); - - // Revision 2 - inserting new child entity and updating parent - em.getTransaction().begin(); - parent1 = em.find( ListRefEdEntity.class, parent1.getId() ); - ListRefIngEntity child1 = new ListRefIngEntity( 1, "initial data", parent1 ); - em.persist( child1 ); - parent1.setData( "updated data" ); - parent1 = em.merge( parent1 ); - em.getTransaction().commit(); - - // Revision 3 - updating parent, flushing and adding new child - em.getTransaction().begin(); - parent2 = em.find( ListRefEdEntity.class, parent2.getId() ); - parent2.setData( "updated data" ); - parent2 = em.merge( parent2 ); - em.flush(); - ListRefIngEntity child2 = new ListRefIngEntity( 2, "initial data", parent2 ); - em.persist( child2 ); - em.getTransaction().commit(); - - parent1Id = parent1.getId(); - child1Id = child1.getId(); - - parent2Id = parent2.getId(); - child2Id = child2.getId(); - - em.close(); - } - - @Test - @JiraKey(value = "HHH-7948") - public void testOneToManyInsertChildUpdateParent() { - List list = queryForPropertyHasChanged( ListRefEdEntity.class, parent1Id, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefEdEntity.class, parent1Id, "reffering" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefIngEntity.class, child1Id, "reference" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - } - - @Test - @JiraKey(value = "HHH-7948") - public void testOneToManyUpdateParentInsertChild() { - List list = queryForPropertyHasChanged( ListRefEdEntity.class, parent2Id, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefEdEntity.class, parent2Id, "reffering" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefIngEntity.class, child2Id, "reference" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java deleted file mode 100644 index 89053ab74ae1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedNullProperties extends AbstractModifiedFlagsEntityTest { - private Integer id1; - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } - - private void modifyEntity(Integer id, String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); - bte1.setLong1( lng ); - bte1.setStr1( str ); - em.getTransaction().commit(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - id2 = addNewEntity( null, 20 ); // rev 2 - - modifyEntity( id1, null, 1 ); // rev 3 - modifyEntity( id2, "y2", 20 ); // rev 4 - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "str1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "long1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id2, "str1" - ); - // str1 property was null before insert and after insert so in a way it didn't change - is it a good way to go? - assertEquals( 1, list.size() ); - assertEquals( makeList( 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id2, "long1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( BasicTestEntity1.class, false, true ) - .add( AuditEntity.property( "str1" ).hasChanged() ) - .add( AuditEntity.property( "long1" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java deleted file mode 100644 index 2fd65170b14f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponent; -import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponentTestEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedOneToManyInComponent extends AbstractModifiedFlagsEntityTest { - private Integer otmcte_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {OneToManyComponentTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); - - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - OneToManyComponentTestEntity otmcte1 = new OneToManyComponentTestEntity( new OneToManyComponent( "data1" ) ); - otmcte1.getComp1().getEntities().add( ste1 ); - - em.persist( otmcte1 ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - otmcte1 = em.find( OneToManyComponentTestEntity.class, otmcte1.getId() ); - otmcte1.getComp1().getEntities().add( ste2 ); - - em.getTransaction().commit(); - - otmcte_id1 = otmcte1.getId(); - } - - @Test - public void testHasChangedId1() throws Exception { - List list = - queryForPropertyHasChanged( - OneToManyComponentTestEntity.class, - otmcte_id1, "comp1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - OneToManyComponentTestEntity.class, - otmcte_id1, "comp1" - ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java deleted file mode 100644 index f3e1df0f172c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.StringMapEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedStringMap extends AbstractModifiedFlagsEntityTest { - private Integer sme1_id; - private Integer sme2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringMapEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StringMapEntity sme1 = new StringMapEntity(); - StringMapEntity sme2 = new StringMapEntity(); - - // Revision 1 (sme1: initialy empty, sme2: initialy 1 mapping) - em.getTransaction().begin(); - - sme2.getStrings().put( "1", "a" ); - - em.persist( sme1 ); - em.persist( sme2 ); - - em.getTransaction().commit(); - - // Revision 2 (sme1: adding 2 mappings, sme2: no changes) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().put( "1", "a" ); - sme1.getStrings().put( "2", "b" ); - - em.getTransaction().commit(); - - // Revision 3 (sme1: removing an existing mapping, sme2: replacing a value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "1" ); - sme2.getStrings().put( "1", "b" ); - - em.getTransaction().commit(); - - // No revision (sme1: removing a non-existing mapping, sme2: replacing with the same value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "3" ); - sme2.getStrings().put( "1", "b" ); - - em.getTransaction().commit(); - - // - - sme1_id = sme1.getId(); - sme2_id = sme2.getId(); - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - StringMapEntity.class, sme1_id, - "strings" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - StringMapEntity.class, sme2_id, - "strings" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - StringMapEntity.class, sme1_id, - "strings" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - StringMapEntity.class, sme2_id, - "strings" - ); - assertEquals( 0, list.size() ); // in rev 2 there was no version generated for sme2_id - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java deleted file mode 100644 index 83fdaff0b310..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedStringSet extends AbstractModifiedFlagsEntityTest { - private Integer sse1_id; - private Integer sse2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StringSetEntity sse1 = new StringSetEntity(); - StringSetEntity sse2 = new StringSetEntity(); - - // Revision 1 (sse1: initialy empty, sse2: initialy 2 elements) - em.getTransaction().begin(); - - sse2.getStrings().add( "sse2_string1" ); - sse2.getStrings().add( "sse2_string2" ); - - em.persist( sse1 ); - em.persist( sse2 ); - - em.getTransaction().commit(); - - // Revision 2 (sse1: adding 2 elements, sse2: adding an existing element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().add( "sse1_string1" ); - sse1.getStrings().add( "sse1_string2" ); - - sse2.getStrings().add( "sse2_string1" ); - - em.getTransaction().commit(); - - // Revision 3 (sse1: removing a non-existing element, sse2: removing one element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().remove( "sse1_string3" ); - sse2.getStrings().remove( "sse2_string1" ); - - em.getTransaction().commit(); - - // - - sse1_id = sse1.getId(); - sse2_id = sse2.getId(); - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - StringSetEntity.class, sse1_id, - "strings" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - StringSetEntity.class, sse2_id, - "strings" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - StringSetEntity.class, sse1_id, - "strings" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - StringSetEntity.class, sse2_id, - "strings" - ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java deleted file mode 100644 index 0f6c31d9deaa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity2; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedUnversionedProperties extends AbstractModifiedFlagsEntityTest { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity2.class}; - } - - private Integer addNewEntity(String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = new BasicTestEntity2( str1, str2 ); - em.persist( bte2 ); - em.getTransaction().commit(); - - return bte2.getId(); - } - - private void modifyEntity(Integer id, String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id ); - bte2.setStr1( str1 ); - bte2.setStr2( str2 ); - em.getTransaction().commit(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", "a" ); // rev 1 - modifyEntity( id1, "x", "a" ); // no rev - modifyEntity( id1, "y", "b" ); // rev 2 - modifyEntity( id1, "y", "c" ); // no rev - } - - @Test - public void testHasChangedQuery() throws Exception { - List list = queryForPropertyHasChanged( - BasicTestEntity2.class, - id1, "str1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - } - - @Test(expected = IllegalArgumentException.class) - public void testExceptionOnHasChangedQuery() throws Exception { - queryForPropertyHasChangedWithDeleted( - BasicTestEntity2.class, - id1, "str2" - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java deleted file mode 100644 index 69da61ddd6be..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags; - -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class ModifiedFlagSuffix extends AbstractModifiedFlagsEntityTest { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.MODIFIED_FLAG_SUFFIX, "_CHANGED" ); - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - } - - @Test - public void testModFlagProperties() { - assertEquals( - TestTools.makeSet( "str1_CHANGED", "long1_CHANGED" ), - TestTools.extractModProperties( - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1_AUD" - ), - "_CHANGED" - ) - ); - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "str1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "long1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( BasicTestEntity1.class, false, true ) - .add( AuditEntity.property( "str1" ).hasChanged() ) - .add( AuditEntity.property( "long1" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/EnumEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/EnumEntity.java deleted file mode 100644 index ab2ba952faef..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/EnumEntity.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.entities; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class EnumEntity { - @Id - private Integer id; - - @Enumerated(EnumType.STRING) - @Column(name = "client_option") - @Audited(modifiedColumnName = "client_option_mod") - private EnumOption option; - - EnumEntity() { - - } - - public EnumEntity(Integer id, EnumOption option) { - this.id = id; - this.option = option; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public EnumOption getOption() { - return option; - } - - public void setOption(EnumOption option) { - this.option = option; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/EnumOption.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/EnumOption.java deleted file mode 100644 index ccae06227358..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/EnumOption.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.entities; - -/** - * @author Chris Cranford - */ -public enum EnumOption { - A, - B, -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/PartialModifiedFlagsEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/PartialModifiedFlagsEntity.java deleted file mode 100644 index 439ce58c935b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/PartialModifiedFlagsEntity.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.entities; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.CollectionTable; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.MapKeyColumn; -import jakarta.persistence.OneToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.orm.test.envers.entities.components.Component2; - -/** - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -@Entity -@Table(name = "PartialModFlags") -@Audited(withModifiedFlag = false) -public class PartialModifiedFlagsEntity { - @Id - private Integer id; - - @Audited(withModifiedFlag = true) - private String data; - - @Audited(withModifiedFlag = true) - @Embedded - private Component1 comp1; - - @Audited(withModifiedFlag = false) - @Embedded - private Component2 comp2; - - @Audited(withModifiedFlag = true) - @OneToOne(mappedBy = "reference") - private WithModifiedFlagReferencingEntity referencing; - - @Audited(withModifiedFlag = false) - @OneToOne(mappedBy = "secondReference") - private WithModifiedFlagReferencingEntity referencing2; - - @Audited(withModifiedFlag = true) - @ElementCollection - @JoinTable(name = "PartialModFlags_StrSet") - @AuditJoinTable(name = "PartialModFlags_StrSet_AUD") - private Set stringSet = new HashSet(); - - @Audited(withModifiedFlag = true) - @ManyToMany - @CollectionTable(name = "ENTITIESSET") - private Set entitiesSet = new HashSet(); - - @Audited(withModifiedFlag = true) - @ElementCollection - @MapKeyColumn(nullable = false) - @JoinTable(name = "PartialModFlags_StrMap") - @AuditJoinTable(name = "PartialModFlags_StrMap_AUD") - private Map stringMap = new HashMap(); - - @Audited(withModifiedFlag = true) - @ManyToMany - @CollectionTable(name = "ENTITIESMAP") - @MapKeyColumn(nullable = false) - private Map entitiesMap = - new HashMap(); - - public PartialModifiedFlagsEntity() { - } - - public PartialModifiedFlagsEntity(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public WithModifiedFlagReferencingEntity getReferencing() { - return referencing; - } - - public void setReferencing(WithModifiedFlagReferencingEntity referencing) { - this.referencing = referencing; - } - - public WithModifiedFlagReferencingEntity getReferencing2() { - return referencing2; - } - - public void setReferencing2(WithModifiedFlagReferencingEntity referencing) { - this.referencing2 = referencing; - } - - public Component1 getComp1() { - return comp1; - } - - public void setComp1(Component1 comp1) { - this.comp1 = comp1; - } - - public Component2 getComp2() { - return comp2; - } - - public void setComp2(Component2 comp2) { - this.comp2 = comp2; - } - - public Set getStringSet() { - return stringSet; - } - - public void setStringSet(Set stringSet) { - this.stringSet = stringSet; - } - - public Set getEntitiesSet() { - return entitiesSet; - } - - public void setEntitiesSet(Set entitiesSet) { - this.entitiesSet = entitiesSet; - } - - public Map getStringMap() { - return stringMap; - } - - public void setStringMap(Map stringMap) { - this.stringMap = stringMap; - } - - public Map getEntitiesMap() { - return entitiesMap; - } - - public void setEntitiesMap(Map entitiesMap) { - this.entitiesMap = entitiesMap; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PartialModifiedFlagsEntity) ) { - return false; - } - - PartialModifiedFlagsEntity that = (PartialModifiedFlagsEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/Professor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/Professor.java deleted file mode 100644 index 4e08b73803ad..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/Professor.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.entities; - -import java.util.HashSet; -import java.util.Set; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.SequenceGenerator; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name = "PROFESSOR") -@SequenceGenerator(name = "SEQ_PROFESSOR", sequenceName = "SEQ_PROFESSOR", allocationSize = 1) -@Audited -public class Professor { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_PROFESSOR") - private Long id; - - @ManyToMany(fetch = FetchType.LAZY) - @JoinTable(name = "professor_student", - joinColumns = @JoinColumn(name = "professor_id", referencedColumnName = "id"), - inverseJoinColumns = @JoinColumn(name = "student_id", referencedColumnName = "id") - ) - private Set students = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Set getStudents() { - return students; - } - - public void setStudents(Set students) { - this.students = students; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/Student.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/Student.java deleted file mode 100644 index 2e6f30c0a3c9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/Student.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.entities; - -import java.util.HashSet; -import java.util.Set; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.SequenceGenerator; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Table(name = "STUDENT") -@SequenceGenerator(name = "SEQ_STUDENT", sequenceName = "SEQ_STUDENT", allocationSize = 1) -@Audited -public class Student { - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_STUDENT") - private Long id; - - @ManyToMany(fetch = FetchType.LAZY, mappedBy = "students") - private Set professors = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Set getProfessors() { - return professors; - } - - public void setProfessors(Set professors) { - this.professors = professors; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/WithModifiedFlagReferencingEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/WithModifiedFlagReferencingEntity.java deleted file mode 100644 index fd9e414325eb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/entities/WithModifiedFlagReferencingEntity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "WithModFlagRefIng") -@Audited(withModifiedFlag = true) -public class WithModifiedFlagReferencingEntity { - @Id - private Integer id; - - private String data; - - @OneToOne - private PartialModifiedFlagsEntity reference; - - @OneToOne - private PartialModifiedFlagsEntity secondReference; - - public WithModifiedFlagReferencingEntity() { - } - - public WithModifiedFlagReferencingEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public PartialModifiedFlagsEntity getReference() { - return reference; - } - - public void setReference(PartialModifiedFlagsEntity reference) { - this.reference = reference; - } - - public PartialModifiedFlagsEntity getSecondReference() { - return secondReference; - } - - public void setSecondReference(PartialModifiedFlagsEntity reference) { - this.secondReference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof WithModifiedFlagReferencingEntity) ) { - return false; - } - - WithModifiedFlagReferencingEntity that = (WithModifiedFlagReferencingEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ClientOption.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ClientOption.java deleted file mode 100644 index 2b241d288334..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ClientOption.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -/** - * @author Chris Cranford - */ -public enum ClientOption { - A, - B -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java deleted file mode 100644 index b79fb48b0213..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -/** - * @author Chris Cranford - */ -public class ImprovedColumnNamingStrategyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - options.put( EnversSettings.MODIFIED_COLUMN_NAMING_STRATEGY, "improved" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class, OtherEntity.class, SingleIdEntity.class }; - } - - @Test - public void testModifiedColumns() { - final Table table1 = metadata().getEntityBinding( TestEntity.class.getName() + "_AUD" ).getTable(); - assertNotNull( table1.getColumn( new Column( "data1_MOD") ) ); - assertNotNull( table1.getColumn( new Column( "mydata_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "data_3" ) ) ); - assertNotNull( table1.getColumn( new Column( "the_data_mod" ) ) ); - - assertNotNull( table1.getColumn( new Column( "embeddable_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "otherEntity_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "single_id_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "singleIdEntity2_id_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "client_option_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "cop_mod" ) ) ); - - final Table table2 = metadata().getEntityBinding( OtherEntity.class.getName() + "_AUD" ).getTable(); - assertNotNull( table2.getColumn( new Column( "d_MOD" ) ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java deleted file mode 100644 index 719933b44789..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -/** - * @author Chris Cranford - */ -public class LegacyColumnNamingStrategyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class, OtherEntity.class, SingleIdEntity.class }; - } - - @Test - public void testModifiedColumns() { - final Table table1 = metadata().getEntityBinding( TestEntity.class.getName() + "_AUD" ).getTable(); - assertNotNull( table1.getColumn( new Column( "data1_MOD") ) ); - assertNotNull( table1.getColumn( new Column( "data2_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "data_3" ) ) ); - assertNotNull( table1.getColumn( new Column( "the_data_mod" ) ) ); - - assertNotNull( table1.getColumn( new Column( "embeddable_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "otherEntity_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "singleIdEntity_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "singleIdEntity2_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "clientOption_MOD" ) ) ); - assertNotNull( table1.getColumn( new Column( "cop_mod" ) ) ); - - final Table table2 = metadata().getEntityBinding( OtherEntity.class.getName() + "_AUD" ).getTable(); - assertNotNull( table2.getColumn( new Column( "data_MOD" ) ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/OtherEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/OtherEntity.java deleted file mode 100644 index a9230e5aac00..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/OtherEntity.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import jakarta.persistence.Column; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited(withModifiedFlag = true) -public class OtherEntity { - @EmbeddedId - private OtherEntityId id; - - @Column(name = "d") - private String data; - - public OtherEntityId getId() { - return id; - } - - public void setId(OtherEntityId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/OtherEntityId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/OtherEntityId.java deleted file mode 100644 index 22fd3d4aac47..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/OtherEntityId.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import java.io.Serializable; - -import jakarta.persistence.Embeddable; - -/** - * @author Chris Cranford - */ -@Embeddable -public class OtherEntityId implements Serializable { - private Integer id1; - private Integer id2; - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/SingleIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/SingleIdEntity.java deleted file mode 100644 index 97a57c3e45dc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/SingleIdEntity.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited(withModifiedFlag = true) -public class SingleIdEntity { - @Id - @GeneratedValue - private Integer id; - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/TestEmbeddable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/TestEmbeddable.java deleted file mode 100644 index 2cfc77a25438..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/TestEmbeddable.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import jakarta.persistence.Embeddable; - -/** - * @author Chris Cranford - */ -@Embeddable -public class TestEmbeddable { - String value1; - String value2; - - public String getValue1() { - return value1; - } - - public void setValue1(String value1) { - this.value1 = value1; - } - - public String getValue2() { - return value2; - } - - public void setValue2(String value2) { - this.value2 = value2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/TestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/TestEntity.java deleted file mode 100644 index aa16af4bfbe9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/TestEntity.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.modifiedflags.naming; - -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited(withModifiedFlag = true) -public class TestEntity { - @Id - @GeneratedValue - private Integer id; - private String data1; - @Column(name = "mydata") - private String data2; - @Audited(modifiedColumnName = "data_3", withModifiedFlag = true) - private String data3; - @Column(name = "thedata") - @Audited(modifiedColumnName = "the_data_mod", withModifiedFlag = true) - private String data4; - @Embedded - private TestEmbeddable embeddable; - @ManyToOne - @JoinColumns({ - @JoinColumn(name = "other_entity_id1", nullable = false), - @JoinColumn(name = "other_entity_id2", nullable = false) - }) - private OtherEntity otherEntity; - - @OneToOne - @JoinColumn(name = "single_id") - private SingleIdEntity singleIdEntity; - - @OneToOne - private SingleIdEntity singleIdEntity2; - - @Column(name = "client_option") - @Enumerated(EnumType.STRING) - private ClientOption clientOption; - - @Column(name = "client_option2") - @Enumerated(EnumType.STRING) - @Audited(withModifiedFlag = true, modifiedColumnName = "cop_mod") - private ClientOption clientOption2; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - public String getData3() { - return data3; - } - - public void setData3(String data3) { - this.data3 = data3; - } - - public String getData4() { - return data4; - } - - public void setData4(String data4) { - this.data4 = data4; - } - - public TestEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(TestEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public OtherEntity getOtherEntity() { - return otherEntity; - } - - public void setOtherEntity(OtherEntity otherEntity) { - this.otherEntity = otherEntity; - } - - public SingleIdEntity getSingleIdEntity() { - return singleIdEntity; - } - - public void setSingleIdEntity(SingleIdEntity singleIdEntity) { - this.singleIdEntity = singleIdEntity; - } - - public SingleIdEntity getSingleIdEntity2() { - return singleIdEntity2; - } - - public void setSingleIdEntity2(SingleIdEntity singleIdEntity2) { - this.singleIdEntity2 = singleIdEntity2; - } - - public ClientOption getClientOption() { - return clientOption; - } - - public void setClientOption(ClientOption clientOption) { - this.clientOption = clientOption; - } - - public ClientOption getClientOption2() { - return clientOption2; - } - - public void setClientOption2(ClientOption clientOption2) { - this.clientOption2 = clientOption2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/Address.java deleted file mode 100644 index d5e98b79bd4e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/Address.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.multiplerelations; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Address implements Serializable { - @Id - @GeneratedValue - private long id; - - private String city; - - @ManyToMany(cascade = {CascadeType.PERSIST}) - private Set tenants = new HashSet(); - - @ManyToOne - @JoinColumn(nullable = false) - Person landlord; - - public Address() { - } - - public Address(String city) { - this.city = city; - } - - public Address(String city, long id) { - this.id = id; - this.city = city; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Address) ) { - return false; - } - - Address address = (Address) o; - - if ( id != address.id ) { - return false; - } - if ( city != null ? !city.equals( address.city ) : address.city != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) (id ^ (id >>> 32)); - result = 31 * result + (city != null ? city.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Address(id = " + id + ", city = " + city + ")"; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public Set getTenants() { - return tenants; - } - - public void setTenants(Set tenants) { - this.tenants = tenants; - } - - public Person getLandlord() { - return landlord; - } - - public void setLandlord(Person landlord) { - this.landlord = landlord; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java deleted file mode 100644 index f7d3a9d97396..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.multiplerelations; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; -import jakarta.persistence.Query; - -import org.hibernate.Session; -import org.hibernate.envers.AuditMappedBy; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.type.StandardBasicTypes; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7681") -public class GroupMemberTest extends BaseEnversJPAFunctionalTestCase { - private Integer uniqueGroupId; - private Integer groupMemberId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { GroupMember.class, MultiGroup.class, UniqueGroup.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final UniqueGroup uniqueGroup = new UniqueGroup(); - final GroupMember groupMember = new GroupMember(); - uniqueGroup.addMember( groupMember ); - entityManager.persist( uniqueGroup ); - entityManager.persist( groupMember ); - uniqueGroupId = uniqueGroup.getId(); - groupMemberId = groupMember.getId(); - } ); - // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final GroupMember groupMember = entityManager.find( GroupMember.class, groupMemberId ); - final MultiGroup multiGroup = new MultiGroup(); - groupMember.addMultiGroup( multiGroup ); - entityManager.persist( multiGroup ); - } ); - } - - @Test - public void testUniqueGroupFound() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final GroupMember groupMember = entityManager.find( GroupMember.class, groupMemberId ); - assertNotNull( groupMember ); - assertNotNull( groupMember.getUniqueGroup() ); - } ); - } - - @Test - public void testUniqueGroupFromAuditHistory() { - assertEquals( uniqueGroupId, getCurrentAuditUniqueGroupId() ); - } - - private Integer getCurrentAuditUniqueGroupId() { - return TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Session session = entityManager.unwrap( Session.class ); - final Query query = session.createNativeQuery( - "SELECT unique_group_id FROM GroupMember_AUD ORDER BY REV DESC" - ) - .addScalar( "unique_group_id", StandardBasicTypes.INTEGER ) - .setMaxResults( 1 ); - final Object result = query.getSingleResult(); - assertNotNull( result ); - return (Integer) result; - } ); - } - - @Entity(name = "GroupMember") - @Audited - public static class GroupMember { - @Id - @GeneratedValue - private Integer id; - - @ManyToOne - @JoinColumn(name = "unique_group_id", insertable = false, updatable = false) - private UniqueGroup uniqueGroup; - - @ManyToMany(mappedBy = "members") - private List multiGroups = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public UniqueGroup getUniqueGroup() { - return uniqueGroup; - } - - public void setUniqueGroup(UniqueGroup uniqueGroup) { - this.uniqueGroup = uniqueGroup; - } - - public List getMultiGroups() { - return multiGroups; - } - - public void setMultiGroups(List multiGroups) { - this.multiGroups = multiGroups; - } - - public void addMultiGroup(MultiGroup multiGroup) { - this.multiGroups.add( multiGroup ); - multiGroup.addMember( this ); - } - } - - @Entity(name = "UniqueGroup") - @Audited - public static class UniqueGroup { - @Id - @GeneratedValue - private Integer id; - - @OneToMany - @JoinColumn(name = "unique_group_id") - @AuditMappedBy(mappedBy = "uniqueGroup") - private Set members = new HashSet<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Set getMembers() { - return members; - } - - public void setMembers(Set members) { - this.members = members; - } - - public void addMember(GroupMember groupMember) { - this.members.add( groupMember ); - } - } - - @Entity(name = "MultiGroup") - @Audited - public static class MultiGroup { - @Id - @GeneratedValue - private Integer id; - - @ManyToMany - @OrderColumn - private List members = new ArrayList<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getMembers() { - return members; - } - - public void setMembers(List members) { - this.members = members; - } - - public void addMember(GroupMember groupMember) { - this.members.add( groupMember ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java deleted file mode 100644 index 2667686544c0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.multiplerelations; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7073") -public class MultipleAssociationsTest extends BaseEnversJPAFunctionalTestCase { - private long lukaszId = 0; - private long kingaId = 0; - private long warsawId = 0; - private long cracowId = 0; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, Address.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Person lukasz = new Person( "Lukasz" ); - Person kinga = new Person( "Kinga" ); - Address warsaw = new Address( "Warsaw" ); - warsaw.getTenants().add( lukasz ); - warsaw.setLandlord( lukasz ); - warsaw.getTenants().add( kinga ); - lukasz.getAddresses().add( warsaw ); - lukasz.getOwnedAddresses().add( warsaw ); - kinga.getAddresses().add( warsaw ); - em.persist( lukasz ); - em.persist( kinga ); - em.persist( warsaw ); - em.getTransaction().commit(); - - lukaszId = lukasz.getId(); - kingaId = kinga.getId(); - warsawId = warsaw.getId(); - - // Revision 2 - em.getTransaction().begin(); - kinga = em.find( Person.class, kinga.getId() ); - Address cracow = new Address( "Cracow" ); - kinga.getAddresses().add( cracow ); - cracow.getTenants().add( kinga ); - cracow.setLandlord( kinga ); - em.persist( cracow ); - em.getTransaction().commit(); - - cracowId = cracow.getId(); - - // Revision 3 - em.getTransaction().begin(); - cracow = em.find( Address.class, cracow.getId() ); - cracow.setCity( "Krakow" ); - em.merge( cracow ); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - lukasz = em.find( Person.class, lukasz.getId() ); - lukasz.setName( "Lucas" ); - em.merge( lukasz ); - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - warsaw = em.find( Address.class, warsaw.getId() ); - lukasz = em.find( Person.class, lukasz.getId() ); - kinga = em.find( Person.class, kinga.getId() ); - warsaw.setLandlord( kinga ); - kinga.getOwnedAddresses().add( warsaw ); - lukasz.getOwnedAddresses().remove( warsaw ); - em.merge( warsaw ); - em.merge( lukasz ); - em.merge( kinga ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 4, 5 ), getAuditReader().getRevisions( Person.class, lukaszId ) ); - Assert.assertEquals( Arrays.asList( 1, 2, 5 ), getAuditReader().getRevisions( Person.class, kingaId ) ); - Assert.assertEquals( Arrays.asList( 1, 5 ), getAuditReader().getRevisions( Address.class, warsawId ) ); - Assert.assertEquals( Arrays.asList( 2, 3 ), getAuditReader().getRevisions( Address.class, cracowId ) ); - } - - @Test - public void testHistoryOfLukasz() { - Person lukasz = new Person( "Lukasz", lukaszId ); - Address warsaw = new Address( "Warsaw", warsawId ); - lukasz.getAddresses().add( warsaw ); - lukasz.getOwnedAddresses().add( warsaw ); - - Person ver1 = getAuditReader().find( Person.class, lukaszId, 1 ); - Assert.assertEquals( lukasz, ver1 ); - Assert.assertEquals( lukasz.getAddresses(), ver1.getAddresses() ); - Assert.assertEquals( lukasz.getOwnedAddresses(), ver1.getOwnedAddresses() ); - - lukasz.setName( "Lucas" ); - - Person ver4 = getAuditReader().find( Person.class, lukaszId, 4 ); - Assert.assertEquals( lukasz, ver4 ); - - lukasz.getOwnedAddresses().remove( warsaw ); - - Person ver5 = getAuditReader().find( Person.class, lukaszId, 5 ); - Assert.assertEquals( lukasz.getOwnedAddresses(), ver5.getOwnedAddresses() ); - } - - @Test - public void testHistoryOfKinga() { - Person kinga = new Person( "Kinga", kingaId ); - Address warsaw = new Address( "Warsaw", warsawId ); - kinga.getAddresses().add( warsaw ); - - Person ver1 = getAuditReader().find( Person.class, kingaId, 1 ); - Assert.assertEquals( kinga, ver1 ); - Assert.assertEquals( kinga.getAddresses(), ver1.getAddresses() ); - Assert.assertEquals( kinga.getOwnedAddresses(), ver1.getOwnedAddresses() ); - - Address cracow = new Address( "Cracow", cracowId ); - kinga.getOwnedAddresses().add( cracow ); - kinga.getAddresses().add( cracow ); - - Person ver2 = getAuditReader().find( Person.class, kingaId, 2 ); - Assert.assertEquals( kinga, ver2 ); - Assert.assertEquals( kinga.getAddresses(), ver2.getAddresses() ); - Assert.assertEquals( kinga.getOwnedAddresses(), ver2.getOwnedAddresses() ); - - kinga.getOwnedAddresses().add( warsaw ); - cracow.setCity( "Krakow" ); - - Person ver5 = getAuditReader().find( Person.class, kingaId, 5 ); - Assert.assertEquals( TestTools.makeSet( kinga.getAddresses() ), TestTools.makeSet( ver5.getAddresses() ) ); - Assert.assertEquals( - TestTools.makeSet( kinga.getOwnedAddresses() ), - TestTools.makeSet( ver5.getOwnedAddresses() ) - ); - } - - @Test - public void testHistoryOfCracow() { - Address cracow = new Address( "Cracow", cracowId ); - Person kinga = new Person( "Kinga", kingaId ); - cracow.getTenants().add( kinga ); - cracow.setLandlord( kinga ); - - Address ver2 = getAuditReader().find( Address.class, cracowId, 2 ); - Assert.assertEquals( cracow, ver2 ); - Assert.assertEquals( cracow.getTenants(), ver2.getTenants() ); - Assert.assertEquals( cracow.getLandlord().getId(), ver2.getLandlord().getId() ); - - cracow.setCity( "Krakow" ); - - Address ver3 = getAuditReader().find( Address.class, cracowId, 3 ); - Assert.assertEquals( cracow, ver3 ); - } - - @Test - public void testHistoryOfWarsaw() { - Address warsaw = new Address( "Warsaw", warsawId ); - Person kinga = new Person( "Kinga", kingaId ); - Person lukasz = new Person( "Lukasz", lukaszId ); - warsaw.getTenants().add( lukasz ); - warsaw.getTenants().add( kinga ); - warsaw.setLandlord( lukasz ); - - Address ver1 = getAuditReader().find( Address.class, warsawId, 1 ); - Assert.assertEquals( warsaw, ver1 ); - Assert.assertEquals( warsaw.getTenants(), ver1.getTenants() ); - Assert.assertEquals( warsaw.getLandlord().getId(), ver1.getLandlord().getId() ); - - warsaw.setLandlord( kinga ); - - Address ver5 = getAuditReader().find( Address.class, warsawId, 5 ); - Assert.assertEquals( warsaw.getLandlord().getId(), ver5.getLandlord().getId() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/Person.java deleted file mode 100644 index db3702133fe0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/Person.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.multiplerelations; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Person implements Serializable { - @Id - @GeneratedValue - private long id; - - private String name; - - @ManyToMany(cascade = {CascadeType.PERSIST}) - @JoinTable(name = "PERSON_ADDRESS", - joinColumns = {@JoinColumn(name = "personId", nullable = false)}, - inverseJoinColumns = {@JoinColumn(name = "addressId", nullable = false)}) - private Set
    addresses = new HashSet
    (); - - @OneToMany(mappedBy = "landlord", cascade = {CascadeType.PERSIST}, orphanRemoval = true) - private Set
    ownedAddresses = new HashSet
    (); - - public Person() { - } - - public Person(String name) { - this.name = name; - } - - public Person(String name, long id) { - this.id = id; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Person) ) { - return false; - } - - Person person = (Person) o; - - if ( id != person.id ) { - return false; - } - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) (id ^ (id >>> 32)); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Person(id = " + id + ", name = " + name + ")"; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set
    getAddresses() { - return addresses; - } - - public void setAddresses(Set
    addresses) { - this.addresses = addresses; - } - - public Set
    getOwnedAddresses() { - return ownedAddresses; - } - - public void setOwnedAddresses(Set
    ownedAddresses) { - this.ownedAddresses = ownedAddresses; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java deleted file mode 100644 index 91a506d25f04..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicNaming extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {NamingTestEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - NamingTestEntity1 nte1 = new NamingTestEntity1( "data1" ); - NamingTestEntity1 nte2 = new NamingTestEntity1( "data2" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( nte1 ); - em.persist( nte2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - nte1 = em.find( NamingTestEntity1.class, nte1.getId() ); - nte1.setData( "data1'" ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - nte2 = em.find( NamingTestEntity1.class, nte2.getId() ); - nte2.setData( "data2'" ); - - em.getTransaction().commit(); - - // - - id1 = nte1.getId(); - id2 = nte2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( NamingTestEntity1.class, id1 ) ); - - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( NamingTestEntity1.class, id2 ) ); - } - - @Test - public void testHistoryOfId1() { - NamingTestEntity1 ver1 = new NamingTestEntity1( id1, "data1" ); - NamingTestEntity1 ver2 = new NamingTestEntity1( id1, "data1'" ); - - assert getAuditReader().find( NamingTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( NamingTestEntity1.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( NamingTestEntity1.class, id1, 3 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId2() { - NamingTestEntity1 ver1 = new NamingTestEntity1( id2, "data2" ); - NamingTestEntity1 ver2 = new NamingTestEntity1( id2, "data2'" ); - - assert getAuditReader().find( NamingTestEntity1.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( NamingTestEntity1.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( NamingTestEntity1.class, id2, 3 ).equals( ver2 ); - } - - @Test - public void testTableName() { - assert "naming_test_entity_1_versions".equals( - metadata().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.NamingTestEntity1_AUD" ).getTable().getName() - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/DetachedNamingTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/DetachedNamingTestEntity.java deleted file mode 100644 index e1ee37304eb5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/DetachedNamingTestEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class DetachedNamingTestEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany - @JoinTable(name = "UNI_NAMING_TEST", - joinColumns = @JoinColumn(name = "ID_1"), - inverseJoinColumns = @JoinColumn(name = "ID_2")) - private Set collection; - - public DetachedNamingTestEntity() { - } - - public DetachedNamingTestEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public DetachedNamingTestEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof DetachedNamingTestEntity) ) { - return false; - } - - DetachedNamingTestEntity that = (DetachedNamingTestEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "DetachedNamingTestEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java deleted file mode 100644 index 036fb29f5dbd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -import ee.estonia.entities.Child; -import ee.estonia.entities.Parent; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6738") -public class EstonianTableAlias extends BaseEnversJPAFunctionalTestCase { - private Long parentId = null; - private Long childId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Parent.class, Child.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Parent parent = new Parent( "parent" ); - Child child = new Child( "child" ); - parent.getCollection().add( child ); - em.persist( child ); - em.persist( parent ); - em.getTransaction().commit(); - - parentId = parent.getId(); - childId = child.getId(); - } - - @Test - public void testAuditChildTableAlias() { - Parent parent = new Parent( "parent", parentId ); - Child child = new Child( "child", childId ); - - Parent ver1 = getAuditReader().find( Parent.class, parentId, 1 ); - - Assert.assertEquals( parent, ver1 ); - Assert.assertEquals( TestTools.makeSet( child ), ver1.getCollection() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java deleted file mode 100644 index c83e7f29fbba..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.Arrays; -import java.util.Iterator; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Selectable; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class JoinNaming extends BaseEnversJPAFunctionalTestCase { - private Integer ed_id1; - private Integer ed_id2; - private Integer ing_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinNamingRefEdEntity.class, JoinNamingRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - JoinNamingRefEdEntity ed1 = new JoinNamingRefEdEntity( "data1" ); - JoinNamingRefEdEntity ed2 = new JoinNamingRefEdEntity( "data2" ); - - JoinNamingRefIngEntity ing1 = new JoinNamingRefIngEntity( "x", ed1 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ed2 = em.find( JoinNamingRefEdEntity.class, ed2.getId() ); - - ing1 = em.find( JoinNamingRefIngEntity.class, ing1.getId() ); - ing1.setData( "y" ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed_id1 = ed1.getId(); - ed_id2 = ed2.getId(); - ing_id1 = ing1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( JoinNamingRefEdEntity.class, ed_id1 ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( JoinNamingRefEdEntity.class, ed_id2 ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( JoinNamingRefIngEntity.class, ing_id1 ) ); - } - - @Test - public void testHistoryOfEdId1() { - JoinNamingRefEdEntity ver1 = new JoinNamingRefEdEntity( ed_id1, "data1" ); - - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id1, 2 ).equals( ver1 ); - } - - @Test - public void testHistoryOfEdId2() { - JoinNamingRefEdEntity ver1 = new JoinNamingRefEdEntity( ed_id2, "data2" ); - - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id2, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id2, 2 ).equals( ver1 ); - } - - @Test - public void testHistoryOfIngId1() { - JoinNamingRefIngEntity ver1 = new JoinNamingRefIngEntity( ing_id1, "x", null ); - JoinNamingRefIngEntity ver2 = new JoinNamingRefIngEntity( ing_id1, "y", null ); - - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 1 ).getReference().equals( - new JoinNamingRefEdEntity( ed_id1, "data1" ) - ); - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 2 ).getReference().equals( - new JoinNamingRefEdEntity( ed_id2, "data2" ) - ); - } - - @SuppressWarnings("unchecked") - @Test - public void testJoinColumnName() { - Iterator columns = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.JoinNamingRefIngEntity_AUD" - ).getProperty( "reference_id" ).getSelectables().iterator(); - assertTrue( columns.hasNext() ); - assertEquals( "jnree_column_reference", columns.next().getText() ); - assertFalse( columns.hasNext() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java deleted file mode 100644 index 1f48bef4b6f1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.List; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class JoinNamingRefEdEntity { - @Id - @GeneratedValue - @Column(name = "jnree_id") - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private List reffering; - - public JoinNamingRefEdEntity() { - } - - public JoinNamingRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public JoinNamingRefEdEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReffering() { - return reffering; - } - - public void setReffering(List reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinNamingRefEdEntity) ) { - return false; - } - - JoinNamingRefEdEntity that = (JoinNamingRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "JoinNamingRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefIngEntity.java deleted file mode 100644 index 7b7f3a7d6dc3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefIngEntity.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class JoinNamingRefIngEntity { - @Id - @GeneratedValue - @Column(name = "jnrie_id") - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne - @JoinColumn(name = "jnree_column_reference") - private JoinNamingRefEdEntity reference; - - public JoinNamingRefIngEntity() { - } - - public JoinNamingRefIngEntity(Integer id, String data, JoinNamingRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public JoinNamingRefIngEntity(String data, JoinNamingRefEdEntity reference) { - this.data = data; - this.reference = reference; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public JoinNamingRefEdEntity getReference() { - return reference; - } - - public void setReference(JoinNamingRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinNamingRefIngEntity) ) { - return false; - } - - JoinNamingRefIngEntity that = (JoinNamingRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "JoinNamingRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/NamingTestEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/NamingTestEntity1.java deleted file mode 100644 index 6d05c7d45b7f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/NamingTestEntity1.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "naming_test_entity_1") -@AuditTable("naming_test_entity_1_versions") -public class NamingTestEntity1 { - @Id - @GeneratedValue - @Column(name = "nte_id") - private Integer id; - - @Column(name = "nte_data") - @Audited - private String data; - - public NamingTestEntity1() { - } - - public NamingTestEntity1(String data) { - this.data = data; - } - - public NamingTestEntity1(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NamingTestEntity1) ) { - return false; - } - - NamingTestEntity1 that = (NamingTestEntity1) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/NamingTestEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/NamingTestEntity2.java deleted file mode 100644 index d5745591a1fb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/NamingTestEntity2.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import org.hibernate.envers.AuditTable; -import org.hibernate.envers.Audited; - -@Entity -@Table(name = "naming_test_entity_2") -@AuditTable("naming_test_entity_2_versions") -public class NamingTestEntity2 { - @Id - @GeneratedValue - @Column(name = "nte_id") - @Audited(withModifiedFlag = true) - private Integer id; - - @Column(name = "nte_data") - @Audited(withModifiedFlag = true, modifiedColumnName = "data_MOD_different") - private String data; - - public NamingTestEntity2() { - } - - public NamingTestEntity2(String data) { - this.data = data; - } - - public NamingTestEntity2(Integer id, String data) { - this.id = id; - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NamingTestEntity2) ) { - return false; - } - - NamingTestEntity2 that = (NamingTestEntity2) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java deleted file mode 100644 index 9439c7cd1bd7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class OneToManyUnidirectionalNaming extends BaseEnversJPAFunctionalTestCase { - private Integer uni1_id; - private Integer str1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DetachedNamingTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - DetachedNamingTestEntity uni1 = new DetachedNamingTestEntity( 1, "data1" ); - StrTestEntity str1 = new StrTestEntity( "str1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - uni1.setCollection( new HashSet() ); - em.persist( uni1 ); - em.persist( str1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - uni1 = em.find( DetachedNamingTestEntity.class, uni1.getId() ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - uni1.getCollection().add( str1 ); - - em.getTransaction().commit(); - - // - - uni1_id = uni1.getId(); - str1_id = str1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( DetachedNamingTestEntity.class, uni1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - } - - @Test - public void testHistoryOfUniId1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - - DetachedNamingTestEntity rev1 = getAuditReader().find( DetachedNamingTestEntity.class, uni1_id, 1 ); - DetachedNamingTestEntity rev2 = getAuditReader().find( DetachedNamingTestEntity.class, uni1_id, 2 ); - - assert rev1.getCollection().equals( TestTools.makeSet() ); - assert rev2.getCollection().equals( TestTools.makeSet( str1 ) ); - - assert "data1".equals( rev1.getData() ); - assert "data1".equals( rev2.getData() ); - } - - private final static String MIDDLE_VERSIONS_ENTITY_NAME = "UNI_NAMING_TEST_AUD"; - - @Test - public void testTableName() { - assert MIDDLE_VERSIONS_ENTITY_NAME.equals( - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getName() - ); - } - - @SuppressWarnings("unchecked") - @Test - public void testJoinColumnName() { - Iterator columns = - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getColumns().iterator(); - - boolean id1Found = false; - boolean id2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "ID_1".equals( column.getName() ) ) { - id1Found = true; - } - - if ( "ID_2".equals( column.getName() ) ) { - id2Found = true; - } - } - - assert id1Found && id2Found; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java deleted file mode 100644 index b9717bd92769..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class VersionsJoinTableNaming extends BaseEnversJPAFunctionalTestCase { - private Integer uni1_id; - private Integer str1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {VersionsJoinTableTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - VersionsJoinTableTestEntity uni1 = new VersionsJoinTableTestEntity( 1, "data1" ); - StrTestEntity str1 = new StrTestEntity( "str1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - uni1.setCollection( new HashSet() ); - em.persist( uni1 ); - em.persist( str1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - uni1 = em.find( VersionsJoinTableTestEntity.class, uni1.getId() ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - uni1.getCollection().add( str1 ); - - em.getTransaction().commit(); - - // - - uni1_id = uni1.getId(); - str1_id = str1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableTestEntity.class, - uni1_id - ) - ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - } - - @Test - public void testHistoryOfUniId1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - - VersionsJoinTableTestEntity rev1 = getAuditReader().find( VersionsJoinTableTestEntity.class, uni1_id, 1 ); - VersionsJoinTableTestEntity rev2 = getAuditReader().find( VersionsJoinTableTestEntity.class, uni1_id, 2 ); - - assert rev1.getCollection().equals( TestTools.makeSet() ); - assert rev2.getCollection().equals( TestTools.makeSet( str1 ) ); - - assert "data1".equals( rev1.getData() ); - assert "data1".equals( rev2.getData() ); - } - - private final static String MIDDLE_VERSIONS_ENTITY_NAME = "VERSIONS_JOIN_TABLE_TEST"; - - @Test - public void testTableName() { - assert MIDDLE_VERSIONS_ENTITY_NAME.equals( - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getName() - ); - } - - @SuppressWarnings("unchecked") - @Test - public void testJoinColumnName() { - Iterator columns = - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getColumns().iterator(); - - boolean id1Found = false; - boolean id2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "VJT_ID".equals( column.getName() ) ) { - id1Found = true; - } - - if ( "STR_ID".equals( column.getName() ) ) { - id2Found = true; - } - } - - assert id1Found && id2Found; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponent.java deleted file mode 100644 index a5c00dbf49ac..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponent.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Embeddable; -import jakarta.persistence.FetchType; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; - -import org.hibernate.annotations.FetchMode; - -/** - * An embeddable component containing a list of - * {@link VersionsJoinTableRangeTestEntitySuperClass}-instances - * - * @param - * - * @author Erik-Berndt Scheper - */ -@Embeddable -public final class VersionsJoinTableRangeComponent { - - @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) - @org.hibernate.annotations.Fetch(value = FetchMode.SUBSELECT) - @org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) - @JoinColumn(name = "VJTRCTE_ID", insertable = true, updatable = false, nullable = false) -// Note: If this is processed without override annotation, then we should get a -// org.hibernate.DuplicateMappingException: -// Duplicate class/entity mapping JOIN_TABLE_COMPONENT_1_AUD - @org.hibernate.envers.AuditJoinTable(name = "JOIN_TABLE_COMPONENT_1_AUD", - inverseJoinColumns = @JoinColumn(name = "VJTRTE_ID")) - private List range = new ArrayList(); - - // ********************** Accessor Methods ********************** // - - public List getRange() { - return this.range; - } - - // ********************** Common Methods ********************** // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((range == null) ? 0 : range.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - VersionsJoinTableRangeComponent other = (VersionsJoinTableRangeComponent) obj; - if ( range == null ) { - if ( other.range != null ) { - return false; - } - } - else if ( !range.equals( other.range ) ) { - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder output = new StringBuilder(); - - output.append( "VersionsJoinTableRangeComponent {" ); - output.append( " range = \"" ); - for ( T instance : range ) { - output.append( instance ).append( "\n" ); - } - output.append( "\"}" ); - - return output.toString(); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponentTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponentTestEntity.java deleted file mode 100644 index b1825e7d63dc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponentTestEntity.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.AssociationOverride; -import jakarta.persistence.AttributeOverride; -import jakarta.persistence.AttributeOverrides; -import jakarta.persistence.Column; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.orm.test.envers.entities.components.Component1; - -/** - * Test entity, containing two embedded components, which each contain a list of - * {@link VersionsJoinTableRangeTestEntitySuperClass}-instances - * - * @author Erik-Berndt Scheper - */ -@Entity -@Table(name = "COMPONENT_TEST_ENTITY") -public class VersionsJoinTableRangeComponentTestEntity { - @Id - @GeneratedValue - @Column(name = "ID") - private Integer id; - - /** - * An embedded component, containing a list of - * {@link VersionsJoinTableRangeTestEntity}-instances. - */ - @Embedded - @AssociationOverride(name = "range", - joinColumns = { - @JoinColumn(name = "VJTRCTE1_ID", - insertable = true, - updatable = false, - nullable = false) - }) - @org.hibernate.envers.Audited - @AuditOverride(name = "range", - auditJoinTable = @org.hibernate.envers.AuditJoinTable(name = "JOIN_TABLE_COMPONENT_1_AUD", - inverseJoinColumns = @JoinColumn(name = "VJTRTE_ID"))) - private VersionsJoinTableRangeComponent component1 = new VersionsJoinTableRangeComponent(); - - /** - * An embedded component, containing a list of - * {@link VersionsJoinTableRangeTestAlternateEntity}-instances. - */ - @Embedded - @AssociationOverride(name = "range", - joinColumns = { - @JoinColumn(name = "VJTRCTE2_ID", - insertable = true, - updatable = false, - nullable = false) - }) - @org.hibernate.envers.Audited - @AuditOverrides(value = { - @AuditOverride(name = "range", - auditJoinTable = @org.hibernate.envers.AuditJoinTable(name = "JOIN_TABLE_COMPONENT_2_AUD", - inverseJoinColumns = @JoinColumn(name = "VJTRTAE_ID"))) - }) - private VersionsJoinTableRangeComponent component2 = new VersionsJoinTableRangeComponent(); - - /** - * An embedded component, containing a list of NOT AUDITED - * {@link VersionsJoinTableRangeTestAlternateEntity}-instances. - */ - @Embedded - @AttributeOverrides(value = { - @AttributeOverride(name = "str1", column = @Column(name = "STR1")), - @AttributeOverride(name = "str2", column = @Column(name = "STR2")) - }) - @org.hibernate.envers.Audited - @AuditOverrides(value = {@AuditOverride(name = "str2", isAudited = false)}) - private Component1 component3; - - /** - * Default constructor - */ - public VersionsJoinTableRangeComponentTestEntity() { - super(); - } - - /** - * @return the id - */ - public Integer getId() { - return id; - } - - /** - * @param id the id to set - */ - protected void setId(Integer id) { - this.id = id; - } - - /** - * @return the component1 - */ - public VersionsJoinTableRangeComponent getComponent1() { - return component1; - } - - /** - * @param component1 the component1 to set - */ - public void setComponent1( - VersionsJoinTableRangeComponent component1) { - this.component1 = component1; - } - - /** - * @return the component2 - */ - public VersionsJoinTableRangeComponent getComponent2() { - return component2; - } - - /** - * @param component2 the component2 to set - */ - public void setComponent2( - VersionsJoinTableRangeComponent component2) { - this.component2 = component2; - } - - /** - * @return the component3 - */ - public Component1 getComponent3() { - return component3; - } - - /** - * @param component3 the component3 to set - */ - public void setComponent3(Component1 component3) { - this.component3 = component3; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result - + ((component1 == null) ? 0 : component1.hashCode()); - result = prime * result - + ((component2 == null) ? 0 : component2.hashCode()); - result = prime * result - + ((component3 == null) ? 0 : component3.hashCode()); - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - VersionsJoinTableRangeComponentTestEntity other = (VersionsJoinTableRangeComponentTestEntity) obj; - if ( component1 == null ) { - if ( other.component1 != null ) { - return false; - } - } - else if ( !component1.equals( other.component1 ) ) { - return false; - } - if ( component2 == null ) { - if ( other.component2 != null ) { - return false; - } - } - else if ( !component2.equals( other.component2 ) ) { - return false; - } - if ( component3 == null ) { - if ( other.component3 != null ) { - return false; - } - } - else if ( !component3.equals( other.component3 ) ) { - return false; - } - if ( id == null ) { - if ( other.id != null ) { - return false; - } - } - else if ( !id.equals( other.id ) ) { - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder output = new StringBuilder(); - - output.append( "VersionsJoinTableRangeComponentTestEntity {" ); - output.append( " id = \"" ).append( this.getId() ).append( "\"," ); - output.append( " component1 = \"" ).append( this.component1 ) - .append( "\", " ); - output.append( " component2 = \"" ).append( this.component2 ).append( "\"}" ); - output.append( " component3 = \"" ).append( this.component3 ).append( "\"}" ); - return output.toString(); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestAlternateEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestAlternateEntity.java deleted file mode 100644 index 5579bc53b358..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestAlternateEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** - * Alternate implementation of mapped superclass for Audit join table test. - * - * @author Erik-Berndt Scheper - * @see VersionsJoinTableRangeTestEntity - * @see VersionsJoinTableRangeTestEntitySuperClass - */ -@Entity -@Table(name = "RANGE_TEST_ALTERNATE_ENT") -@org.hibernate.envers.Audited -public class VersionsJoinTableRangeTestAlternateEntity extends - VersionsJoinTableRangeTestEntitySuperClass { - - private String alternateValue; - - /** - * Default constructor - */ - public VersionsJoinTableRangeTestAlternateEntity() { - super(); - } - - /** - * @return the alternateValue - */ - public String getAlternateValue() { - return alternateValue; - } - - /** - * @param alternateValue the alternateValue to set - */ - public void setAlternateValue(String alternateValue) { - this.alternateValue = alternateValue; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result - + ((alternateValue == null) ? 0 : alternateValue.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !super.equals( obj ) ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - VersionsJoinTableRangeTestAlternateEntity other = (VersionsJoinTableRangeTestAlternateEntity) obj; - if ( alternateValue == null ) { - if ( other.alternateValue != null ) { - return false; - } - } - else if ( !alternateValue.equals( other.alternateValue ) ) { - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder output = new StringBuilder(); - - output.append( "VersionsJoinTableRangeComponentTestEntity {" ); - output.append( " id = \"" ).append( getId() ).append( "\", " ); - output.append( " genericValue = \"" ).append( getGenericValue() ).append( - "\", " - ); - output.append( " alternateValue = \"" ).append( this.alternateValue ) - .append( "\"}" ); - return output.toString(); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestEntity.java deleted file mode 100644 index 19a1a0a3fc1f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -/** - * Concrete implementation of mapped superclass for Audit join table test. - * - * @author Erik-Berndt Scheper - * @see VersionsJoinTableRangeTestAlternateEntity - * @see VersionsJoinTableRangeTestEntitySuperClass - */ -@Entity -@Table(name = "RANGE_TEST_ENTITY") -@org.hibernate.envers.Audited -public class VersionsJoinTableRangeTestEntity extends - VersionsJoinTableRangeTestEntitySuperClass { - - @Column(name = "val") - private String value; - - /** - * Default constructor - */ - public VersionsJoinTableRangeTestEntity() { - super(); - } - - /** - * @return the value - */ - public String getValue() { - return value; - } - - /** - * @param value the value to set - */ - public void setValue(String value) { - this.value = value; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !super.equals( obj ) ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - VersionsJoinTableRangeTestEntity other = (VersionsJoinTableRangeTestEntity) obj; - if ( value == null ) { - if ( other.value != null ) { - return false; - } - } - else if ( !value.equals( other.value ) ) { - return false; - } - return true; - } - - @Override - public String toString() { - StringBuilder output = new StringBuilder(); - - output.append( "VersionsJoinTableRangeComponentTestEntity {" ); - output.append( " id = \"" ).append( getId() ).append( "\", " ); - output.append( " genericValue = \"" ).append( getGenericValue() ).append( - "\", " - ); - output.append( " value = \"" ).append( this.value ).append( "\"}" ); - return output.toString(); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestEntitySuperClass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestEntitySuperClass.java deleted file mode 100644 index fbe019a0ad35..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeTestEntitySuperClass.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -/** - * Mapped superclass for Audit join table test. - * - * @author Erik-Berndt Scheper - */ -@MappedSuperclass -@org.hibernate.envers.Audited -public abstract class VersionsJoinTableRangeTestEntitySuperClass { - - @Id - @GeneratedValue - private Integer id; - - private String genericValue; - - /** - * @return the id - */ - public Integer getId() { - return id; - } - - /** - * @param id the id to set - */ - protected void setId(Integer id) { - this.id = id; - } - - /** - * @return the genericValue - */ - public String getGenericValue() { - return genericValue; - } - - /** - * @param genericValue the genericValue to set - */ - public void setGenericValue(String genericValue) { - this.genericValue = genericValue; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result - + ((genericValue == null) ? 0 : genericValue.hashCode()); - result = prime * result + ((id == null) ? 0 : id.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( obj == null ) { - return false; - } - if ( getClass() != obj.getClass() ) { - return false; - } - VersionsJoinTableRangeTestEntitySuperClass other = (VersionsJoinTableRangeTestEntitySuperClass) obj; - if ( genericValue == null ) { - if ( other.genericValue != null ) { - return false; - } - } - else if ( !genericValue.equals( other.genericValue ) ) { - return false; - } - if ( id == null ) { - if ( other.id != null ) { - return false; - } - } - else if ( !id.equals( other.id ) ) { - return false; - } - return true; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableTestEntity.java deleted file mode 100644 index 8c7b76a1342c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableTestEntity.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "VersionsJoinTable") -public class VersionsJoinTableTestEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToMany - @JoinColumn(name = "VJT_ID") - @AuditJoinTable(name = "VERSIONS_JOIN_TABLE_TEST", inverseJoinColumns = @JoinColumn(name = "STR_ID")) - private Set collection; - - public VersionsJoinTableTestEntity() { - } - - public VersionsJoinTableTestEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public VersionsJoinTableTestEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Set getCollection() { - return collection; - } - - public void setCollection(Set collection) { - this.collection = collection; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof VersionsJoinTableTestEntity) ) { - return false; - } - - VersionsJoinTableTestEntity that = (VersionsJoinTableTestEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "VersionsJoinTableTestEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/EmbIdNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/EmbIdNaming.java deleted file mode 100644 index 117a5a8bfd0a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/EmbIdNaming.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Embeddable -public class EmbIdNaming implements Serializable { - @Column(name = "XX") - private Integer x; - - @Column(name = "YY") - private Integer y; - - public EmbIdNaming() { - } - - public EmbIdNaming(Integer x, Integer y) { - this.x = x; - this.y = y; - } - - public Integer getX() { - return x; - } - - public void setX(Integer x) { - this.x = x; - } - - public Integer getY() { - return y; - } - - public void setY(Integer y) { - this.y = y; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof EmbIdNaming) ) { - return false; - } - - EmbIdNaming embId = (EmbIdNaming) o; - - if ( x != null ? !x.equals( embId.x ) : embId.x != null ) { - return false; - } - if ( y != null ? !y.equals( embId.y ) : embId.y != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (x != null ? x.hashCode() : 0); - result = 31 * result + (y != null ? y.hashCode() : 0); - return result; - } - - public String toString() { - return "EmbIdNaming(" + x + ", " + y + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java deleted file mode 100644 index 965fdbe41cd8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import java.util.Arrays; -import java.util.Iterator; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Selectable; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class JoinEmbIdNaming extends BaseEnversJPAFunctionalTestCase { - private EmbIdNaming ed_id1; - private EmbIdNaming ed_id2; - private EmbIdNaming ing_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinEmbIdNamingRefEdEntity.class, JoinEmbIdNamingRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ed_id1 = new EmbIdNaming( 10, 20 ); - ed_id2 = new EmbIdNaming( 11, 21 ); - ing_id1 = new EmbIdNaming( 12, 22 ); - - JoinEmbIdNamingRefEdEntity ed1 = new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ); - JoinEmbIdNamingRefEdEntity ed2 = new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ); - - JoinEmbIdNamingRefIngEntity ing1 = new JoinEmbIdNamingRefIngEntity( ing_id1, "x", ed1 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ed2 = em.find( JoinEmbIdNamingRefEdEntity.class, ed2.getId() ); - - ing1 = em.find( JoinEmbIdNamingRefIngEntity.class, ing1.getId() ); - ing1.setData( "y" ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinEmbIdNamingRefEdEntity.class, - ed_id1 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinEmbIdNamingRefEdEntity.class, - ed_id2 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinEmbIdNamingRefIngEntity.class, - ing_id1 - ) - ); - } - - @Test - public void testHistoryOfEdId1() { - JoinEmbIdNamingRefEdEntity ver1 = new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ); - - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id1, 2 ).equals( ver1 ); - } - - @Test - public void testHistoryOfEdId2() { - JoinEmbIdNamingRefEdEntity ver1 = new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ); - - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id2, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id2, 2 ).equals( ver1 ); - } - - @Test - public void testHistoryOfIngId1() { - JoinEmbIdNamingRefIngEntity ver1 = new JoinEmbIdNamingRefIngEntity( ing_id1, "x", null ); - JoinEmbIdNamingRefIngEntity ver2 = new JoinEmbIdNamingRefIngEntity( ing_id1, "y", null ); - - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 1 ).getReference().equals( - new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ) - ); - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 2 ).getReference().equals( - new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ) - ); - } - - @SuppressWarnings("unchecked") - @Test - public void testJoinColumnNames() { - Iterator columns = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.ids.JoinEmbIdNamingRefIngEntity_AUD" - ).getProperty( "reference_x" ).getSelectables().iterator(); - - assertTrue( columns.hasNext() ); - assertEquals( "XX_reference", columns.next().getText() ); - assertFalse( columns.hasNext() ); - - columns = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.ids.JoinEmbIdNamingRefIngEntity_AUD" - ).getProperty( "reference_y" ).getSelectables().iterator(); - - assertTrue( columns.hasNext() ); - assertEquals( "YY_reference", columns.next().getText() ); - assertFalse( columns.hasNext() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java deleted file mode 100644 index 3c1825cd1a3c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "JoinEmbIdRefEd") -public class JoinEmbIdNamingRefEdEntity { - @Id - private EmbIdNaming id; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private List reffering; - - public JoinEmbIdNamingRefEdEntity() { - } - - public JoinEmbIdNamingRefEdEntity(EmbIdNaming id, String data) { - this.id = id; - this.data = data; - } - - public JoinEmbIdNamingRefEdEntity(String data) { - this.data = data; - } - - public EmbIdNaming getId() { - return id; - } - - public void setId(EmbIdNaming id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReffering() { - return reffering; - } - - public void setReffering(List reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinEmbIdNamingRefEdEntity) ) { - return false; - } - - JoinEmbIdNamingRefEdEntity that = (JoinEmbIdNamingRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "JoinEmbIdNamingRefEdEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java deleted file mode 100644 index 9ba394c21b7b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "JoinEmbIdRefIng") -public class JoinEmbIdNamingRefIngEntity { - @Id - private EmbIdNaming id; - - @Audited - private String data; - - @Audited - @ManyToOne - @JoinColumns({ - @JoinColumn(name = "XX_reference", referencedColumnName = "XX"), - @JoinColumn(name = "YY_reference", referencedColumnName = "YY") - }) - private JoinEmbIdNamingRefEdEntity reference; - - public JoinEmbIdNamingRefIngEntity() { - } - - public JoinEmbIdNamingRefIngEntity(EmbIdNaming id, String data, JoinEmbIdNamingRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public JoinEmbIdNamingRefIngEntity(String data, JoinEmbIdNamingRefEdEntity reference) { - this.data = data; - this.reference = reference; - } - - public EmbIdNaming getId() { - return id; - } - - public void setId(EmbIdNaming id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public JoinEmbIdNamingRefEdEntity getReference() { - return reference; - } - - public void setReference(JoinEmbIdNamingRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinEmbIdNamingRefIngEntity) ) { - return false; - } - - JoinEmbIdNamingRefIngEntity that = (JoinEmbIdNamingRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "JoinEmbIdNamingRefIngEntity(id = " + id + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java deleted file mode 100644 index 6223669233cc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import java.util.Arrays; -import java.util.Iterator; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Selectable; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class JoinMulIdNaming extends BaseEnversJPAFunctionalTestCase { - private MulIdNaming ed_id1; - private MulIdNaming ed_id2; - private MulIdNaming ing_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinMulIdNamingRefEdEntity.class, JoinMulIdNamingRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ed_id1 = new MulIdNaming( 10, 20 ); - ed_id2 = new MulIdNaming( 11, 21 ); - ing_id1 = new MulIdNaming( 12, 22 ); - - JoinMulIdNamingRefEdEntity ed1 = new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ); - JoinMulIdNamingRefEdEntity ed2 = new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ); - - JoinMulIdNamingRefIngEntity ing1 = new JoinMulIdNamingRefIngEntity( ing_id1, "x", ed1 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ed2 = em.find( JoinMulIdNamingRefEdEntity.class, ed_id2 ); - - ing1 = em.find( JoinMulIdNamingRefIngEntity.class, ing_id1 ); - ing1.setData( "y" ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinMulIdNamingRefEdEntity.class, - ed_id1 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinMulIdNamingRefEdEntity.class, - ed_id2 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinMulIdNamingRefIngEntity.class, - ing_id1 - ) - ); - } - - @Test - public void testHistoryOfEdId1() { - JoinMulIdNamingRefEdEntity ver1 = new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ); - - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id1, 2 ).equals( ver1 ); - } - - @Test - public void testHistoryOfEdId2() { - JoinMulIdNamingRefEdEntity ver1 = new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ); - - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id2, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id2, 2 ).equals( ver1 ); - } - - @Test - public void testHistoryOfIngId1() { - JoinMulIdNamingRefIngEntity ver1 = new JoinMulIdNamingRefIngEntity( ing_id1, "x", null ); - JoinMulIdNamingRefIngEntity ver2 = new JoinMulIdNamingRefIngEntity( ing_id1, "y", null ); - - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 1 ).getReference().equals( - new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ) - ); - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 2 ).getReference().equals( - new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ) - ); - } - - @SuppressWarnings("unchecked") - @Test - public void testJoinColumnNames() { - Iterator columns = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.ids.JoinMulIdNamingRefIngEntity_AUD" - ).getProperty( "reference_id1" ).getSelectables().iterator(); - - assertTrue( columns.hasNext() ); - assertEquals( "ID1_reference", columns.next().getText() ); - assertFalse( columns.hasNext() ); - - columns = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.ids.JoinMulIdNamingRefIngEntity_AUD" - ).getProperty( "reference_id2" ).getSelectables().iterator(); - - assertTrue( columns.hasNext() ); - assertEquals( "ID2_reference", columns.next().getText() ); - assertFalse( columns.hasNext() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java deleted file mode 100644 index 51aaedf96506..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * ReferencEd entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "JoinMulIdRefEd") -@IdClass(MulIdNaming.class) -public class JoinMulIdNamingRefEdEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @OneToMany(mappedBy = "reference") - private List reffering; - - public JoinMulIdNamingRefEdEntity() { - } - - public JoinMulIdNamingRefEdEntity(MulIdNaming id, String data) { - this.id1 = id.getId1(); - this.id2 = id.getId2(); - this.data = data; - } - - public JoinMulIdNamingRefEdEntity(String data) { - this.data = data; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public List getReffering() { - return reffering; - } - - public void setReffering(List reffering) { - this.reffering = reffering; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinMulIdNamingRefEdEntity) ) { - return false; - } - - JoinMulIdNamingRefEdEntity that = (JoinMulIdNamingRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "JoinMulIdNamingRefEdEntity(id1 = " + id1 + ", id2 = " + id2 + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefIngEntity.java deleted file mode 100644 index e53efef4cdc2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefIngEntity.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * ReferencIng entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Table(name = "JoinMulIdRefIng") -@IdClass(MulIdNaming.class) -public class JoinMulIdNamingRefIngEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @ManyToOne - @JoinColumns({ - @JoinColumn(name = "ID2_reference", referencedColumnName = "ID_2"), - @JoinColumn(name = "ID1_reference", referencedColumnName = "ID_1") - }) - private JoinMulIdNamingRefEdEntity reference; - - public JoinMulIdNamingRefIngEntity() { - } - - public JoinMulIdNamingRefIngEntity(MulIdNaming id, String data, JoinMulIdNamingRefEdEntity reference) { - this.id1 = id.getId1(); - this.id2 = id.getId2(); - this.data = data; - this.reference = reference; - } - - public JoinMulIdNamingRefIngEntity(String data, JoinMulIdNamingRefEdEntity reference) { - this.data = data; - this.reference = reference; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public JoinMulIdNamingRefEdEntity getReference() { - return reference; - } - - public void setReference(JoinMulIdNamingRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof JoinMulIdNamingRefIngEntity) ) { - return false; - } - - JoinMulIdNamingRefIngEntity that = (JoinMulIdNamingRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - public String toString() { - return "JoinMulIdNamingRefIngEntity(id1 = " + id1 + ", id2 = " + id2 + ", data = " + data + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/MulIdNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/MulIdNaming.java deleted file mode 100644 index a156524a8e46..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/MulIdNaming.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.ids; - -import java.io.Serializable; -import jakarta.persistence.Column; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MulIdNaming implements Serializable { - @Column(name = "ID_1") - private Integer id1; - - @Column(name = "ID_2") - private Integer id2; - - public MulIdNaming() { - } - - public MulIdNaming(Integer id1, Integer id2) { - this.id1 = id1; - this.id2 = id2; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MulIdNaming) ) { - return false; - } - - MulIdNaming mulId = (MulIdNaming) o; - - if ( id1 != null ? !id1.equals( mulId.id1 ) : mulId.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( mulId.id2 ) : mulId.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - return result; - } - - public String toString() { - return "MulIdNaming(" + id1 + ", " + id2 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsEntity.java deleted file mode 100644 index f66e677eef26..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsEntity.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.quotation; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class QuotedFieldsEntity { - @Id - @GeneratedValue - @Column(name = "`id`") - private Long id; - - @Column(name = "`data1`") - @Audited - private String data1; - - @Column(name = "`data2`") - @Audited - private Integer data2; - - public QuotedFieldsEntity() { - } - - public QuotedFieldsEntity(String data1, Integer data2) { - this.data1 = data1; - this.data2 = data2; - } - - public QuotedFieldsEntity(Long id, String data1, Integer data2) { - this.id = id; - this.data1 = data1; - this.data2 = data2; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public Integer getData2() { - return data2; - } - - public void setData2(Integer data2) { - this.data2 = data2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof QuotedFieldsEntity) ) { - return false; - } - - QuotedFieldsEntity that = (QuotedFieldsEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "QuotedFieldsEntity{" + - "id=" + id + - ", data1='" + data1 + '\'' + - ", data2=" + data2 + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java deleted file mode 100644 index 73c859133923..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naming.quotation; - -import java.util.Arrays; -import java.util.Collection; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class QuotedFieldsTest extends BaseEnversJPAFunctionalTestCase { - private Long qfeId1 = null; - private Long qfeId2 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {QuotedFieldsEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - QuotedFieldsEntity qfe1 = new QuotedFieldsEntity( "data1", 1 ); - QuotedFieldsEntity qfe2 = new QuotedFieldsEntity( "data2", 2 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - em.persist( qfe1 ); - em.persist( qfe2 ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - qfe1 = em.find( QuotedFieldsEntity.class, qfe1.getId() ); - qfe1.setData1( "data1 changed" ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - qfe2 = em.find( QuotedFieldsEntity.class, qfe2.getId() ); - qfe2.setData2( 3 ); - em.getTransaction().commit(); - - qfeId1 = qfe1.getId(); - qfeId2 = qfe2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( QuotedFieldsEntity.class, qfeId1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( QuotedFieldsEntity.class, qfeId2 ) ); - } - - @Test - public void testHistoryOfId1() { - QuotedFieldsEntity ver1 = new QuotedFieldsEntity( qfeId1, "data1", 1 ); - QuotedFieldsEntity ver2 = new QuotedFieldsEntity( qfeId1, "data1 changed", 1 ); - - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId1, 1 ).equals( ver1 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId1, 2 ).equals( ver2 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId1, 3 ).equals( ver2 ); - } - - @Test - public void testHistoryOfId2() { - QuotedFieldsEntity ver1 = new QuotedFieldsEntity( qfeId2, "data2", 2 ); - QuotedFieldsEntity ver2 = new QuotedFieldsEntity( qfeId2, "data2", 3 ); - - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId2, 1 ).equals( ver1 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId2, 2 ).equals( ver1 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId2, 3 ).equals( ver2 ); - } - - @Test - public void testEscapeEntityField() { - Table table = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.quotation.QuotedFieldsEntity_AUD" - ).getTable(); - Column column1 = getColumnByName( table, "id" ); - Column column2 = getColumnByName( table, "data1" ); - Column column3 = getColumnByName( table, "data2" ); - assert column1 != null; - assert column2 != null; - assert column3 != null; - assert column1.isQuoted(); - assert column2.isQuoted(); - assert column3.isQuoted(); - } - - private Column getColumnByName(Table table, String columnName) { - Collection columns = table.getColumns(); - for ( Column column : columns ) { - if ( columnName.equals( column.getName() ) ) { - return column; - } - } - return null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java deleted file mode 100644 index ebe6dd32bc08..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.nativequery; - -import java.util.List; -import jakarta.persistence.Query; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hamcrest.core.Is.is; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertThat; - -/** - * @author Andrea Boriero - */ -public class EntityResultNativeQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SimpleEntity.class, SecondSimpleEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.persist( new SimpleEntity( "Hibernate" ) ); - } ); - } - - @Test - @JiraKey(value = "HHH-12776") - public void testNativeQueryResultHandling() { - doInJPA( this::entityManagerFactory, entityManager -> { - Query query = entityManager.createNativeQuery( "select * from SimpleEntity", SimpleEntity.class ); - List results = query.getResultList(); - SimpleEntity result = (SimpleEntity) results.get( 0 ); - assertThat( result.getStringField(), is( "Hibernate" ) ); - } ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/SecondSimpleEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/SecondSimpleEntity.java deleted file mode 100644 index 1d2f27092887..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/SecondSimpleEntity.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.nativequery; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Andrea Boriero - */ -@Audited -@Entity -public class SecondSimpleEntity { - @Id - @GeneratedValue - private Long id; - - private String stringField; - - public SecondSimpleEntity() { - } - - public SecondSimpleEntity(String stringField) { - this.stringField = stringField; - } - - public Long getId() { - return id; - } - - public String getStringField() { - return stringField; - } - - public void setStringField(String stringField) { - this.stringField = stringField; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/SimpleEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/SimpleEntity.java deleted file mode 100644 index 8815fffec247..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/SimpleEntity.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.nativequery; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Andrea Boriero - */ -@Entity(name = "SimpleEntity") -@Audited -public class SimpleEntity { - @Id - @GeneratedValue - private Long id; - - @Column(name = "string_field") - private String stringField; - - public SimpleEntity() { - } - - public SimpleEntity(String stringField) { - this.stringField = stringField; - } - - public Long getId() { - return id; - } - - public String getStringField() { - return stringField; - } - - public void setStringField(String stringField) { - this.stringField = stringField; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Account.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Account.java deleted file mode 100644 index 21c0e8af154c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Account.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naturalid; - -import java.io.Serializable; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinColumns; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Account implements Serializable { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ManyToOne - @JoinColumns({ - @JoinColumn(name = "customer_customernumber", referencedColumnName = "customerNumber"), - @JoinColumn(name = "customer_customername", referencedColumnName = "name") - }) - private Customer customer; - - Account() { - - } - - public Account(Integer id, Customer customer) { - this.id = id; - this.customer = customer; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Customer getCustomer() { - return customer; - } - - public void setCustomer(Customer customer) { - this.customer = customer; - } - - @Override - public int hashCode() { - int result; - result = ( id != null ? id.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( obj == this ) { - return true; - } - if ( !(obj instanceof Account)) { - return false; - } - Account that = (Account) obj; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "Account{" + - "id=" + id + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Customer.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Customer.java deleted file mode 100644 index 7b7d81bf036c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Customer.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naturalid; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Set; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.annotations.NaturalId; -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Customer implements Serializable { - @Id - @GeneratedValue - private Integer id; - - @NaturalId - private String customerNumber; - - @NaturalId - private String name; - - @Audited - @OneToMany(mappedBy = "customer") - private Collection accounts = new ArrayList(); - - @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL) - private Set devices = new HashSet(); - - Customer() { - - } - - Customer(Integer id, String customerNumber, String name) { - this.id = id; - this.customerNumber = customerNumber; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getCustomerNumber() { - return customerNumber; - } - - public void setCustomerNumber(String customerNumber) { - this.customerNumber = customerNumber; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Collection getAccounts() { - return accounts; - } - - public void setAccounts(Collection accounts) { - this.accounts = accounts; - } - - public Set getDevices() { - return devices; - } - - public void setDevices(Set devices) { - this.devices = devices; - } - - @Override - public int hashCode() { - int result; - result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( customerNumber != null ? customerNumber.hashCode() : 0 ); - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( obj == this ) { - return true; - } - if ( !( obj instanceof Customer ) ) { - return false; - } - Customer that = (Customer) obj; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "Customer{" + - "id=" + id + - ", name='" + name + '\'' + - ", customerNumber='" + customerNumber + '\'' + - ", accounts=" + accounts + - ", devices=" + devices + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Device.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Device.java deleted file mode 100644 index 1a442a8a183b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/Device.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naturalid; - -import java.io.Serializable; - -import jakarta.persistence.Entity; -import jakarta.persistence.ForeignKey; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Device implements Serializable { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ManyToOne - @JoinColumn(name = "customer_id", foreignKey = @ForeignKey(name = "fk_dev_cust_id")) - private Customer customer; - - Device() { - - } - - public Device(Integer id, Customer customer) { - this.id = id; - this.customer = customer; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Customer getCustomer() { - return customer; - } - - public void setCustomer(Customer customer) { - this.customer = customer; - } - - @Override - public int hashCode() { - int result; - result = ( id != null ? id.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( obj == this ) { - return true; - } - if ( !( obj instanceof Device ) ) { - return false; - } - Device that = (Device) obj; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "Device{" + - "id=" + id + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java deleted file mode 100644 index fda1c1a9dbf5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.naturalid; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-10246") -public class JoinColumnNaturalIdTest extends BaseEnversJPAFunctionalTestCase { - private Integer customerId; - private Integer deviceId; - private Integer accountId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Account.class, - Customer.class, - Device.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // Revision 1 - em.getTransaction().begin(); - Customer customer = new Customer(); - customer.setCustomerNumber( "1234567" ); - customer.setName( "ACME" ); - em.persist( customer ); - em.getTransaction().commit(); - customerId = customer.getId(); - // Revision 2 - em.getTransaction().begin(); - Device device = new Device(); - device.setCustomer( customer ); - Account account = new Account(); - account.setCustomer( customer ); - em.persist( account ); - em.persist( device ); - em.getTransaction().commit(); - accountId = account.getId(); - deviceId = device.getId(); - // Revision 3 - em.getTransaction().begin(); - em.remove( account ); - em.getTransaction().commit(); - } - finally { - em.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( 3, getAuditReader().getRevisions( Customer.class, customerId ).size() ); - assertEquals( 2, getAuditReader().getRevisions( Account.class, accountId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Device.class, deviceId ).size() ); - } - - @Test - public void testRevisionHistoryOfCustomer() { - final Customer customer = new Customer( customerId, "1234567", "ACME" ); - Customer rev1 = getAuditReader().find( Customer.class, customerId, 1 ); - assertEquals( customer, rev1 ); - - final Account account = new Account( accountId, customer ); - final Device device = new Device( deviceId, customer ); - customer.getAccounts().add( account ); - customer.getDevices().add( device ); - Customer rev2 = getAuditReader().find( Customer.class, customerId, 2 ); - assertEquals( customer, rev2 ); - - customer.getAccounts().clear(); - Customer rev3 = getAuditReader().find( Customer.class, customerId, 3 ); - assertEquals( customer, rev3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java deleted file mode 100644 index 278e77b63344..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notinsertable; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NotInsertable extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {NotInsertableTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotInsertableTestEntity dte = new NotInsertableTestEntity( "data1" ); - em.persist( dte ); - id1 = dte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - dte = em.find( NotInsertableTestEntity.class, id1 ); - dte.setData( "data2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( NotInsertableTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - NotInsertableTestEntity ver1 = new NotInsertableTestEntity( id1, "data1", "data1" ); - NotInsertableTestEntity ver2 = new NotInsertableTestEntity( id1, "data2", "data2" ); - - assert getAuditReader().find( NotInsertableTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( NotInsertableTestEntity.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertableTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertableTestEntity.java deleted file mode 100644 index 4fab1699b6a8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertableTestEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notinsertable; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class NotInsertableTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Column(name = "data") - private String data; - - @Column(name = "data", insertable = false, updatable = false) - private String dataCopy; - - public NotInsertableTestEntity() { - } - - public NotInsertableTestEntity(Integer id, String data, String dataCopy) { - this.id = id; - this.data = data; - this.dataCopy = dataCopy; - } - - public NotInsertableTestEntity(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getDataCopy() { - return dataCopy; - } - - public void setDataCopy(String dataCopy) { - this.dataCopy = dataCopy; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotInsertableTestEntity) ) { - return false; - } - - NotInsertableTestEntity that = (NotInsertableTestEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( dataCopy != null ? !dataCopy.equals( that.dataCopy ) : that.dataCopy != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - result = 31 * result + (dataCopy != null ? dataCopy.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java deleted file mode 100644 index 3eb345475f82..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notinsertable.manytoone; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -public class ManyToOneNotInsertable extends BaseEnversJPAFunctionalTestCase { - private Integer mto_id1; - private Integer type_id1; - private Integer type_id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneNotInsertableEntity.class, NotInsertableEntityType.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - mto_id1 = 1; - type_id1 = 2; - type_id2 = 3; - - // Rev 1 - // Preparing the types - em.getTransaction().begin(); - - NotInsertableEntityType type1 = new NotInsertableEntityType( type_id1, "type1" ); - NotInsertableEntityType type2 = new NotInsertableEntityType( type_id2, "type2" ); - - em.persist( type1 ); - em.persist( type2 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - ManyToOneNotInsertableEntity entity = new ManyToOneNotInsertableEntity( mto_id1, type_id1, type1 ); - em.persist( entity ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - entity = em.find( ManyToOneNotInsertableEntity.class, mto_id1 ); - entity.setNumber( type_id2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( NotInsertableEntityType.class, type_id1 ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( NotInsertableEntityType.class, type_id2 ) ); - - assert Arrays.asList( 2, 3 ).equals( - getAuditReader().getRevisions( - ManyToOneNotInsertableEntity.class, - mto_id1 - ) - ); - } - - @Test - public void testNotInsertableEntity() { - ManyToOneNotInsertableEntity ver1 = getAuditReader().find( ManyToOneNotInsertableEntity.class, mto_id1, 1 ); - ManyToOneNotInsertableEntity ver2 = getAuditReader().find( ManyToOneNotInsertableEntity.class, mto_id1, 2 ); - ManyToOneNotInsertableEntity ver3 = getAuditReader().find( ManyToOneNotInsertableEntity.class, mto_id1, 3 ); - - NotInsertableEntityType type1 = getEntityManager().find( NotInsertableEntityType.class, type_id1 ); - NotInsertableEntityType type2 = getEntityManager().find( NotInsertableEntityType.class, type_id2 ); - - assert ver1 == null; - assert ver2.getType().equals( type1 ); - assert ver3.getType().equals( type2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertableEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertableEntity.java deleted file mode 100644 index f0e77a0c7792..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertableEntity.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notinsertable.manytoone; - -import jakarta.persistence.Basic; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -@Entity -@Table(name = "ManyToOneNotIns") -@Audited -public class ManyToOneNotInsertableEntity { - @Id - private Integer id; - - @Basic - @Column(name = "numVal") - private Integer number; - - @ManyToOne - @JoinColumn(name = "numVal", insertable = false, updatable = false) - private NotInsertableEntityType type; - - public ManyToOneNotInsertableEntity() { - } - - public ManyToOneNotInsertableEntity(Integer id, Integer number, NotInsertableEntityType type) { - this.id = id; - this.number = number; - this.type = type; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public NotInsertableEntityType getType() { - return type; - } - - public void setType(NotInsertableEntityType type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java deleted file mode 100644 index d01de354f7b5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notinsertable.manytoone; - -import jakarta.persistence.Basic; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class NotInsertableEntityType { - public NotInsertableEntityType(Integer typeId, String type) { - this.typeId = typeId; - this.type = type; - } - - public NotInsertableEntityType() { - } - - @Id - private Integer typeId; - - @Basic - private String type; - - public Integer getTypeId() { - return typeId; - } - - public void setTypeId(Integer typeId) { - this.typeId = typeId; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - NotInsertableEntityType that = (NotInsertableEntityType) o; - - if ( type != null ? !type.equals( that.type ) : that.type != null ) { - return false; - } - if ( typeId != null ? !typeId.equals( that.typeId ) : that.typeId != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = typeId != null ? typeId.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableEntity.java deleted file mode 100644 index 50201a2b9635..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableEntity.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notupdatable; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class PropertyNotUpdatableEntity implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - @Column(updatable = false) - private String constantData1; - - @Column(updatable = false) - private String constantData2; - - public PropertyNotUpdatableEntity() { - } - - public PropertyNotUpdatableEntity(String data, String constantData1, String constantData2) { - this.constantData1 = constantData1; - this.constantData2 = constantData2; - this.data = data; - } - - public PropertyNotUpdatableEntity(String data, String constantData1, String constantData2, Long id) { - this.data = data; - this.id = id; - this.constantData1 = constantData1; - this.constantData2 = constantData2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PropertyNotUpdatableEntity) ) { - return false; - } - - PropertyNotUpdatableEntity that = (PropertyNotUpdatableEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( constantData1 != null ? !constantData1.equals( that.constantData1 ) : that.constantData1 != null ) { - return false; - } - if ( constantData2 != null ? !constantData2.equals( that.constantData2 ) : that.constantData2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - result = 31 * result + (constantData1 != null ? constantData1.hashCode() : 0); - result = 31 * result + (constantData2 != null ? constantData2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "PropertyNotUpdatableEntity(id = " + id + ", data = " + data + ", constantData1 = " + constantData1 + ", constantData2 = " + constantData2 + ")"; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getConstantData1() { - return constantData1; - } - - public void setConstantData1(String constantData1) { - this.constantData1 = constantData1; - } - - public String getConstantData2() { - return constantData2; - } - - public void setConstantData2(String constantData2) { - this.constantData2 = constantData2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java deleted file mode 100644 index 670a4fd1a3aa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.notupdatable; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-5411") -public class PropertyNotUpdatableTest extends BaseEnversJPAFunctionalTestCase { - private Long id = null; - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertyNotUpdatableEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - PropertyNotUpdatableEntity entity = new PropertyNotUpdatableEntity( - "data", - "constant data 1", - "constant data 2" - ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - em.getTransaction().begin(); - entity = em.find( PropertyNotUpdatableEntity.class, entity.getId() ); - entity.setData( "modified data" ); - entity.setConstantData1( null ); - em.merge( entity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); // Re-opening entity manager to re-initialize non-updatable fields - // with database values. Otherwise PostUpdateEvent#getOldState() returns previous - // memory state. This can be achieved using EntityManager#refresh(Object) method as well. - - // Revision 3 - em.getTransaction().begin(); - entity = em.find( PropertyNotUpdatableEntity.class, entity.getId() ); - entity.setData( "another modified data" ); - entity.setConstantData2( "invalid data" ); - em.merge( entity ); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - em.refresh( entity ); - em.remove( entity ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3, 4 ), - getAuditReader().getRevisions( PropertyNotUpdatableEntity.class, id ) - ); - } - - @Test - public void testHistoryOfId() { - PropertyNotUpdatableEntity ver1 = new PropertyNotUpdatableEntity( - "data", - "constant data 1", - "constant data 2", - id - ); - Assert.assertEquals( ver1, getAuditReader().find( PropertyNotUpdatableEntity.class, id, 1 ) ); - - PropertyNotUpdatableEntity ver2 = new PropertyNotUpdatableEntity( - "modified data", - "constant data 1", - "constant data 2", - id - ); - Assert.assertEquals( ver2, getAuditReader().find( PropertyNotUpdatableEntity.class, id, 2 ) ); - - PropertyNotUpdatableEntity ver3 = new PropertyNotUpdatableEntity( - "another modified data", - "constant data 1", - "constant data 2", - id - ); - Assert.assertEquals( ver3, getAuditReader().find( PropertyNotUpdatableEntity.class, id, 3 ) ); - } - - @Test - public void testDeleteState() { - PropertyNotUpdatableEntity delete = new PropertyNotUpdatableEntity( - "another modified data", - "constant data 1", - "constant data 2", - id - ); - List results = getAuditReader().createQuery().forRevisionsOfEntity( - PropertyNotUpdatableEntity.class, - true, - true - ).getResultList(); - Assert.assertEquals( delete, results.get( 3 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java deleted file mode 100644 index f4ab1a779c9c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicCollection extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {CollectionRefEdEntity.class, CollectionRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - CollectionRefEdEntity ed1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - CollectionRefEdEntity ed2 = new CollectionRefEdEntity( 2, "data_ed_2" ); - - CollectionRefIngEntity ing1 = new CollectionRefIngEntity( 3, "data_ing_1", ed1 ); - CollectionRefIngEntity ing2 = new CollectionRefIngEntity( 4, "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( CollectionRefIngEntity.class, ing1.getId() ); - ed2 = em.find( CollectionRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing2 = em.find( CollectionRefIngEntity.class, ing2.getId() ); - ed2 = em.find( CollectionRefEdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( CollectionRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( CollectionRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( CollectionRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( CollectionRefIngEntity.class, ing2_id ) ); - } - - private Set makeSet(T... objects) { - Set ret = new HashSet(); - //noinspection ManualArrayToCollectionCopy - for ( T obj : objects ) { - ret.add( obj ); - } - return ret; - } - - @Test - public void testHistoryOfEdId1() { - CollectionRefIngEntity ing1 = getEntityManager().find( CollectionRefIngEntity.class, ing1_id ); - CollectionRefIngEntity ing2 = getEntityManager().find( CollectionRefIngEntity.class, ing2_id ); - - CollectionRefEdEntity rev1 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 1 ); - CollectionRefEdEntity rev2 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 2 ); - CollectionRefEdEntity rev3 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 3 ); - - assert rev1.getReffering().containsAll( makeSet( ing1, ing2 ) ); - assert rev1.getReffering().size() == 2; - - assert rev2.getReffering().containsAll( makeSet( ing2 ) ); - assert rev2.getReffering().size() == 1; - - assert rev3.getReffering().containsAll( Collections.EMPTY_SET ); - assert rev3.getReffering().size() == 0; - } - - @Test - public void testHistoryOfEdId2() { - CollectionRefIngEntity ing1 = getEntityManager().find( CollectionRefIngEntity.class, ing1_id ); - CollectionRefIngEntity ing2 = getEntityManager().find( CollectionRefIngEntity.class, ing2_id ); - - CollectionRefEdEntity rev1 = getAuditReader().find( CollectionRefEdEntity.class, ed2_id, 1 ); - CollectionRefEdEntity rev2 = getAuditReader().find( CollectionRefEdEntity.class, ed2_id, 2 ); - CollectionRefEdEntity rev3 = getAuditReader().find( CollectionRefEdEntity.class, ed2_id, 3 ); - - assert rev1.getReffering().containsAll( Collections.EMPTY_SET ); - assert rev1.getReffering().size() == 0; - - assert rev2.getReffering().containsAll( makeSet( ing1 ) ); - assert rev2.getReffering().size() == 1; - - assert rev3.getReffering().containsAll( makeSet( ing1, ing2 ) ); - assert rev3.getReffering().size() == 2; - - } - - @Test - public void testHistoryOfEdIng1() { - CollectionRefEdEntity ed1 = getEntityManager().find( CollectionRefEdEntity.class, ed1_id ); - CollectionRefEdEntity ed2 = getEntityManager().find( CollectionRefEdEntity.class, ed2_id ); - - CollectionRefIngEntity rev1 = getAuditReader().find( CollectionRefIngEntity.class, ing1_id, 1 ); - CollectionRefIngEntity rev2 = getAuditReader().find( CollectionRefIngEntity.class, ing1_id, 2 ); - CollectionRefIngEntity rev3 = getAuditReader().find( CollectionRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfEdIng2() { - CollectionRefEdEntity ed1 = getEntityManager().find( CollectionRefEdEntity.class, ed1_id ); - CollectionRefEdEntity ed2 = getEntityManager().find( CollectionRefEdEntity.class, ed2_id ); - - CollectionRefIngEntity rev1 = getAuditReader().find( CollectionRefIngEntity.class, ing2_id, 1 ); - CollectionRefIngEntity rev2 = getAuditReader().find( CollectionRefIngEntity.class, ing2_id, 2 ); - CollectionRefIngEntity rev3 = getAuditReader().find( CollectionRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java deleted file mode 100644 index 84463fda698a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.ListRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ListRefIngEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefEdEntity.class, ListRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListRefEdEntity ed1 = new ListRefEdEntity( 1, "data_ed_1" ); - ListRefEdEntity ed2 = new ListRefEdEntity( 2, "data_ed_2" ); - - ListRefIngEntity ing1 = new ListRefIngEntity( 3, "data_ing_1", ed1 ); - ListRefIngEntity ing2 = new ListRefIngEntity( 4, "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( ListRefIngEntity.class, ing1.getId() ); - ed2 = em.find( ListRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing2 = em.find( ListRefIngEntity.class, ing2.getId() ); - ed2 = em.find( ListRefEdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ListRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ListRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ListRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ListRefIngEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - ListRefIngEntity ing1 = getEntityManager().find( ListRefIngEntity.class, ing1_id ); - ListRefIngEntity ing2 = getEntityManager().find( ListRefIngEntity.class, ing2_id ); - - ListRefEdEntity rev1 = getAuditReader().find( ListRefEdEntity.class, ed1_id, 1 ); - ListRefEdEntity rev2 = getAuditReader().find( ListRefEdEntity.class, ed1_id, 2 ); - ListRefEdEntity rev3 = getAuditReader().find( ListRefEdEntity.class, ed1_id, 3 ); - - assert TestTools.checkCollection( rev1.getReffering(), ing1, ing2 ); - assert TestTools.checkCollection( rev2.getReffering(), ing2 ); - assert TestTools.checkCollection( rev3.getReffering() ); - } - - @Test - public void testHistoryOfEdId2() { - ListRefIngEntity ing1 = getEntityManager().find( ListRefIngEntity.class, ing1_id ); - ListRefIngEntity ing2 = getEntityManager().find( ListRefIngEntity.class, ing2_id ); - - ListRefEdEntity rev1 = getAuditReader().find( ListRefEdEntity.class, ed2_id, 1 ); - ListRefEdEntity rev2 = getAuditReader().find( ListRefEdEntity.class, ed2_id, 2 ); - ListRefEdEntity rev3 = getAuditReader().find( ListRefEdEntity.class, ed2_id, 3 ); - - assert TestTools.checkCollection( rev1.getReffering() ); - assert TestTools.checkCollection( rev2.getReffering(), ing1 ); - assert TestTools.checkCollection( rev3.getReffering(), ing1, ing2 ); - } - - @Test - public void testHistoryOfEdIng1() { - ListRefEdEntity ed1 = getEntityManager().find( ListRefEdEntity.class, ed1_id ); - ListRefEdEntity ed2 = getEntityManager().find( ListRefEdEntity.class, ed2_id ); - - ListRefIngEntity rev1 = getAuditReader().find( ListRefIngEntity.class, ing1_id, 1 ); - ListRefIngEntity rev2 = getAuditReader().find( ListRefIngEntity.class, ing1_id, 2 ); - ListRefIngEntity rev3 = getAuditReader().find( ListRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfEdIng2() { - ListRefEdEntity ed1 = getEntityManager().find( ListRefEdEntity.class, ed1_id ); - ListRefEdEntity ed2 = getEntityManager().find( ListRefEdEntity.class, ed2_id ); - - ListRefIngEntity rev1 = getAuditReader().find( ListRefIngEntity.class, ing2_id, 1 ); - ListRefIngEntity rev2 = getAuditReader().find( ListRefIngEntity.class, ing2_id, 2 ); - ListRefIngEntity rev3 = getAuditReader().find( ListRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java deleted file mode 100644 index ae90ead4fd6a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import java.util.Collections; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSet extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 3, 4 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 2, 4 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - SetRefIngEntity ing1 = getEntityManager().find( SetRefIngEntity.class, ing1_id ); - SetRefIngEntity ing2 = getEntityManager().find( SetRefIngEntity.class, ing2_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 4 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev3.getReffering().equals( TestTools.makeSet( ing2 ) ); - assert rev4.getReffering().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdId2() { - SetRefIngEntity ing1 = getEntityManager().find( SetRefIngEntity.class, ing1_id ); - SetRefIngEntity ing2 = getEntityManager().find( SetRefIngEntity.class, ing2_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 4 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( Collections.EMPTY_SET ); - assert rev3.getReffering().equals( TestTools.makeSet( ing1 ) ); - assert rev4.getReffering().equals( TestTools.makeSet( ing1, ing2 ) ); - } - - @Test - public void testHistoryOfEdIng1() { - SetRefEdEntity ed1 = getEntityManager().find( SetRefEdEntity.class, ed1_id ); - SetRefEdEntity ed2 = getEntityManager().find( SetRefEdEntity.class, ed2_id ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 4 ); - - assert rev1 == null; - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - assert rev4.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfEdIng2() { - SetRefEdEntity ed1 = getEntityManager().find( SetRefEdEntity.class, ed1_id ); - SetRefEdEntity ed2 = getEntityManager().find( SetRefEdEntity.class, ed2_id ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 4 ); - - assert rev1 == null; - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed1 ); - assert rev4.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java deleted file mode 100644 index 1a3c5f0cd041..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdEmbIdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngEmbIdEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSetWithEmbId extends BaseEnversJPAFunctionalTestCase { - private EmbId ed1_id; - private EmbId ed2_id; - - private EmbId ing1_id; - private EmbId ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEmbIdEntity.class, SetRefIngEmbIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ed1_id = new EmbId( 0, 1 ); - ed2_id = new EmbId( 2, 3 ); - - ing2_id = new EmbId( 4, 5 ); - ing1_id = new EmbId( 6, 7 ); - - EntityManager em = getEntityManager(); - - SetRefEdEmbIdEntity ed1 = new SetRefEdEmbIdEntity( ed1_id, "data_ed_1" ); - SetRefEdEmbIdEntity ed2 = new SetRefEdEmbIdEntity( ed2_id, "data_ed_2" ); - - SetRefIngEmbIdEntity ing1 = new SetRefIngEmbIdEntity( ing1_id, "data_ing_1", ed1 ); - SetRefIngEmbIdEntity ing2 = new SetRefIngEmbIdEntity( ing2_id, "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngEmbIdEntity.class, ing1.getId() ); - ed2 = em.find( SetRefEdEmbIdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing2 = em.find( SetRefIngEmbIdEntity.class, ing2.getId() ); - ed2 = em.find( SetRefEdEmbIdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdEmbIdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdEmbIdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefIngEmbIdEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( SetRefIngEmbIdEntity.class, ing2_id ) ); - } - - private Set makeSet(T... objects) { - Set ret = new HashSet(); - //noinspection ManualArrayToCollectionCopy - for ( T obj : objects ) { - ret.add( obj ); - } - return ret; - } - - @Test - public void testHistoryOfEdId1() { - SetRefIngEmbIdEntity ing1 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing1_id ); - SetRefIngEmbIdEntity ing2 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing2_id ); - - SetRefEdEmbIdEntity rev1 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed1_id, 1 ); - SetRefEdEmbIdEntity rev2 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed1_id, 2 ); - SetRefEdEmbIdEntity rev3 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed1_id, 3 ); - - assert rev1.getReffering().equals( makeSet( ing1, ing2 ) ); - assert rev2.getReffering().equals( makeSet( ing2 ) ); - assert rev3.getReffering().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdId2() { - SetRefIngEmbIdEntity ing1 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing1_id ); - SetRefIngEmbIdEntity ing2 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing2_id ); - - SetRefEdEmbIdEntity rev1 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed2_id, 1 ); - SetRefEdEmbIdEntity rev2 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed2_id, 2 ); - SetRefEdEmbIdEntity rev3 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed2_id, 3 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( makeSet( ing1 ) ); - assert rev3.getReffering().equals( makeSet( ing1, ing2 ) ); - } - - @Test - public void testHistoryOfEdIng1() { - SetRefEdEmbIdEntity ed1 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed1_id ); - SetRefEdEmbIdEntity ed2 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed2_id ); - - SetRefIngEmbIdEntity rev1 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing1_id, 1 ); - SetRefIngEmbIdEntity rev2 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing1_id, 2 ); - SetRefIngEmbIdEntity rev3 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfEdIng2() { - SetRefEdEmbIdEntity ed1 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed1_id ); - SetRefEdEmbIdEntity ed2 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed2_id ); - - SetRefIngEmbIdEntity rev1 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing2_id, 1 ); - SetRefIngEmbIdEntity rev2 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing2_id, 2 ); - SetRefIngEmbIdEntity rev3 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java deleted file mode 100644 index d09394dfb632..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdMulIdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngMulIdEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSetWithMulId extends BaseEnversJPAFunctionalTestCase { - private MulId ed1_id; - private MulId ed2_id; - - private MulId ing1_id; - private MulId ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdMulIdEntity.class, SetRefIngMulIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ed1_id = new MulId( 0, 1 ); - ed2_id = new MulId( 2, 3 ); - - ing2_id = new MulId( 4, 5 ); - ing1_id = new MulId( 6, 7 ); - - EntityManager em = getEntityManager(); - - SetRefEdMulIdEntity ed1 = new SetRefEdMulIdEntity( ed1_id.getId1(), ed1_id.getId2(), "data_ed_1" ); - SetRefEdMulIdEntity ed2 = new SetRefEdMulIdEntity( ed2_id.getId1(), ed2_id.getId2(), "data_ed_2" ); - - SetRefIngMulIdEntity ing1 = new SetRefIngMulIdEntity( ing1_id.getId1(), ing1_id.getId2(), "data_ing_1", ed1 ); - SetRefIngMulIdEntity ing2 = new SetRefIngMulIdEntity( ing2_id.getId1(), ing2_id.getId2(), "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngMulIdEntity.class, ing1_id ); - ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing2 = em.find( SetRefIngMulIdEntity.class, ing2_id ); - ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdMulIdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdMulIdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefIngMulIdEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( SetRefIngMulIdEntity.class, ing2_id ) ); - } - - private Set makeSet(T... objects) { - Set ret = new HashSet(); - //noinspection ManualArrayToCollectionCopy - for ( T obj : objects ) { - ret.add( obj ); - } - return ret; - } - - @Test - public void testHistoryOfEdId1() { - SetRefIngMulIdEntity ing1 = getEntityManager().find( SetRefIngMulIdEntity.class, ing1_id ); - SetRefIngMulIdEntity ing2 = getEntityManager().find( SetRefIngMulIdEntity.class, ing2_id ); - - SetRefEdMulIdEntity rev1 = getAuditReader().find( SetRefEdMulIdEntity.class, ed1_id, 1 ); - SetRefEdMulIdEntity rev2 = getAuditReader().find( SetRefEdMulIdEntity.class, ed1_id, 2 ); - SetRefEdMulIdEntity rev3 = getAuditReader().find( SetRefEdMulIdEntity.class, ed1_id, 3 ); - - assert rev1.getReffering().equals( makeSet( ing1, ing2 ) ); - assert rev2.getReffering().equals( makeSet( ing2 ) ); - assert rev3.getReffering().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdId2() { - SetRefIngMulIdEntity ing1 = getEntityManager().find( SetRefIngMulIdEntity.class, ing1_id ); - SetRefIngMulIdEntity ing2 = getEntityManager().find( SetRefIngMulIdEntity.class, ing2_id ); - - SetRefEdMulIdEntity rev1 = getAuditReader().find( SetRefEdMulIdEntity.class, ed2_id, 1 ); - SetRefEdMulIdEntity rev2 = getAuditReader().find( SetRefEdMulIdEntity.class, ed2_id, 2 ); - SetRefEdMulIdEntity rev3 = getAuditReader().find( SetRefEdMulIdEntity.class, ed2_id, 3 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( makeSet( ing1 ) ); - assert rev3.getReffering().equals( makeSet( ing1, ing2 ) ); - } - - @Test - public void testHistoryOfEdIng1() { - SetRefEdMulIdEntity ed1 = getEntityManager().find( SetRefEdMulIdEntity.class, ed1_id ); - SetRefEdMulIdEntity ed2 = getEntityManager().find( SetRefEdMulIdEntity.class, ed2_id ); - - SetRefIngMulIdEntity rev1 = getAuditReader().find( SetRefIngMulIdEntity.class, ing1_id, 1 ); - SetRefIngMulIdEntity rev2 = getAuditReader().find( SetRefIngMulIdEntity.class, ing1_id, 2 ); - SetRefIngMulIdEntity rev3 = getAuditReader().find( SetRefIngMulIdEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfEdIng2() { - SetRefEdMulIdEntity ed1 = getEntityManager().find( SetRefEdMulIdEntity.class, ed1_id ); - SetRefEdMulIdEntity ed2 = getEntityManager().find( SetRefEdMulIdEntity.class, ed2_id ); - - SetRefIngMulIdEntity rev1 = getAuditReader().find( SetRefIngMulIdEntity.class, ing2_id, 1 ); - SetRefIngMulIdEntity rev2 = getAuditReader().find( SetRefIngMulIdEntity.class, ing2_id, 2 ); - SetRefIngMulIdEntity rev3 = getAuditReader().find( SetRefIngMulIdEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java deleted file mode 100644 index a71a076afa10..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSetWithNullsDelete extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - private Integer ing3_id; - private Integer ing4_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1", ed1 ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2", ed1 ); - SetRefIngEntity ing3 = new SetRefIngEntity( 5, "data_ing_3", ed1 ); - SetRefIngEntity ing4 = new SetRefIngEntity( 6, "data_ing_4", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - em.persist( ing3 ); - em.persist( ing4 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - - ing1.setReference( null ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); - em.remove( ing2 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing3 = em.find( SetRefIngEntity.class, ing3.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - ing3.setReference( ed2 ); - - em.getTransaction().commit(); - // Revision 5 - em.getTransaction().begin(); - - ing4 = em.find( SetRefIngEntity.class, ing4.getId() ); - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - em.remove( ed1 ); - ing4.setReference( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - ing3_id = ing3.getId(); - ing4_id = ing4.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 4 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing2_id ) ); - assert Arrays.asList( 1, 4 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing3_id ) ); - assert Arrays.asList( 1, 5 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing4_id ) ); - } - - private Set makeSet(T... objects) { - Set ret = new HashSet(); - //noinspection ManualArrayToCollectionCopy - for ( T obj : objects ) { - ret.add( obj ); - } - return ret; - } - - @Test - public void testHistoryOfEdId1() { - SetRefIngEntity ing1 = getEntityManager().find( SetRefIngEntity.class, ing1_id ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2", new SetRefEdEntity( 1, "data_ed_1" ) ); - SetRefIngEntity ing3 = getEntityManager().find( SetRefIngEntity.class, ing3_id ); - SetRefIngEntity ing4 = getEntityManager().find( SetRefIngEntity.class, ing4_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 4 ); - SetRefEdEntity rev5 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 5 ); - - assert rev1.getReffering().equals( makeSet( ing1, ing2, ing3, ing4 ) ); - assert rev2.getReffering().equals( makeSet( ing2, ing3, ing4 ) ); - assert rev3.getReffering().equals( makeSet( ing3, ing4 ) ); - assert rev4.getReffering().equals( makeSet( ing4 ) ); - assert rev5 == null; - } - - @Test - public void testHistoryOfEdId2() { - SetRefIngEntity ing3 = getEntityManager().find( SetRefIngEntity.class, ing3_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 4 ); - SetRefEdEntity rev5 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 5 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( Collections.EMPTY_SET ); - assert rev3.getReffering().equals( Collections.EMPTY_SET ); - assert rev4.getReffering().equals( makeSet( ing3 ) ); - assert rev5.getReffering().equals( makeSet( ing3 ) ); - } - - @Test - public void testHistoryOfEdIng1() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference() == null; - assert rev3.getReference() == null; - assert rev4.getReference() == null; - assert rev5.getReference() == null; - } - - @Test - public void testHistoryOfEdIng2() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3 == null; - assert rev4 == null; - assert rev5 == null; - } - - @Test - public void testHistoryOfEdIng3() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed1 ); - assert rev4.getReference().equals( ed2 ); - assert rev5.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfEdIng4() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed1 ); - assert rev4.getReference().equals( ed1 ); - assert rev5.getReference() == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java deleted file mode 100644 index c02e6fec8308..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Set; - -import org.hibernate.annotations.SQLRestriction; -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorType; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import static org.junit.Assert.assertEquals; - - -/** - * Provides test cases for the following {@link OneToMany} mapping with {@linkplain SQLRestriction} - * - * @author Chris Cranford - */ -@JiraKey("HHH-9432") -@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") -public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase { - private Integer aId; - private Integer xId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityA.class, - EntityB.class, - EntityC.class, - EntityX.class, - EntityY.class, - EntityZ.class - }; - } - - @Test - @Priority(10) - public void initData() { - aId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = new EntityA(); - a.setName( "a" ); - entityManager.persist( a ); - return a.getId(); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityA a = entityManager.find( EntityA.class, aId ); - final EntityC c = new EntityC(); - c.setName( "c" ); - a.getAllMyC().add( c ); - entityManager.persist( c ); - entityManager.merge( a ); - } ); - - xId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityX x = new EntityX(); - x.setName( "x" ); - entityManager.persist( x ); - return x.getId(); - } ); - - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityX x = entityManager.find( EntityX.class, xId ); - final EntityZ z = new EntityZ(); - z.setName( "z" ); - x.getAllMyZ().add( z ); - entityManager.persist( z ); - entityManager.merge( x ); - } ); - } - - @Test - public void testWherePredicateWithAuditJoinTable() { - final EntityA a = getAuditReader().find( EntityA.class, aId, 2 ); - assertEquals( 1, a.getAllMyC().size() ); - } - - @Test - public void testWherePredicateWithoutAuditJoinTable() { - final EntityX x = getAuditReader().find( EntityX.class, xId, 4 ); - assertEquals( 1, x.getAllMyZ().size() ); - } - - @Audited - @Entity(name = "EntityA") - @Table(name = "a_tab") - public static class EntityA { - @Id - @GeneratedValue - private Integer id; - private String name; - - @OneToMany - @JoinTable(joinColumns = @JoinColumn(name = "allC")) - @SQLRestriction("type = 'C'") - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @AuditJoinTable(name = "A_C_AUD") - private Set allMyC; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getAllMyC() { - return allMyC; - } - - public void setAllMyC(Set allMyC) { - this.allMyC = allMyC; - } - } - - @Audited - @Entity(name = "EntityB") - @Table(name = "b_tab") - @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) - @DiscriminatorValue( value = "B") - public static class EntityB { - @Id - @GeneratedValue - private Integer id; - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityC") - @DiscriminatorValue(value = "C") - public static class EntityC extends EntityB { - - } - - @Audited - @Entity(name = "EntityX") - @Table(name = "x_tab") - public static class EntityX { - @Id - @GeneratedValue - private Integer id; - private String name; - - @OneToMany - @SQLRestriction("type = 'Z'") - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Set allMyZ; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getAllMyZ() { - return allMyZ; - } - - public void setAllMyZ(Set allMyZ) { - this.allMyZ = allMyZ; - } - } - - @Audited - @Entity(name = "EntityY") - @Table(name = "y_tab") - @DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING) - @DiscriminatorValue( value = "Y") - public static class EntityY { - @Id - @GeneratedValue - private Integer id; - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityZ") - @DiscriminatorValue(value = "Z") - public static class EntityZ extends EntityY { - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java deleted file mode 100644 index bd47d6dc6937..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BidirectionalMapKey extends BaseEnversJPAFunctionalTestCase { - private Integer ed_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {RefIngMapKeyEntity.class, RefEdMapKeyEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 (intialy 1 relation: ing1 -> ed) - em.getTransaction().begin(); - - RefEdMapKeyEntity ed = new RefEdMapKeyEntity(); - - em.persist( ed ); - - RefIngMapKeyEntity ing1 = new RefIngMapKeyEntity(); - ing1.setData( "a" ); - ing1.setReference( ed ); - - RefIngMapKeyEntity ing2 = new RefIngMapKeyEntity(); - ing2.setData( "b" ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (adding second relation: ing2 -> ed) - em.getTransaction().begin(); - - ed = em.find( RefEdMapKeyEntity.class, ed.getId() ); - ing2 = em.find( RefIngMapKeyEntity.class, ing2.getId() ); - - ing2.setReference( ed ); - - em.getTransaction().commit(); - - // - - ed_id = ed.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( RefEdMapKeyEntity.class, ed_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( RefIngMapKeyEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( RefIngMapKeyEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEd() { - RefIngMapKeyEntity ing1 = getEntityManager().find( RefIngMapKeyEntity.class, ing1_id ); - RefIngMapKeyEntity ing2 = getEntityManager().find( RefIngMapKeyEntity.class, ing2_id ); - - RefEdMapKeyEntity rev1 = getAuditReader().find( RefEdMapKeyEntity.class, ed_id, 1 ); - RefEdMapKeyEntity rev2 = getAuditReader().find( RefEdMapKeyEntity.class, ed_id, 2 ); - - assert rev1.getIdmap().equals( TestTools.makeMap( "a", ing1 ) ); - assert rev2.getIdmap().equals( TestTools.makeMap( "a", ing1, "b", ing2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java deleted file mode 100644 index 957a9d0690a8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7940") -public class IndexColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Parent p = new Parent( 1 ); - p.addChild( new Child( 1, "child1" ) ); - p.addChild( new Child( 2, "child2" ) ); - entityManager.persist( p ); - p.getChildren().forEach( entityManager::persist ); - } ); - - // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // should remove child with id 1 - p.removeChild( p.getChildren().get( 0 ) ); - entityManager.merge( p ); - } ); - - // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // add child with id 3 - final Child child = new Child( 3, "child3" ); - p.getChildren().add( 0, child ); - child.setParent( p ); - entityManager.persist( child ); - entityManager.merge( p ); - } ); - - // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - while ( !p.getChildren().isEmpty() ) { - Child child = p.getChildren().get( 0 ); - p.removeChild( child ); - entityManager.remove( child ); - } - entityManager.merge( p ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); - } - - @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); - } - - @Audited - @Entity(name = "Parent") - public static class Parent { - @Id - private Integer id; - - @OneToMany(mappedBy = "parent") - @OrderColumn(name = "`index`") - private List children = new ArrayList(); - - Parent() { - - } - - Parent(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public void addChild(Child child) { - if ( child.getParent() != null ) { - removeChild( child ); - } - child.setParent( this ); - getChildren().add( child ); - } - - public void removeChild(Child child) { - if ( child != null ) { - final Parent p = child.getParent(); - if ( p != null ) { - p.getChildren().remove( child ); - child.setParent( null ); - } - } - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Parent parent = (Parent) o; - - return id != null ? id.equals( parent.id ) : parent.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - } - - @Audited - @Entity(name = "Child") - public static class Child { - @Id - private Integer id; - private String name; - - @ManyToOne - private Parent parent; - - Child() { - - } - - Child(Integer id, String name) { - this( id, name, null ); - } - - Child(Integer id, String name, Parent parent) { - this.id = id; - this.name = name; - this.parent = parent; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Child child = (Child) o; - - if ( id != null ? !id.equals( child.id ) : child.id != null ) { - return false; - } - if ( name != null ? !name.equals( child.name ) : child.name != null ) { - return false; - } - return parent != null ? parent.equals( child.parent ) : child.parent == null; - - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( parent != null ? parent.hashCode() : 0 ); - return result; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java deleted file mode 100644 index 9e4fb2fd60e0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class InverseSideChanges extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - - private Integer ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - - em.getTransaction().commit(); - - // Revision 2 - - em.getTransaction().begin(); - - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - - em.persist( ing1 ); - - ed1.setReffering( new HashSet() ); - ed1.getReffering().add( ing1 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - - ing1_id = ing1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - } - - @Test - public void testHistoryOfEdIng1() { - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - - assert rev2.getReference() == null; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java deleted file mode 100644 index 4ac23405d9a5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7940") -public class OrderColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Parent p = new Parent( 1 ); - p.addChild( new Child( 1, "child1" ) ); - p.addChild( new Child( 2, "child2" ) ); - entityManager.persist( p ); - p.getChildren().forEach( entityManager::persist ); - } ); - - // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // should remove child with id 1 - p.removeChild( p.getChildren().get( 0 ) ); - entityManager.merge( p ); - } ); - - // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - // add child with id 3 - final Child child = new Child( 3, "child3" ); - p.getChildren().add( 0, child ); - child.setParent( p ); - entityManager.persist( child ); - entityManager.merge( p ); - } ); - - // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); - while ( !p.getChildren().isEmpty() ) { - Child child = p.getChildren().get( 0 ); - p.removeChild( child ); - entityManager.remove( child ); - } - entityManager.merge( p ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); - } - - @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); - } - - @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); - } - - @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); - } - - @Audited - @Entity(name = "Parent") - public static class Parent { - @Id - private Integer id; - - @OneToMany(mappedBy = "parent") - @OrderColumn - private List children = new ArrayList(); - - Parent() { - - } - - Parent(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } - - public void addChild(Child child) { - if ( child.getParent() != null ) { - removeChild( child ); - } - child.setParent( this ); - getChildren().add( child ); - } - - public void removeChild(Child child) { - if ( child != null ) { - final Parent p = child.getParent(); - if ( p != null ) { - p.getChildren().remove( child ); - child.setParent( null ); - } - } - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Parent parent = (Parent) o; - - return id != null ? id.equals( parent.id ) : parent.id == null; - - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - } - - @Audited - @Entity(name = "Child") - public static class Child { - @Id - private Integer id; - private String name; - - @ManyToOne - private Parent parent; - - Child() { - - } - - Child(Integer id, String name) { - this( id, name, null ); - } - - Child(Integer id, String name, Parent parent) { - this.id = id; - this.name = name; - this.parent = parent; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Parent getParent() { - return parent; - } - - public void setParent(Parent parent) { - this.parent = parent; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Child child = (Child) o; - - if ( id != null ? !id.equals( child.id ) : child.id != null ) { - return false; - } - if ( name != null ? !name.equals( child.name ) : child.name != null ) { - return false; - } - return parent != null ? parent.equals( child.parent ) : child.parent == null; - - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( parent != null ? parent.hashCode() : 0 ); - return result; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/RefEdMapKeyEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/RefEdMapKeyEntity.java deleted file mode 100644 index 83e24ea51623..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/RefEdMapKeyEntity.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import java.util.HashMap; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MapKey; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class RefEdMapKeyEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @OneToMany(mappedBy = "reference") - @MapKey(name = "data") - private Map idmap; - - public RefEdMapKeyEntity() { - idmap = new HashMap(); - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Map getIdmap() { - return idmap; - } - - public void setIdmap(Map idmap) { - this.idmap = idmap; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RefEdMapKeyEntity) ) { - return false; - } - - RefEdMapKeyEntity that = (RefEdMapKeyEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "RedMKE(id = " + id + ", idmap = " + idmap + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/RefIngMapKeyEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/RefIngMapKeyEntity.java deleted file mode 100644 index 808d088363dd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/RefIngMapKeyEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class RefIngMapKeyEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - @ManyToOne - private RefEdMapKeyEntity reference; - - @Audited - private String data; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public RefEdMapKeyEntity getReference() { - return reference; - } - - public void setReference(RefEdMapKeyEntity reference) { - this.reference = reference; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RefIngMapKeyEntity) ) { - return false; - } - - RefIngMapKeyEntity that = (RefIngMapKeyEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (id != null ? id.hashCode() : 0); - } - - public String toString() { - return "RingMKE(id = " + id + ", data = " + data + ", reference = " + reference + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java deleted file mode 100644 index a5cbd128447a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.ArrayList; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListRefCollEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicDetachedList extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - - private Integer coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ListRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - ListRefCollEntity coll1 = new ListRefCollEntity( 3, "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new ArrayList() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( ListRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( ListRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( ListRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().clear(); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( ListRefCollEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - ListRefCollEntity rev1 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 1 ); - ListRefCollEntity rev2 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 2 ); - ListRefCollEntity rev3 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 3 ); - ListRefCollEntity rev4 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 4 ); - - assert TestTools.checkCollection( rev1.getCollection(), str1 ); - assert TestTools.checkCollection( rev2.getCollection(), str1, str2 ); - assert TestTools.checkCollection( rev3.getCollection(), str2 ); - assert TestTools.checkCollection( rev4.getCollection() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java deleted file mode 100644 index 9d4f9f323580..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.SetRefCollEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicDetachedSet extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - - private Integer coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - SetRefCollEntity coll1 = new SetRefCollEntity( 3, "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().clear(); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( SetRefCollEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - SetRefCollEntity rev1 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 1 ); - SetRefCollEntity rev2 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 2 ); - SetRefCollEntity rev3 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 3 ); - SetRefCollEntity rev4 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java deleted file mode 100644 index 48b9cf2923c9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ids.SetRefCollEntityEmbId; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicDetachedSetWithEmbId extends BaseEnversJPAFunctionalTestCase { - private EmbId str1_id; - private EmbId str2_id; - - private EmbId coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbIdTestEntity.class, SetRefCollEntityEmbId.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - str1_id = new EmbId( 1, 2 ); - str2_id = new EmbId( 3, 4 ); - - coll1_id = new EmbId( 5, 6 ); - - EmbIdTestEntity str1 = new EmbIdTestEntity( str1_id, "str1" ); - EmbIdTestEntity str2 = new EmbIdTestEntity( str2_id, "str2" ); - - SetRefCollEntityEmbId coll1 = new SetRefCollEntityEmbId( coll1_id, "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( EmbIdTestEntity.class, str2.getId() ); - coll1 = em.find( SetRefCollEntityEmbId.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( EmbIdTestEntity.class, str1.getId() ); - coll1 = em.find( SetRefCollEntityEmbId.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetRefCollEntityEmbId.class, coll1.getId() ); - - coll1.getCollection().clear(); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( - SetRefCollEntityEmbId.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - EmbIdTestEntity str1 = getEntityManager().find( EmbIdTestEntity.class, str1_id ); - EmbIdTestEntity str2 = getEntityManager().find( EmbIdTestEntity.class, str2_id ); - - SetRefCollEntityEmbId rev1 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 1 ); - SetRefCollEntityEmbId rev2 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 2 ); - SetRefCollEntityEmbId rev3 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 3 ); - SetRefCollEntityEmbId rev4 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java deleted file mode 100644 index 88b8cad15e9c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ids.SetRefCollEntityMulId; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicDetachedSetWithMulId extends BaseEnversJPAFunctionalTestCase { - private MulId str1_id; - private MulId str2_id; - - private MulId coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MulIdTestEntity.class, SetRefCollEntityMulId.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - str1_id = new MulId( 1, 2 ); - str2_id = new MulId( 3, 4 ); - - coll1_id = new MulId( 5, 6 ); - - MulIdTestEntity str1 = new MulIdTestEntity( str1_id.getId1(), str1_id.getId2(), "str1" ); - MulIdTestEntity str2 = new MulIdTestEntity( str2_id.getId1(), str2_id.getId2(), "str2" ); - - SetRefCollEntityMulId coll1 = new SetRefCollEntityMulId( coll1_id.getId1(), coll1_id.getId2(), "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( MulIdTestEntity.class, str2_id ); - coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( MulIdTestEntity.class, str1_id ); - coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - - coll1.getCollection().clear(); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( - SetRefCollEntityMulId.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - MulIdTestEntity str1 = getEntityManager().find( MulIdTestEntity.class, str1_id ); - MulIdTestEntity str2 = getEntityManager().find( MulIdTestEntity.class, str2_id ); - - SetRefCollEntityMulId rev1 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 1 ); - SetRefCollEntityMulId rev2 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 2 ); - SetRefCollEntityMulId rev3 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 3 ); - SetRefCollEntityMulId rev4 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java deleted file mode 100644 index e8604c66ef27..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.SetJoinColumnRefCollEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicJoinColumnSet extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - - private Integer coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetJoinColumnRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - SetJoinColumnRefCollEntity coll1 = new SetJoinColumnRefCollEntity( 3, "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().clear(); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( - SetJoinColumnRefCollEntity.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - StrTestEntity str1 = entityManager.find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = entityManager.find( StrTestEntity.class, str2_id ); - - entityManager.getTransaction().commit(); - - SetJoinColumnRefCollEntity rev1 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 1 ); - SetJoinColumnRefCollEntity rev2 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 2 ); - SetJoinColumnRefCollEntity rev3 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 3 ); - SetJoinColumnRefCollEntity rev4 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java deleted file mode 100644 index 4f179fa5a6bb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.SetRefCollEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DataChangesDetachedSet extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - - private Integer coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - - SetRefCollEntity coll1 = new SetRefCollEntity( 3, "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - - coll1.setCollection( new HashSet() ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str1 ); - coll1.setData( "coll2" ); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - - coll1_id = coll1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefCollEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - } - - @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - - SetRefCollEntity rev1 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 1 ); - SetRefCollEntity rev2 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 2 ); - - assert rev1.getCollection().equals( TestTools.makeSet() ); - assert rev2.getCollection().equals( TestTools.makeSet( str1 ) ); - - assert "coll1".equals( rev1.getData() ); - assert "coll2".equals( rev2.getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java deleted file mode 100644 index b0b07da55fcd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; - -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListRefCollEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class DetachedTest extends BaseEnversFunctionalTestCase { - private Integer parentId = null; - private Integer childId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefCollEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - @JiraKey(value = "HHH-7543") - public void testUpdatingDetachedEntityWithRelation() { - Session session = getSession(); - - // Revision 1 - session.getTransaction().begin(); - ListRefCollEntity parent = new ListRefCollEntity( 1, "initial data" ); - StrTestEntity child = new StrTestEntity( "data" ); - session.persist( child ); - parent.setCollection( Arrays.asList( child ) ); - session.persist( parent ); - session.getTransaction().commit(); - - session.close(); - session = getSession(); - - // Revision 2 - updating detached entity - session.getTransaction().begin(); - parent.setData( "modified data" ); - session.merge( parent ); - session.getTransaction().commit(); - - session.close(); - - parentId = parent.getId(); - childId = child.getId(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListRefCollEntity.class, - parentId - ) - ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, childId ) ); - } - - @Test - public void testHistoryOfParent() { - ListRefCollEntity parent = new ListRefCollEntity( parentId, "initial data" ); - parent.setCollection( Arrays.asList( new StrTestEntity( "data", childId ) ) ); - - ListRefCollEntity ver1 = getAuditReader().find( ListRefCollEntity.class, parentId, 1 ); - - Assert.assertEquals( parent, ver1 ); - Assert.assertEquals( parent.getCollection(), ver1.getCollection() ); - - parent.setData( "modified data" ); - - ListRefCollEntity ver2 = getAuditReader().find( ListRefCollEntity.class, parentId, 2 ); - - Assert.assertEquals( parent, ver2 ); - Assert.assertEquals( parent.getCollection(), ver2.getCollection() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java deleted file mode 100644 index 25b1e825fa4a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleSetRefCollEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DoubleDetachedSet extends BaseEnversJPAFunctionalTestCase { - private Integer str1_id; - private Integer str2_id; - - private Integer coll1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, DoubleSetRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - DoubleSetRefCollEntity coll1 = new DoubleSetRefCollEntity( 3, "coll1" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - coll1.setCollection2( new HashSet() ); - coll1.getCollection2().add( str2 ); - em.persist( coll1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( DoubleSetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( DoubleSetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - coll1.getCollection2().add( str1 ); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( - getAuditReader().getRevisions( - DoubleSetRefCollEntity.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); - } - - @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - DoubleSetRefCollEntity rev1 = getAuditReader().find( DoubleSetRefCollEntity.class, coll1_id, 1 ); - DoubleSetRefCollEntity rev2 = getAuditReader().find( DoubleSetRefCollEntity.class, coll1_id, 2 ); - DoubleSetRefCollEntity rev3 = getAuditReader().find( DoubleSetRefCollEntity.class, coll1_id, 3 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - - assert rev1.getCollection2().equals( TestTools.makeSet( str2 ) ); - assert rev2.getCollection2().equals( TestTools.makeSet( str2 ) ); - assert rev3.getCollection2().equals( TestTools.makeSet( str1, str2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java deleted file mode 100644 index 2082cfcdf571..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java +++ /dev/null @@ -1,485 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity1; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity2; -import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefIngEntity; - -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test for a double "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn - * (and thus owns the relation), and the other uses a @ManyToOne(insertable=false, updatable=false). - * - * @author Adam Warski (adam at warski dot org) - */ -public class DoubleJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_1_id; - private Integer ed2_1_id; - private Integer ed1_2_id; - private Integer ed2_2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - DoubleListJoinColumnBidirectionalRefIngEntity.class, - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - DoubleListJoinColumnBidirectionalRefEdEntity2.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - "ed1_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - "ed1_2", - null - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - "ed2_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - "ed2_2", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll1" ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll2" ); - - // Revision 1 (ing1: ed1_1, ed2_1, ing2: ed1_2, ed2_2) - em.getTransaction().begin(); - - ing1.getReferences1().add( ed1_1 ); - ing1.getReferences2().add( ed2_1 ); - - ing2.getReferences1().add( ed1_2 ); - ing2.getReferences2().add( ed2_2 ); - - em.persist( ed1_1 ); - em.persist( ed1_2 ); - em.persist( ed2_1 ); - em.persist( ed2_2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing2.getReferences1().clear(); - ing2.getReferences2().clear(); - - ing1.getReferences1().add( ed1_2 ); - ing1.getReferences2().add( ed2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ed1_1.setData( "ed1_1 bis" ); - ed2_2.setData( "ed2_2 bis" ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (ing1: ed2_2, ing2: ed2_1, ed1_1, ed1_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing1.getReferences1().clear(); - ing2.getReferences1().add( ed1_1 ); - ing2.getReferences1().add( ed1_2 ); - - ing1.getReferences2().remove( ed2_1 ); - ing2.getReferences2().add( ed2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_1_id = ed1_1.getId(); - ed1_2_id = ed1_2.getId(); - ed2_1_id = ed2_1.getId(); - ed2_2_id = ed2_2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id - ) - ); - } - - @Test - public void testHistoryOfIng1() { - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - ed1_1_id, - "ed1_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - ed1_1_id, - "ed1_1 bis", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - ed2_2_id, - "ed2_2", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - ed2_2_id, - "ed2_2 bis", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences1(), ed1_1_fromRev1 ) ); - assertTrue( checkCollection( rev2.getReferences1(), ed1_1_fromRev1, ed1_2 ) ); - assertTrue( checkCollection( rev3.getReferences1(), ed1_1_fromRev3, ed1_2 ) ); - assertTrue( checkCollection( rev4.getReferences1() ) ); - - assertTrue( checkCollection( rev1.getReferences2(), ed2_1 ) ); - assertTrue( checkCollection( rev2.getReferences2(), ed2_1, ed2_2_fromRev1 ) ); - assertTrue( checkCollection( rev3.getReferences2(), ed2_1, ed2_2_fromRev3 ) ); - assertTrue( checkCollection( rev4.getReferences2(), ed2_2_fromRev3 ) ); - } - - @Test - public void testHistoryOfIng2() { - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - ed1_1_id, - "ed1_1 bis", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - ed2_2_id, - "ed2_2", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences1(), ed1_2 ) ); - assertTrue( checkCollection( rev2.getReferences1() ) ); - assertTrue( checkCollection( rev3.getReferences1() ) ); - assertTrue( checkCollection( rev4.getReferences1(), ed1_1_fromRev3, ed1_2 ) ); - - assertTrue( checkCollection( rev1.getReferences2(), ed2_2_fromRev1 ) ); - assertTrue( checkCollection( rev2.getReferences2() ) ); - assertTrue( checkCollection( rev3.getReferences2() ) ); - assertTrue( checkCollection( rev4.getReferences2(), ed2_1 ) ); - } - - @Test - public void testHistoryOfEd1_1() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity1 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed1_1" ); - assertEquals( rev2.getData(), "ed1_1" ); - assertEquals( rev3.getData(), "ed1_1 bis" ); - assertEquals( rev4.getData(), "ed1_1 bis" ); - } - - @Test - public void testHistoryOfEd1_2() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity1 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed1_2" ); - assertEquals( rev2.getData(), "ed1_2" ); - assertEquals( rev3.getData(), "ed1_2" ); - assertEquals( rev4.getData(), "ed1_2" ); - } - - @Test - public void testHistoryOfEd2_1() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed2_1" ); - assertEquals( rev2.getData(), "ed2_1" ); - assertEquals( rev3.getData(), "ed2_1" ); - assertEquals( rev4.getData(), "ed2_1" ); - } - - @Test - public void testHistoryOfEd2_2() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getData(), "ed2_2" ); - assertEquals( rev2.getData(), "ed2_2" ); - assertEquals( rev3.getData(), "ed2_2 bis" ); - assertEquals( rev4.getData(), "ed2_2 bis" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java deleted file mode 100644 index 03fc79fd67d6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.detached.IndexedListJoinColumnBidirectionalRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.IndexedListJoinColumnBidirectionalRefIngEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relatin), - * and the other uses a @ManyToOne(insertable=false, updatable=false). - * - * @author Adam Warski (adam at warski dot org) - */ -public class IndexedJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - private Integer ed3_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - IndexedListJoinColumnBidirectionalRefIngEntity.class, - IndexedListJoinColumnBidirectionalRefEdEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - IndexedListJoinColumnBidirectionalRefEdEntity ed1 = new IndexedListJoinColumnBidirectionalRefEdEntity( - "ed1", - null - ); - IndexedListJoinColumnBidirectionalRefEdEntity ed2 = new IndexedListJoinColumnBidirectionalRefEdEntity( - "ed2", - null - ); - IndexedListJoinColumnBidirectionalRefEdEntity ed3 = new IndexedListJoinColumnBidirectionalRefEdEntity( - "ed3", - null - ); - - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = new IndexedListJoinColumnBidirectionalRefIngEntity( - "coll1", - ed1, - ed2, - ed3 - ); - IndexedListJoinColumnBidirectionalRefIngEntity ing2 = new IndexedListJoinColumnBidirectionalRefIngEntity( - "coll1" - ); - - // Revision 1 (ing1: ed1, ed2, ed3) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ed3 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1, ed3, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed2 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - - ing1.getReferences().remove( ed2 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (ing1: ed3, ed1, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing1.getReferences().remove( ed3 ); - ing1.getReferences().add( 0, ed3 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (ing1: ed2, ed3, ed1) - em.getTransaction().begin(); - - ing1 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( 0, ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - ed3_id = ed3.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ) - ); - } - - @Test - public void testHistoryOfIng1() { - IndexedListJoinColumnBidirectionalRefEdEntity ed1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ); - IndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - IndexedListJoinColumnBidirectionalRefEdEntity ed3 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ); - - IndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 3 ); - assertEquals( rev1.getReferences().get( 0 ), ed1 ); - assertEquals( rev1.getReferences().get( 1 ), ed2 ); - assertEquals( rev1.getReferences().get( 2 ), ed3 ); - - assertEquals( rev2.getReferences().size(), 2 ); - assertEquals( rev2.getReferences().get( 0 ), ed1 ); - assertEquals( rev2.getReferences().get( 1 ), ed3 ); - - assertEquals( rev3.getReferences().size(), 2 ); - assertEquals( rev3.getReferences().get( 0 ), ed3 ); - assertEquals( rev3.getReferences().get( 1 ), ed1 ); - - assertEquals( rev4.getReferences().size(), 3 ); - assertEquals( rev4.getReferences().get( 0 ), ed2 ); - assertEquals( rev4.getReferences().get( 1 ), ed3 ); - assertEquals( rev4.getReferences().get( 2 ), ed1 ); - } - - @Test - public void testHistoryOfIng2() { - IndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - IndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 0 ); - - assertEquals( rev2.getReferences().size(), 1 ); - assertEquals( rev2.getReferences().get( 0 ), ed2 ); - - assertEquals( rev3.getReferences().size(), 1 ); - assertEquals( rev3.getReferences().get( 0 ), ed2 ); - - assertEquals( rev4.getReferences().size(), 0 ); - } - - @Test - public void testHistoryOfEd1() { - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - IndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 2 ) ); - } - - @Test - public void testHistoryOfEd2() { - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - IndexedListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - IndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing2 ) ); - assertTrue( rev3.getOwner().equals( ing2 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 0 ) ); - } - - @Test - public void testHistoryOfEd3() { - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - IndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 2 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java deleted file mode 100644 index 73ec7f240f17..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java +++ /dev/null @@ -1,387 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance.ChildIndexedListJoinColumnBidirectionalRefIngEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance.ParentIndexedListJoinColumnBidirectionalRefIngEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance.ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relation), - * in the parent entity, and the other uses a @ManyToOne(insertable=false, updatable=false). - * - * @author Adam Warski (adam at warski dot org) - */ -public class InheritanceIndexedJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - private Integer ed3_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ParentIndexedListJoinColumnBidirectionalRefIngEntity.class, - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed1 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - "ed1", - null - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - "ed2", - null - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - "ed3", - null - ); - - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = new ChildIndexedListJoinColumnBidirectionalRefIngEntity( - "coll1", - "coll1bis", - ed1, - ed2, - ed3 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = new ChildIndexedListJoinColumnBidirectionalRefIngEntity( - "coll1", - "coll1bis" - ); - - // Revision 1 (ing1: ed1, ed2, ed3) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ed3 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1, ed3, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - - ing1.getReferences().remove( ed2 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (ing1: ed3, ed1, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing1.getReferences().remove( ed3 ); - ing1.getReferences().add( 0, ed3 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (ing1: ed2, ed3, ed1) - em.getTransaction().begin(); - - ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( 0, ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - ed3_id = ed3.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ) - ); - } - - @Test - public void testHistoryOfIng1() { - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed1 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ); - - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 3 ); - assertEquals( rev1.getReferences().get( 0 ), ed1 ); - assertEquals( rev1.getReferences().get( 1 ), ed2 ); - assertEquals( rev1.getReferences().get( 2 ), ed3 ); - - assertEquals( rev2.getReferences().size(), 2 ); - assertEquals( rev2.getReferences().get( 0 ), ed1 ); - assertEquals( rev2.getReferences().get( 1 ), ed3 ); - - assertEquals( rev3.getReferences().size(), 2 ); - assertEquals( rev3.getReferences().get( 0 ), ed3 ); - assertEquals( rev3.getReferences().get( 1 ), ed1 ); - - assertEquals( rev4.getReferences().size(), 3 ); - assertEquals( rev4.getReferences().get( 0 ), ed2 ); - assertEquals( rev4.getReferences().get( 1 ), ed3 ); - assertEquals( rev4.getReferences().get( 2 ), ed1 ); - } - - @Test - public void testHistoryOfIng2() { - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 0 ); - - assertEquals( rev2.getReferences().size(), 1 ); - assertEquals( rev2.getReferences().get( 0 ), ed2 ); - - assertEquals( rev3.getReferences().size(), 1 ); - assertEquals( rev3.getReferences().get( 0 ), ed2 ); - - assertEquals( rev4.getReferences().size(), 0 ); - } - - @Test - public void testHistoryOfEd1() { - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 1 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 2 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 3 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 2 ) ); - } - - @Test - public void testHistoryOfEd2() { - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 1 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 2 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 3 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing2 ) ); - assertTrue( rev3.getOwner().equals( ing2 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 0 ) ); - } - - @Test - public void testHistoryOfEd3() { - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 1 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 2 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 3 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 2 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java deleted file mode 100644 index 09d03d9f84c5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalRefIngEntity; - -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relatin), - * and the other uses a @ManyToOne(insertable=false, updatable=false). - * - * @author Adam Warski (adam at warski dot org) - */ -public class JoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ListJoinColumnBidirectionalRefIngEntity.class, - ListJoinColumnBidirectionalRefEdEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - ListJoinColumnBidirectionalRefEdEntity ed1 = new ListJoinColumnBidirectionalRefEdEntity( "ed1", null ); - ListJoinColumnBidirectionalRefEdEntity ed2 = new ListJoinColumnBidirectionalRefEdEntity( "ed2", null ); - - ListJoinColumnBidirectionalRefIngEntity ing1 = new ListJoinColumnBidirectionalRefIngEntity( "coll1", ed1 ); - ListJoinColumnBidirectionalRefIngEntity ing2 = new ListJoinColumnBidirectionalRefIngEntity( "coll1", ed2 ); - - // Revision 1 (ing1: ed1, ing2: ed2) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1, ed2) - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // No revision - no changes - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - - ed2.setOwner( ing2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (ing1: ed1, ed2) - em.getTransaction().begin(); - - ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - - ed1.setData( "ed1 bis" ); - // Shouldn't get written - ed1.setOwner( ing2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (ing2: ed1, ed2) - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - - ing1.getReferences().clear(); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefIngEntity.class, ing1_id ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefEdEntity.class, ed1_id ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefEdEntity.class, ed2_id ) - ); - } - - @Test - public void testHistoryOfIng1() { - ListJoinColumnBidirectionalRefEdEntity ed1_fromRev1 = new ListJoinColumnBidirectionalRefEdEntity( - ed1_id, - "ed1", - null - ); - ListJoinColumnBidirectionalRefEdEntity ed1_fromRev3 = new ListJoinColumnBidirectionalRefEdEntity( - ed1_id, - "ed1 bis", - null - ); - ListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - ListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - ListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - ListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed1_fromRev1 ) ); - assertTrue( checkCollection( rev2.getReferences(), ed1_fromRev1, ed2 ) ); - assertTrue( checkCollection( rev3.getReferences(), ed1_fromRev3, ed2 ) ); - assertTrue( checkCollection( rev4.getReferences() ) ); - } - - @Test - public void testHistoryOfIng2() { - ListJoinColumnBidirectionalRefEdEntity ed1 = getEntityManager().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ); - ListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - ListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - ListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - ListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed2 ) ); - assertTrue( checkCollection( rev2.getReferences() ) ); - assertTrue( checkCollection( rev3.getReferences() ) ); - assertTrue( checkCollection( rev4.getReferences(), ed1, ed2 ) ); - } - - @Test - public void testHistoryOfEd1() { - ListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - ListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - ListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 1 - ); - ListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 2 - ); - ListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 3 - ); - ListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed1" ); - assertEquals( rev2.getData(), "ed1" ); - assertEquals( rev3.getData(), "ed1 bis" ); - assertEquals( rev4.getData(), "ed1 bis" ); - } - - @Test - public void testHistoryOfEd2() { - ListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - ListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - ListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 1 - ); - ListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 2 - ); - ListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 3 - ); - ListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed2" ); - assertEquals( rev2.getData(), "ed2" ); - assertEquals( rev3.getData(), "ed2" ); - assertEquals( rev4.getData(), "ed2" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java deleted file mode 100644 index cc6a29065901..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.detached; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalInheritanceRefEdChildEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalInheritanceRefEdParentEntity; -import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalInheritanceRefIngEntity; - -import org.junit.Test; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relatin), - * and the other uses a @ManyToOne(insertable=false, updatable=false). - * - * @author Adam Warski (adam at warski dot org) - */ -public class JoinColumnBidirectionalListWithInheritance extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ListJoinColumnBidirectionalInheritanceRefEdChildEntity.class, - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed1 = new ListJoinColumnBidirectionalInheritanceRefEdChildEntity( - "ed1", - null, - "ed1 child" - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = new ListJoinColumnBidirectionalInheritanceRefEdChildEntity( - "ed2", - null, - "ed2 child" - ); - - ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = new ListJoinColumnBidirectionalInheritanceRefIngEntity( - "coll1", - ed1 - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = new ListJoinColumnBidirectionalInheritanceRefIngEntity( - "coll1", - ed2 - ); - - // Revision 1 (ing1: ed1, ing2: ed2) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1, ed2) - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed1.getId() ); - ed2 = em.find( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed2.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id - ) - ); - } - - @Test - public void testHistoryOfIng1() { - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed1 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalInheritanceRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id, - 2 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed1 ) ); - assertTrue( checkCollection( rev2.getReferences(), ed1, ed2 ) ); - } - - @Test - public void testHistoryOfIng2() { - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalInheritanceRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id, - 2 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed2 ) ); - assertTrue( checkCollection( rev2.getReferences() ) ); - } - - @Test - public void testHistoryOfEd1() { - ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id - ); - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id, - 2 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - } - - @Test - public void testHistoryOfEd2() { - ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id - ); - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id, - 2 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/Constant.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/Constant.java deleted file mode 100644 index ad98502fecea..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/Constant.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.embeddedid; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Constant implements Serializable { - @Id - @Column(length = 3) - private String id; - - private String name; - - public Constant() { - } - - public Constant(String id, String name) { - this.id = id; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Constant) ) { - return false; - } - - Constant constant = (Constant) o; - - if ( id != null ? !id.equals( constant.id ) : constant.id != null ) { - return false; - } - if ( name != null ? !name.equals( constant.name ) : constant.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Constant(id = " + id + ", name = " + name + ")"; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java deleted file mode 100644 index e9cf584177b3..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.embeddedid; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.orm.junit.SkipForDialect; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7157") -@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'CONSTANT' is not escaped even though autoQuoteKeywords is enabled") -public class MapsIdTest extends BaseEnversJPAFunctionalTestCase { - private PersonTuple tuple1Ver1 = null; - private PersonTuple tuple2Ver1 = null; - private PersonTuple tuple2Ver2 = null; - private Person personCVer1 = null; - private Person personCVer2 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, PersonTuple.class, Constant.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Person personA = new Person( "Peter" ); - Person personB = new Person( "Mary" ); - em.persist( personA ); - em.persist( personB ); - Constant cons = new Constant( "USD", "US Dollar" ); - em.persist( cons ); - PersonTuple tuple1 = new PersonTuple( true, personA, personB, cons ); - em.persist( tuple1 ); - em.getTransaction().commit(); - - tuple1Ver1 = new PersonTuple( - tuple1.isHelloWorld(), - tuple1.getPersonA(), - tuple1.getPersonB(), - tuple1.getConstant() - ); - - // Revision 2 - em.getTransaction().begin(); - cons = em.find( Constant.class, cons.getId() ); - Person personC1 = new Person( "Lukasz" ); - em.persist( personC1 ); - PersonTuple tuple2 = new PersonTuple( true, personA, personC1, cons ); - em.persist( tuple2 ); - em.getTransaction().commit(); - - tuple2Ver1 = new PersonTuple( - tuple2.isHelloWorld(), - tuple2.getPersonA(), - tuple2.getPersonB(), - tuple2.getConstant() - ); - personCVer1 = new Person( personC1.getId(), personC1.getName() ); - personCVer1.getPersonBTuples().add( tuple2Ver1 ); - - // Revision 3 - em.getTransaction().begin(); - tuple2 = em.find( PersonTuple.class, tuple2.getPersonTupleId() ); - tuple2.setHelloWorld( false ); - em.merge( tuple2 ); - em.getTransaction().commit(); - - tuple2Ver2 = new PersonTuple( - tuple2.isHelloWorld(), - tuple2.getPersonA(), - tuple2.getPersonB(), - tuple2.getConstant() - ); - - // Revision 4 - em.getTransaction().begin(); - Person personC2 = em.find( Person.class, personC1.getId() ); - personC2.setName( "Robert" ); - em.merge( personC2 ); - em.getTransaction().commit(); - - personCVer2 = new Person( personC2.getId(), personC2.getName() ); - personCVer2.getPersonBTuples().add( tuple2Ver1 ); - - em.close(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - PersonTuple.class, - tuple1Ver1.getPersonTupleId() - ) - ); - Assert.assertEquals( - Arrays.asList( 2, 3 ), getAuditReader().getRevisions( - PersonTuple.class, - tuple2Ver1.getPersonTupleId() - ) - ); - Assert.assertEquals( - Arrays.asList( 2, 4 ), getAuditReader().getRevisions( - Person.class, - personCVer1.getId() - ) - ); - } - - @Test - public void testHistoryOfTuple1() { - PersonTuple tuple = getAuditReader().find( PersonTuple.class, tuple1Ver1.getPersonTupleId(), 1 ); - - Assert.assertEquals( tuple1Ver1, tuple ); - Assert.assertEquals( tuple1Ver1.isHelloWorld(), tuple.isHelloWorld() ); - Assert.assertEquals( tuple1Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); - Assert.assertEquals( tuple1Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); - } - - @Test - public void testHistoryOfTuple2() { - PersonTuple tuple = getAuditReader().find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 2 ); - - Assert.assertEquals( tuple2Ver1, tuple ); - Assert.assertEquals( tuple2Ver1.isHelloWorld(), tuple.isHelloWorld() ); - Assert.assertEquals( tuple2Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); - Assert.assertEquals( tuple2Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); - - tuple = getAuditReader().find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 3 ); - - Assert.assertEquals( tuple2Ver2, tuple ); - Assert.assertEquals( tuple2Ver2.isHelloWorld(), tuple.isHelloWorld() ); - Assert.assertEquals( tuple2Ver2.getPersonA().getId(), tuple.getPersonA().getId() ); - Assert.assertEquals( tuple2Ver2.getPersonB().getId(), tuple.getPersonB().getId() ); - } - - @Test - public void testHistoryOfPersonC() { - Person person = getAuditReader().find( Person.class, personCVer1.getId(), 2 ); - - Assert.assertEquals( personCVer1, person ); - Assert.assertEquals( personCVer1.getPersonATuples(), person.getPersonATuples() ); - Assert.assertEquals( personCVer1.getPersonBTuples(), person.getPersonBTuples() ); - - person = getAuditReader().find( Person.class, personCVer2.getId(), 4 ); - - Assert.assertEquals( personCVer2, person ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java deleted file mode 100644 index 434cef4db627..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java +++ /dev/null @@ -1,340 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.embeddedid; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.AssociationOverride; -import jakarta.persistence.AssociationOverrides; -import jakarta.persistence.Basic; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; -import jakarta.persistence.Transient; - -import org.hibernate.annotations.Fetch; -import org.hibernate.annotations.FetchMode; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11770") -public class OneToManyCompositeKeyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Contract.class, Design.class, DesignContract.class }; - } - - @Test - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - final Contract contract = new Contract( 1 ); - final Design design = new Design( 1 ); - final DesignContract designContract = new DesignContract( contract, design ); - designContract.setGoal( 25d ); - contract.getDesigns().add( designContract ); - entityManager.persist( design ); - entityManager.persist( contract ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Contract.class, 1 ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Design.class, 1 ) ); - } - - @Test - public void testOneToManyAssociationAuditQuery() { - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = getAuditReader(); - final Contract contract = auditReader.find( Contract.class, 1, 1 ); - final Design design = auditReader.find( Design.class, 1, 1 ); - assertEquals( 1, contract.getDesigns().size() ); - - final DesignContract designContract = contract.getDesigns().iterator().next(); - assertEquals( contract.getId(), designContract.getContract().getId() ); - assertEquals( design.getId(), designContract.getDesign().getId() ); - } ); - } - - @Entity(name = "Contract") - @Table(name = "CONTRACTS") - @Audited - public static class Contract { - @Id - private Integer id; - - @OneToMany(mappedBy = "pk.contract", fetch = FetchType.EAGER, cascade = { CascadeType.ALL } ) - @Fetch(value = FetchMode.SUBSELECT) - private List designs = new ArrayList<>(); - - Contract() { - - } - - Contract(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public List getDesigns() { - return designs; - } - - public void setDesigns(List designs) { - this.designs = designs; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Contract contract = (Contract) o; - - return id != null ? id.equals( contract.id ) : contract.id == null; - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "Contract{" + - "id=" + id + - '}'; - } - } - - @Entity(name = "DesignContract") - @AssociationOverrides(value = { - @AssociationOverride(name = "pk.contract", joinColumns = @JoinColumn(name = "FK_CONTRACT")), - @AssociationOverride(name = "pk.design", joinColumns = @JoinColumn(name = "FK_DESIGN")) - }) - @Table(name = "CONTRACT_DESIGNS") - @Audited - public static class DesignContract { - @EmbeddedId - private DesignContractId pk = new DesignContractId(); - @Basic - @Column(name = "GOAL", nullable = false, precision = 5) - private Double goal; - - DesignContract() { - - } - - DesignContract(Contract contract, Design design) { - pk.setContract( contract ); - pk.setDesign( design ); - } - - public DesignContractId getPk() { - return pk; - } - - public void setPk(DesignContractId pk) { - this.pk = pk; - } - - @Transient - public Contract getContract() { - return pk.getContract(); - } - - @Transient - public Design getDesign() { - return pk.getDesign(); - } - - public Double getGoal() { - return goal; - } - - public void setGoal(Double goal) { - this.goal = goal; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - DesignContract that = (DesignContract) o; - - if ( pk != null ? !pk.equals( that.pk ) : that.pk != null ) { - return false; - } - return goal != null ? goal.equals( that.goal ) : that.goal == null; - } - - @Override - public int hashCode() { - int result = pk != null ? pk.hashCode() : 0; - result = 31 * result + ( goal != null ? goal.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "DesignContract{" + - "pk=" + pk + - ", goal=" + goal + - '}'; - } - } - - @Embeddable - public static class DesignContractId implements Serializable { - @ManyToOne - private Contract contract; - @ManyToOne - private Design design; - - DesignContractId() { - - } - - DesignContractId(Contract contract, Design design) { - this.contract = contract; - this.design = design; - } - - public Contract getContract() { - return contract; - } - - public void setContract(Contract contract) { - this.contract = contract; - } - - public Design getDesign() { - return design; - } - - public void setDesign(Design design) { - this.design = design; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - DesignContractId that = (DesignContractId) o; - - if ( contract != null ? !contract.equals( that.contract ) : that.contract != null ) { - return false; - } - return design != null ? design.equals( that.design ) : that.design == null; - } - - @Override - public int hashCode() { - int result = contract != null ? contract.hashCode() : 0; - result = 31 * result + ( design != null ? design.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "DesignContractId{" + - "contract=" + contract + - ", design=" + design + - '}'; - } - } - - @Entity(name = "Design") - @Audited - private static class Design { - @Id - private Integer id; - - Design() { - - } - - Design(Integer id) { - this.id = id; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Design design = (Design) o; - - return id != null ? id.equals( design.id ) : design.id == null; - } - - @Override - public int hashCode() { - return id != null ? id.hashCode() : 0; - } - - @Override - public String toString() { - return "Design{" + - "id=" + id + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/Person.java deleted file mode 100644 index 80d9c5dce0ea..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/Person.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.embeddedid; - -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Person implements Serializable { - @Id - @GeneratedValue - private long id; - - private String name; - - @OneToMany(mappedBy = "personA") - private Set personATuples = new HashSet(); - - @OneToMany(mappedBy = "personB") - private Set personBTuples = new HashSet(); - - public Person() { - } - - public Person(String name) { - this.name = name; - } - - public Person(long id, String name) { - this.id = id; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Person) ) { - return false; - } - - Person person = (Person) o; - - if ( id != person.id ) { - return false; - } - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) (id ^ (id >>> 32)); - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Person(id = " + id + ", name = " + name + ")"; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getPersonBTuples() { - return personBTuples; - } - - public void setPersonBTuples(Set personBTuples) { - this.personBTuples = personBTuples; - } - - public Set getPersonATuples() { - return personATuples; - } - - public void setPersonATuples(Set personATuples) { - this.personATuples = personATuples; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/PersonTuple.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/PersonTuple.java deleted file mode 100644 index acab20a970d7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/PersonTuple.java +++ /dev/null @@ -1,198 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.embeddedid; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MapsId; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class PersonTuple implements Serializable { - @Embeddable - public static class PersonTupleId implements Serializable { - @Column(nullable = false) - private long personAId; - - @Column(nullable = false) - private long personBId; - - @Column(nullable = false) - private String constantId; - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PersonTupleId) ) { - return false; - } - - PersonTupleId that = (PersonTupleId) o; - - if ( personAId != that.personAId ) { - return false; - } - if ( personBId != that.personBId ) { - return false; - } - if ( constantId != null ? !constantId.equals( that.constantId ) : that.constantId != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (int) (personAId ^ (personAId >>> 32)); - result = 31 * result + (int) (personBId ^ (personBId >>> 32)); - result = 31 * result + (constantId != null ? constantId.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "PersonTupleId(personAId = " + personAId + ", personBId = " + personBId + ", constantId = " + constantId + ")"; - } - - public long getPersonAId() { - return personAId; - } - - public void setPersonAId(long personAId) { - this.personAId = personAId; - } - - public long getPersonBId() { - return personBId; - } - - public void setPersonBId(long personBId) { - this.personBId = personBId; - } - - public String getConstantId() { - return constantId; - } - - public void setConstantId(String constantId) { - this.constantId = constantId; - } - } - - @EmbeddedId - private PersonTupleId personTupleId = new PersonTupleId(); - - @MapsId("personAId") - @ManyToOne(optional = false) - @JoinColumn(insertable = false, updatable = false, nullable = false) - private Person personA; - - @MapsId("personBId") - @ManyToOne(optional = false) - @JoinColumn(insertable = false, updatable = false, nullable = false) - private Person personB; - - @MapsId("constantId") - @ManyToOne(optional = false) - @JoinColumn(insertable = false, updatable = false, nullable = false) - private Constant constant; - - @Column(nullable = false) - private boolean helloWorld = false; - - public PersonTuple() { - } - - public PersonTuple(boolean helloWorld, Person personA, Person personB, Constant constant) { - this.helloWorld = helloWorld; - this.personA = personA; - this.personB = personB; - this.constant = constant; - - this.personTupleId.personAId = personA.getId(); - this.personTupleId.personBId = personB.getId(); - this.personTupleId.constantId = constant.getId(); - - personA.getPersonATuples().add( this ); - personB.getPersonBTuples().add( this ); - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PersonTuple) ) { - return false; - } - - PersonTuple that = (PersonTuple) o; - - return personTupleId.equals( that.personTupleId ); - } - - @Override - public int hashCode() { - return personTupleId.hashCode(); - } - - @Override - public String toString() { - return "PersonTuple(id = " + personTupleId + ", helloWorld = " + helloWorld + ")"; - } - - public PersonTupleId getPersonTupleId() { - return personTupleId; - } - - public void setPersonTupleId(PersonTupleId personTupleId) { - this.personTupleId = personTupleId; - } - - public Person getPersonA() { - return personA; - } - - public void setPersonA(Person personA) { - this.personA = personA; - } - - public Person getPersonB() { - return personB; - } - - public void setPersonB(Person personB) { - this.personB = personB; - } - - public Constant getConstant() { - return constant; - } - - public void setConstant(Constant constant) { - this.constant = constant; - } - - public boolean isHelloWorld() { - return helloWorld; - } - - public void setHelloWorld(boolean helloWorld) { - this.helloWorld = helloWorld; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java deleted file mode 100644 index 8013c6874053..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.hierarchy; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6661") -public class HierarchyTest extends BaseEnversJPAFunctionalTestCase { - private Long parentId = null; - private Long child1Id = null; - private Long child2Id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Node.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Node parent = new Node( "parent", (Node) null ); - Node child1 = new Node( "child1", parent ); - Node child2 = new Node( "child2", parent ); - parent.getChildren().add( child1 ); - parent.getChildren().add( child2 ); - em.persist( parent ); - em.persist( child1 ); - em.persist( child2 ); - em.getTransaction().commit(); - - parentId = parent.getId(); - child1Id = child1.getId(); - child2Id = child2.getId(); - - // Revision 2 - em.getTransaction().begin(); - parent = em.find( Node.class, parent.getId() ); - parent.getChildren().get( 0 ).setData( "child1 modified" ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - child2 = em.find( Node.class, child2.getId() ); - em.remove( child2 ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Node.class, parentId ) ); - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Node.class, child1Id ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Node.class, child2Id ) ); - } - - @Test - public void testHistoryOfParentNode() { - Node parent = new Node( "parent", parentId ); - Node child1 = new Node( "child1", child1Id ); - Node child2 = new Node( "child2", child2Id ); - - Node ver1 = getAuditReader().find( Node.class, parentId, 1 ); - Assert.assertEquals( parent, ver1 ); - Assert.assertTrue( TestTools.checkCollection( ver1.getChildren(), child1, child2 ) ); - - child1.setData( "child1 modified" ); - - Node ver2 = getAuditReader().find( Node.class, parentId, 2 ); - Assert.assertEquals( parent, ver2 ); - Assert.assertTrue( TestTools.checkCollection( ver2.getChildren(), child1, child2 ) ); - - Node ver3 = getAuditReader().find( Node.class, parentId, 3 ); - Assert.assertEquals( parent, ver3 ); - Assert.assertTrue( TestTools.checkCollection( ver3.getChildren(), child1 ) ); - } - - @Test - public void testHistoryOfChild1Node() { - Node parent = new Node( "parent", parentId ); - Node child1 = new Node( "child1", child1Id ); - - Node ver1 = getAuditReader().find( Node.class, child1Id, 1 ); - Assert.assertEquals( child1, ver1 ); - Assert.assertEquals( parent.getId(), ver1.getParent().getId() ); - Assert.assertEquals( parent.getData(), ver1.getParent().getData() ); - - child1.setData( "child1 modified" ); - - Node ver2 = getAuditReader().find( Node.class, child1Id, 2 ); - Assert.assertEquals( child1, ver2 ); - Assert.assertEquals( parent.getId(), ver2.getParent().getId() ); - Assert.assertEquals( parent.getData(), ver2.getParent().getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/Node.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/Node.java deleted file mode 100644 index 9307c11b2044..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/Node.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.hierarchy; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "NODES") -@Audited -public class Node implements Serializable { - @Id - @GeneratedValue - private Long id; - - private String data; - - @ManyToOne(fetch = FetchType.LAZY, optional = true) - @AuditJoinTable(name = "NODES_JOIN_TABLE_AUD", - inverseJoinColumns = {@JoinColumn(name = "PARENT_ID", nullable = true, updatable = false)}) - @JoinTable(name = "NODES_JOIN_TABLE", - joinColumns = {@JoinColumn(name = "CHILD_ID", nullable = true, updatable = false)}, - inverseJoinColumns = {@JoinColumn(name = "PARENT_ID", nullable = true, updatable = false)}) - private Node parent; - - @OneToMany(mappedBy = "parent") - private List children = new ArrayList(); - - public Node() { - } - - public Node(String data, Node parent) { - this.data = data; - this.parent = parent; - } - - public Node(String data, Long id) { - this.id = id; - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Node) ) { - return false; - } - - Node node = (Node) o; - - if ( data != null ? !data.equals( node.data ) : node.data != null ) { - return false; - } - if ( id != null ? !id.equals( node.id ) : node.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Node(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Node getParent() { - return parent; - } - - public void setParent(Node parent) { - this.parent = parent; - } - - public List getChildren() { - return children; - } - - public void setChildren(List children) { - this.children = children; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToManyCompositeKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToManyCompositeKey.java deleted file mode 100644 index d97956ac28b5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToManyCompositeKey.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.idclass; - -import java.io.Serializable; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Chris Cranford - */ -@Audited -@Entity -@IdClass(ManyToManyCompositeKey.ManyToManyId.class) -public class ManyToManyCompositeKey { - @Id - @ManyToOne(fetch = FetchType.EAGER) - private OneToManyOwned oneToMany; - - @Id - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @ManyToOne(fetch = FetchType.EAGER) - private ManyToOneOwned manyToOne; - - public ManyToManyCompositeKey() { - - } - - public ManyToManyCompositeKey(OneToManyOwned oneToMany, ManyToOneOwned manyToOne) { - this.oneToMany = oneToMany; - this.manyToOne = manyToOne; - } - - public OneToManyOwned getOneToMany() { - return this.oneToMany; - } - - public ManyToOneOwned getManyToOne() { - return this.manyToOne; - } - - public ManyToManyId getId() { - return new ManyToManyId( oneToMany, manyToOne ); - } - - @Override - public int hashCode() { - int result = 0; - result = 31 * result + ( oneToMany != null ? oneToMany.hashCode() : 0 ); - result = 31 * result + ( manyToOne != null ? manyToOne.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if( this == obj ) { - return true; - } - if( !( obj instanceof ManyToManyCompositeKey ) ) { - return false; - } - - ManyToManyCompositeKey m = (ManyToManyCompositeKey) obj; - if ( oneToMany != null ? !oneToMany.equals( m.oneToMany ) : m.oneToMany != null ) { - return false; - } - if ( manyToOne != null ? !manyToOne.equals( m.manyToOne ) : m.manyToOne != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "ManyToManyCompositeKey(oneToMany = " + - oneToMany.toString() + - ", manyToOne = " + - manyToOne.toString() + - ")"; - } - - public static class ManyToManyId implements Serializable { - private OneToManyOwned oneToMany; - - private ManyToOneOwned manyToOne; - - ManyToManyId() { - } - - ManyToManyId(OneToManyOwned oneToMany, ManyToOneOwned manyToOne) { - this.oneToMany = oneToMany; - this.manyToOne = manyToOne; - } - - public OneToManyOwned getOneToMany() { - return this.oneToMany; - } - - public ManyToOneOwned getManyToOne() { - return this.manyToOne; - } - - @Override - public int hashCode() { - int result = 3; - result = 17 * result + ( oneToMany != null ? oneToMany.hashCode() : 0 ); - result = 17 * result + ( manyToOne != null ? manyToOne.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if( this == obj ) { - return true; - } - if( !( obj instanceof ManyToManyId ) ) { - return false; - } - - ManyToManyId m = (ManyToManyId) obj; - if ( oneToMany != null ? !oneToMany.equals( m.oneToMany ) : m.oneToMany != null ) { - return false; - } - if ( manyToOne != null ? !manyToOne.equals( m.manyToOne ) : m.manyToOne != null ) { - return false; - } - return true; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java deleted file mode 100644 index 08ac42fb5a55..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.idclass; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class ManyToOneOwned { - @Id - @GeneratedValue - private Long id; - - private String data; - - public ManyToOneOwned() { - - } - - public ManyToOneOwned(String data) { - this.data = data; - } - - public ManyToOneOwned(Long id, String data) { - this.id = id; - this.data = data; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof ManyToOneOwned ) ) { - return false; - } - - ManyToOneOwned that = (ManyToOneOwned) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int result = 3; - result = 11 * result + ( data != null ? data.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "ManyToOneOwned(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public String getData() { - return data; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java deleted file mode 100644 index 14ff4baca306..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.idclass; - -import java.util.Arrays; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-7625") -public class OneToManyCompositeKeyTest extends BaseEnversJPAFunctionalTestCase { - private ManyToManyCompositeKey.ManyToManyId owning1Id = null; - private ManyToManyCompositeKey.ManyToManyId owning2Id = null; - private Long oneToManyId; - private Long manyToOne1Id; - private Long manyToOne2Id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { OneToManyOwned.class, ManyToManyCompositeKey.class, ManyToOneOwned.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - OneToManyOwned oneToManyOwned = new OneToManyOwned( "data", null ); - ManyToOneOwned manyToOneOwned1 = new ManyToOneOwned( "data1" ); - ManyToOneOwned manyToOneOwned2 = new ManyToOneOwned( "data2" ); - ManyToManyCompositeKey owning1 = new ManyToManyCompositeKey( oneToManyOwned, manyToOneOwned1 ); - ManyToManyCompositeKey owning2 = new ManyToManyCompositeKey( oneToManyOwned, manyToOneOwned2 ); - - entityManager.persist(oneToManyOwned); - entityManager.persist(manyToOneOwned1); - entityManager.persist(manyToOneOwned2); - entityManager.persist( owning1 ); - entityManager.persist( owning2 ); - - owning1Id = owning1.getId(); - owning2Id = owning2.getId(); - - oneToManyId = oneToManyOwned.getId(); - manyToOne1Id = manyToOneOwned1.getId(); - manyToOne2Id = manyToOneOwned2.getId(); - } ); - - // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - ManyToManyCompositeKey owning1 = entityManager.find( ManyToManyCompositeKey.class, owning1Id ); - entityManager.remove( owning1 ); - } ); - - // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - ManyToManyCompositeKey owning2 = entityManager.find( ManyToManyCompositeKey.class, owning2Id ); - entityManager.remove( owning2 ); - } ); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ManyToManyCompositeKey.class, owning1Id ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( ManyToManyCompositeKey.class, owning2Id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( OneToManyOwned.class, oneToManyId ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( ManyToOneOwned.class, manyToOne1Id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( ManyToOneOwned.class, manyToOne2Id ) ); - } - - @Test - public void testOneToManyHistory() { - final OneToManyOwned rev1 = getAuditReader().find( OneToManyOwned.class, oneToManyId, 1 ); - assertEquals( "data", rev1.getData() ); - assertEquals( 2, rev1.getManyToManyCompositeKeys().size() ); - } - - @Test - public void testManyToOne1History() { - final ManyToOneOwned rev1 = getAuditReader().find( ManyToOneOwned.class, manyToOne1Id, 1 ); - assertEquals( "data1", rev1.getData() ); - } - - @Test - public void testManyToOne2History() { - final ManyToOneOwned rev1 = getAuditReader().find( ManyToOneOwned.class, manyToOne2Id, 1 ); - assertEquals( "data2", rev1.getData() ); - } - - @Test - public void testOwning1History() { - // objects - final OneToManyOwned oneToMany = new OneToManyOwned( 1L, "data", null ); - final ManyToOneOwned manyToOne = new ManyToOneOwned( 2L, "data1" ); - - // insert revision - final ManyToManyCompositeKey rev1 = getAuditReader().find( ManyToManyCompositeKey.class, owning1Id, 1 ); - assertEquals( rev1.getOneToMany(), oneToMany ); - assertEquals( rev1.getManyToOne(), manyToOne ); - - // removal revision - find returns null for deleted - assertNull( getAuditReader().find( ManyToManyCompositeKey.class, owning1Id, 2 ) ); - - // fetch revision 2 using 'select deletions' api and verify. - final ManyToManyCompositeKey rev2 = (ManyToManyCompositeKey) getAuditReader() - .createQuery() - .forRevisionsOfEntity( ManyToManyCompositeKey.class, true, true ) - .add( AuditEntity.id().eq( owning1Id ) ) - .add( AuditEntity.revisionNumber().eq( 2 ) ) - .getSingleResult(); - assertEquals( rev2.getOneToMany(), oneToMany ); - assertEquals( rev2.getManyToOne(), manyToOne ); - } - - @Test - public void testOwning2History() { - // objects - final OneToManyOwned oneToMany = new OneToManyOwned( 1L, "data", null ); - final ManyToOneOwned manyToOne = new ManyToOneOwned( 3L, "data2" ); - - // insert revision - final ManyToManyCompositeKey rev1 = getAuditReader().find( ManyToManyCompositeKey.class, owning2Id, 1 ); - assertEquals( rev1.getOneToMany(), oneToMany ); - assertEquals( rev1.getManyToOne(), manyToOne ); - - // removal revision - find returns null for deleted - assertNull( getAuditReader().find( ManyToManyCompositeKey.class, owning2Id, 3 ) ); - - // fetch revision 3 using 'select deletions' api and verify. - final ManyToManyCompositeKey rev2 = (ManyToManyCompositeKey) getAuditReader() - .createQuery() - .forRevisionsOfEntity( ManyToManyCompositeKey.class, true, true ) - .add( AuditEntity.id().eq( owning2Id ) ) - .add( AuditEntity.revisionNumber().eq( 3 ) ) - .getSingleResult(); - assertEquals( rev2.getOneToMany(), oneToMany ); - assertEquals( rev2.getManyToOne(), manyToOne ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java deleted file mode 100644 index fc7078461145..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.idclass; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class OneToManyOwned { - @Id - @GeneratedValue - private Long id; - - private String data; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "oneToMany") - private List manyToManyCompositeKeys; - - public OneToManyOwned() { - - } - - public OneToManyOwned(String data, List manyToManyCompositeKeys) { - this.data = data; - this.manyToManyCompositeKeys = manyToManyCompositeKeys; - } - - public OneToManyOwned(Long id, String data, List manyToManyCompositeKeys) { - this.id = id; - this.data = data; - this.manyToManyCompositeKeys = manyToManyCompositeKeys; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !( o instanceof OneToManyOwned ) ) { - return false; - } - - OneToManyOwned that = (OneToManyOwned) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int result = 3; - result = 7 * result + ( data != null ? data.hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "OneToManyOwned(id = " + id + ", data = " + data + ")"; - } - - public Long getId() { - return id; - } - - public String getData() { - return data; - } - - public List getManyToManyCompositeKeys() { - return manyToManyCompositeKeys; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSubclass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSubclass.java deleted file mode 100644 index 63e870c3d0d4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSubclass.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.inverseToSuperclass; - -import org.hibernate.envers.Audited; - -@Audited -public class DetailSubclass extends DetailSuperclass { - - private String str2; - - public DetailSubclass() { - - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSubclass2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSubclass2.java deleted file mode 100644 index 48ccf8eb5898..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSubclass2.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.inverseToSuperclass; - -import org.hibernate.envers.Audited; - -@Audited -public class DetailSubclass2 extends DetailSubclass { - - private String str3; - - public DetailSubclass2() { - - } - - public String getStr3() { - return str3; - } - - public void setStr3(String str3) { - this.str3 = str3; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSuperclass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSuperclass.java deleted file mode 100644 index 38c0dd74e23f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/DetailSuperclass.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.inverseToSuperclass; - -import org.hibernate.envers.Audited; - -@Audited -public class DetailSuperclass { - - private long id; - - private Root parent; - - public DetailSuperclass() { - - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public Root getParent() { - return parent; - } - - public void setParent(Root parent) { - this.parent = parent; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java deleted file mode 100644 index f52636efe6b1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.inverseToSuperclass; - -import java.util.ArrayList; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Hern�n Chanfreau - */ - -public class OneToManyInverseToSuperclassTest extends BaseEnversJPAFunctionalTestCase { - - private long m1_id; - - @Override - protected String[] getMappings() { - return new String[] {"mappings/oneToMany/inverseToSuperclass/mappings.hbm.xml"}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - Root m1 = new Root(); - DetailSubclass det1 = new DetailSubclass2(); - DetailSubclass det2 = new DetailSubclass2(); - - // Revision 1 - em.getTransaction().begin(); - - det1.setStr2( "detail 1" ); - - m1.setStr( "root" ); - m1.setItems( new ArrayList() ); - m1.getItems().add( det1 ); - det1.setParent( m1 ); - - em.persist( m1 ); - em.getTransaction().commit(); - m1_id = m1.getId(); - - // Revision 2 - em.getTransaction().begin(); - - m1 = em.find( Root.class, m1_id ); - - det2.setStr2( "detail 2" ); - det2.setParent( m1 ); - m1.getItems().add( det2 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - m1 = em.find( Root.class, m1_id ); - m1.setStr( "new root" ); - - det1 = m1.getItems().get( 0 ); - det1.setStr2( "new detail" ); - DetailSubclass det3 = new DetailSubclass2(); - det3.setStr2( "detail 3" ); - det3.setParent( m1 ); - - m1.getItems().get( 1 ).setParent( null ); - // m1.getItems().remove(1); - m1.getItems().add( det3 ); - - em.persist( m1 ); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - m1 = em.find( Root.class, m1_id ); - - det1 = m1.getItems().get( 0 ); - det1.setParent( null ); - // m1.getItems().remove(det1); - - em.persist( m1 ); - em.getTransaction().commit(); - - } - - @Test - public void testHistoryExists() { - Root rev1_1 = getAuditReader().find( Root.class, m1_id, 1 ); - Root rev1_2 = getAuditReader().find( Root.class, m1_id, 2 ); - Root rev1_3 = getAuditReader().find( Root.class, m1_id, 3 ); - Root rev1_4 = getAuditReader().find( Root.class, m1_id, 4 ); - - assert (rev1_1 != null); - assert (rev1_2 != null); - assert (rev1_3 != null); - assert (rev1_4 != null); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/Root.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/Root.java deleted file mode 100644 index c0d5bf6b915e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/Root.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.inverseToSuperclass; - -import java.util.List; - -import org.hibernate.envers.Audited; - -@Audited -public class Root { - - private long id; - - private String str; - - private List items; - - public Root() { - - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java deleted file mode 100644 index ba2bbdb52573..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.relatedid; - -import java.util.List; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8070") -public class AuditRelatedIdInTest extends BaseEnversJPAFunctionalTestCase { - private Integer company1Id; - private Integer company2Id; - private Integer company3Id; - private Integer employee1Id; - private Integer employee2Id; - private Integer employee3Id; - private Integer employee4Id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ - Company.class, - Employee.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // Revision 1 - Company company1 = new Company( "COMPANY1" ); - Company company2 = new Company( "COMPANY2" ); - Employee employee1 = new Employee( "Employee1", company1 ); - Employee employee2 = new Employee( "Employee2", company2 ); - Employee employee3 = new Employee( "Employee3", company2 ); - em.getTransaction().begin(); - em.persist( company1 ); - em.persist( company2 ); - em.persist( employee1 ); - em.persist( employee2 ); - em.persist( employee3 ); - em.getTransaction().commit(); - - // cache ids - company1Id = company1.getId(); - company2Id = company2.getId(); - employee1Id = employee1.getId(); - employee2Id = employee2.getId(); - employee3Id = employee3.getId(); - - // Revision 2 - em.getTransaction().begin(); - employee2 = em.find( Employee.class, employee2.getId() ); - employee2.setCompany( company1 ); - company2 = em.find( Company.class, company2.getId() ); - company2.setName( "COMPANY2-CHANGED" ); - em.merge( employee2 ); - em.merge( company2 ); - em.getTransaction().commit(); - - // Revision 3 - Company company3 = new Company( "COMPANY3" ); - Employee employee4 = new Employee( "Employee4", company3 ); - em.getTransaction().begin(); - em.persist( company3 ); - em.persist( employee4 ); - em.getTransaction().commit(); - - // cache ids - employee4Id = employee4.getId(); - company3Id = company3.getId(); - } - finally { - em.close(); - } - } - - @Test - public void testRevisionCounts() { - // companies - assertEquals( 1, getAuditReader().getRevisions( Company.class, company1Id ).size() ); - assertEquals( 2, getAuditReader().getRevisions( Company.class, company2Id ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Company.class, company3Id ).size() ); - // employees - assertEquals( 1, getAuditReader().getRevisions( Employee.class, employee1Id ).size() ); - assertEquals( 2, getAuditReader().getRevisions( Employee.class, employee2Id ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Employee.class, employee3Id ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Employee.class, employee4Id ).size() ); - } - - @Test - public void testCompany1EmployeeIn() { - AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); - auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company1Id } ) ); - final List results = auditQuery.getResultList(); - assertEquals( 2, results.size() ); - final Employee employee1 = makeEmployee( employee1Id, "Employee1", company1Id, "COMPANY1" ); - final Employee employee2 = makeEmployee( employee2Id, "Employee2", company1Id, "COMPANY1" ); - assertThat( results.contains( employee1 ), is(true) ); - assertThat( results.contains( employee2 ), is(true) ); - } - - @Test - public void testCompany2EmployeeIn() { - AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); - auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company2Id } ) ); - final List results = auditQuery.getResultList(); - assertEquals( 2, results.size() ); - - final Employee employee1 = makeEmployee( employee2Id, "Employee2", company2Id, "COMPANY2" ); - final Employee employee2 = makeEmployee( employee3Id, "Employee3", company2Id, "COMPANY2" ); - assertThat( results.contains( employee1 ), is(true) ); - assertThat( results.contains( employee2 ), is(true) ); - } - - @Test - public void testCompany3EmployeeIn() { - AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); - auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company3Id } ) ); - final List results = auditQuery.getResultList(); - assertEquals( 1, results.size() ); - final Employee employee = makeEmployee( employee4Id, "Employee4", company3Id, "COMPANY3" ); - assertEquals( results, TestTools.makeList( employee ) ); - } - - private Employee makeEmployee(Integer employeeId, String employeeName, Integer companyId, String companyName) { - return new Employee( employeeId, employeeName, new Company( companyId, companyName ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/Company.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/Company.java deleted file mode 100644 index 85d372e41ca8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/Company.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.relatedid; - -import java.util.ArrayList; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Company { - @Id - @GeneratedValue - private Integer id; - private String name; - @OneToMany - private List employees = new ArrayList(); - - Company() { - - } - - public Company(String name) { - this.name = name; - } - - public Company(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getEmployees() { - return employees; - } - - public void setEmployees(List employees) { - this.employees = employees; - } - - @Override - public int hashCode() { - int result; - result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( !( object instanceof Company) ) { - return false; - } - Company that = (Company) object; - if ( getId() != null ? !getId().equals( that.getId() ) : that.getId() != null ) { - return false; - } - if ( getName() != null ? !getName().equals( that.getName() ) : that.getName() != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "Company{" + - "id=" + id + - ", name='" + name + '\'' + '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/Employee.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/Employee.java deleted file mode 100644 index 0f69a166acc6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/Employee.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetomany.relatedid; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Employee { - @Id - @GeneratedValue - private Integer id; - private String name; - @ManyToOne - private Company company; - - Employee() { - - } - - public Employee(String name, Company company) { - this( null, name, company ); - } - - public Employee(Integer id, String name, Company company) { - this.id = id; - this.name = name; - this.company = company; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Company getCompany() { - return company; - } - - public void setCompany(Company company) { - this.company = company; - } - - @Override - public int hashCode() { - int result; - result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( company != null ? company.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( !( object instanceof Employee) ) { - return false; - } - Employee that = (Employee) object; - if ( getId() != null ? !getId().equals( that.getId() ) : that.getId() != null ) { - return false; - } - if ( getName() != null ? !getName().equals( that.getName() ) : that.getName() != null ) { - return false; - } - if ( getCompany() != null ? !getCompany().equals( that.getCompany() ) : that.getCompany() != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "Employee{" + - "id=" + id + - ", name='" + name + '\'' + - ", company=" + company + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefEdEntity.java deleted file mode 100644 index 217104ee8b56..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefEdEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BiRefEdEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToOne(mappedBy = "reference") - private BiRefIngEntity referencing; - - public BiRefEdEntity() { - } - - public BiRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public BiRefEdEntity(Integer id, String data, BiRefIngEntity referencing) { - this.id = id; - this.data = data; - this.referencing = referencing; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BiRefIngEntity getReferencing() { - return referencing; - } - - public void setReferencing(BiRefIngEntity referencing) { - this.referencing = referencing; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BiRefEdEntity) ) { - return false; - } - - BiRefEdEntity that = (BiRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefIngEntity.java deleted file mode 100644 index fdfa19842d9a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefIngEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BiRefIngEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne - private BiRefEdEntity reference; - - public BiRefIngEntity() { - } - - public BiRefIngEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public BiRefIngEntity(Integer id, String data, BiRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BiRefEdEntity getReference() { - return reference; - } - - public void setReference(BiRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BiRefIngEntity) ) { - return false; - } - - BiRefIngEntity that = (BiRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefedOptionalEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefedOptionalEntity.java deleted file mode 100644 index 19a017209fc5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefedOptionalEntity.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class BiRefedOptionalEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToOne(mappedBy = "reference", optional = true) - private BiRefingOptionalEntity referencing; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public BiRefingOptionalEntity getReferencing() { - return referencing; - } - - public void setReferencing(BiRefingOptionalEntity referencing) { - this.referencing = referencing; - } - - @Override - public int hashCode() { - return ( id != null ? id.hashCode() : 0 ); - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( !( object instanceof BiRefedOptionalEntity ) ) { - return false; - } - BiRefedOptionalEntity that = (BiRefedOptionalEntity) object; - return !( id != null ? !id.equals( that.id ) : that.id != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefingOptionalEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefingOptionalEntity.java deleted file mode 100644 index 899c12668ca7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BiRefingOptionalEntity.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class BiRefingOptionalEntity { - @Id - @GeneratedValue - private Integer id; - - @OneToOne(optional = true) - @JoinTable(name = "A_B", joinColumns = @JoinColumn(name = "a_id", unique = true), inverseJoinColumns = @JoinColumn(name = "b_id") ) - private BiRefedOptionalEntity reference; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public BiRefedOptionalEntity getReference() { - return reference; - } - - public void setReference(BiRefedOptionalEntity reference) { - this.reference = reference; - } - - @Override - public int hashCode() { - return ( id != null ? id.hashCode() : 0 ); - } - - @Override - public boolean equals(Object object) { - if ( object == this ) { - return true; - } - if ( !( object instanceof BiRefingOptionalEntity ) ) { - return false; - } - BiRefingOptionalEntity that = (BiRefingOptionalEntity) object; - return !( id != null ? !id.equals( that.id ) : that.id != null ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java deleted file mode 100644 index d31a2bc20f99..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Bidirectional extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); - BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); - - BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing1_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 2 ); - - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing() == null; - } - - @Test - public void testHistoryOfEdId2() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java deleted file mode 100644 index 5856c76d669b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Bidirectional2 extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); - BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); - - BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); - BiRefIngEntity ing2 = new BiRefIngEntity( 4, "data_ing_2" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - - ing1.setReference( ed1 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ing1.setReference( null ); - ing2.setReference( ed1 ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ing1.setReference( ed2 ); - ing2.setReference( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 4 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 2, 3, 4 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 2, 3, 4 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - BiRefIngEntity ing2 = getEntityManager().find( BiRefIngEntity.class, ing2_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 2 ); - BiRefEdEntity rev3 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 3 ); - BiRefEdEntity rev4 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 4 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); - assert rev3.getReferencing().equals( ing2 ); - assert rev4.getReferencing() == null; - } - - @Test - public void testHistoryOfEdId2() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - BiRefEdEntity rev3 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 3 ); - BiRefEdEntity rev4 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 4 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing() == null; - assert rev3.getReferencing() == null; - assert rev4.getReferencing().equals( ing1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java deleted file mode 100644 index de3d4deba870..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerAnnotationRefEdOneToOne; -import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerAnnotationRefIngOneToOne; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -/** - * @author Erik-Berndt Scheper - */ -@JiraKey(value = "HHH-3854") -public class BidirectionalEagerAnnotationTest extends BaseEnversJPAFunctionalTestCase { - private Integer refIngId1 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - BidirectionalEagerAnnotationRefEdOneToOne.class, - BidirectionalEagerAnnotationRefIngOneToOne.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - BidirectionalEagerAnnotationRefEdOneToOne ed1 = new BidirectionalEagerAnnotationRefEdOneToOne(); - BidirectionalEagerAnnotationRefIngOneToOne ing1 = new BidirectionalEagerAnnotationRefIngOneToOne(); - ed1.setData( "referredEntity1" ); - ed1.setRefIng( ing1 ); - ing1.setData( "referringEntity" ); - ing1.setRefedOne( ed1 ); - em.persist( ed1 ); - em.persist( ing1 ); - em.getTransaction().commit(); - - refIngId1 = ing1.getId(); - - em.close(); - } - - @Test - public void testNonProxyObjectTraversing() { - BidirectionalEagerAnnotationRefIngOneToOne referencing = - getAuditReader().find( BidirectionalEagerAnnotationRefIngOneToOne.class, refIngId1, 1 ); - assertNotNull( referencing.getRefedOne().getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java deleted file mode 100644 index 6ae59ee62046..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerHbmRefEdPK; -import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerHbmRefIngPK; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertNotNull; - -/** - * @author Erik-Berndt Scheper, Amar Singh - */ -@JiraKey(value = "HHH-3854") -public class BidirectionalEagerHbmTest extends BaseEnversJPAFunctionalTestCase { - private Long refIngId1 = null; - - @Override - protected String[] getMappings() { - return new String[] {"mappings/oneToOne/bidirectional/eagerLoading.hbm.xml"}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - BidirectionalEagerHbmRefEdPK ed1 = new BidirectionalEagerHbmRefEdPK( "data_ed_1" ); - BidirectionalEagerHbmRefIngPK ing1 = new BidirectionalEagerHbmRefIngPK( "data_ing_1" ); - ing1.setReference( ed1 ); - em.persist( ed1 ); - em.persist( ing1 ); - em.getTransaction().commit(); - - refIngId1 = ing1.getId(); - - em.close(); - } - - @Test - public void testNonProxyObjectTraversing() { - BidirectionalEagerHbmRefIngPK referencing = - getAuditReader().find( BidirectionalEagerHbmRefIngPK.class, refIngId1, 1 ); - assertNotNull( referencing.getReference().getData() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java deleted file mode 100644 index a1a8d33aaf1e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BidirectionalNoNulls extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); - BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); - - BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); - BiRefIngEntity ing2 = new BiRefIngEntity( 4, "data_ing_2" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - ing2.setReference( ed2 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - ing2.setReference( ed1 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - BiRefIngEntity ing2 = getEntityManager().find( BiRefIngEntity.class, ing2_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 2 ); - - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing().equals( ing2 ); - } - - @Test - public void testHistoryOfEdId2() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - BiRefIngEntity ing2 = getEntityManager().find( BiRefIngEntity.class, ing2_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - - assert rev1.getReferencing().equals( ing2 ); - assert rev2.getReferencing().equals( ing1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java deleted file mode 100644 index bd0046a23088..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BiEmbIdRefEdEntity { - @EmbeddedId - private EmbId id; - - @Audited - private String data; - - @Audited - @OneToOne(mappedBy = "reference") - private BiEmbIdRefIngEntity referencing; - - public BiEmbIdRefEdEntity() { - } - - public BiEmbIdRefEdEntity(EmbId id, String data) { - this.id = id; - this.data = data; - } - - public BiEmbIdRefEdEntity(EmbId id, String data, BiEmbIdRefIngEntity referencing) { - this.id = id; - this.data = data; - this.referencing = referencing; - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BiEmbIdRefIngEntity getReferencing() { - return referencing; - } - - public void setReferencing(BiEmbIdRefIngEntity referencing) { - this.referencing = referencing; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BiEmbIdRefEdEntity) ) { - return false; - } - - BiEmbIdRefEdEntity that = (BiEmbIdRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java deleted file mode 100644 index 9b0814abd23f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; - -import jakarta.persistence.EmbeddedId; -import jakarta.persistence.Entity; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class BiEmbIdRefIngEntity { - @EmbeddedId - private EmbId id; - - @Audited - private String data; - - @Audited - @OneToOne - private BiEmbIdRefEdEntity reference; - - public BiEmbIdRefIngEntity() { - } - - public BiEmbIdRefIngEntity(EmbId id, String data) { - this.id = id; - this.data = data; - } - - public BiEmbIdRefIngEntity(EmbId id, String data, BiEmbIdRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BiEmbIdRefEdEntity getReference() { - return reference; - } - - public void setReference(BiEmbIdRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BiEmbIdRefIngEntity) ) { - return false; - } - - BiEmbIdRefIngEntity that = (BiEmbIdRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java deleted file mode 100644 index 36c07242799d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@IdClass(MulId.class) -public class BiMulIdRefEdEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @OneToOne(mappedBy = "reference") - private BiMulIdRefIngEntity referencing; - - public BiMulIdRefEdEntity() { - } - - public BiMulIdRefEdEntity(Integer id1, Integer id2, String data) { - this.id1 = id1; - this.id2 = id2; - this.data = data; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BiMulIdRefIngEntity getReferencing() { - return referencing; - } - - public void setReferencing(BiMulIdRefIngEntity referencing) { - this.referencing = referencing; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BiMulIdRefEdEntity) ) { - return false; - } - - BiMulIdRefEdEntity that = (BiMulIdRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java deleted file mode 100644 index 798258d32c21..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@IdClass(MulId.class) -public class BiMulIdRefIngEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - @Audited - private String data; - - @Audited - @OneToOne - private BiMulIdRefEdEntity reference; - - public BiMulIdRefIngEntity() { - } - - public BiMulIdRefIngEntity(Integer id1, Integer id2, String data) { - this.id1 = id1; - this.id2 = id2; - this.data = data; - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public BiMulIdRefEdEntity getReference() { - return reference; - } - - public void setReference(BiMulIdRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BiMulIdRefIngEntity) ) { - return false; - } - - BiMulIdRefIngEntity that = (BiMulIdRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java deleted file mode 100644 index 01264d4d4b10..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class EmbIdBidirectional extends BaseEnversJPAFunctionalTestCase { - private EmbId ed1_id; - private EmbId ed2_id; - - private EmbId ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiEmbIdRefEdEntity.class, BiEmbIdRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ed1_id = new EmbId( 1, 2 ); - ed2_id = new EmbId( 3, 4 ); - - ing1_id = new EmbId( 5, 6 ); - - BiEmbIdRefEdEntity ed1 = new BiEmbIdRefEdEntity( ed1_id, "data_ed_1" ); - BiEmbIdRefEdEntity ed2 = new BiEmbIdRefEdEntity( ed2_id, "data_ed_2" ); - - BiEmbIdRefIngEntity ing1 = new BiEmbIdRefIngEntity( ing1_id, "data_ing_1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiEmbIdRefIngEntity.class, ing1.getId() ); - ed2 = em.find( BiEmbIdRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiEmbIdRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiEmbIdRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiEmbIdRefIngEntity.class, ing1_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - BiEmbIdRefIngEntity ing1 = getEntityManager().find( BiEmbIdRefIngEntity.class, ing1_id ); - - BiEmbIdRefEdEntity rev1 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed1_id, 1 ); - BiEmbIdRefEdEntity rev2 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed1_id, 2 ); - - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing() == null; - } - - @Test - public void testHistoryOfEdId2() { - BiEmbIdRefIngEntity ing1 = getEntityManager().find( BiEmbIdRefIngEntity.class, ing1_id ); - - BiEmbIdRefEdEntity rev1 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed2_id, 1 ); - BiEmbIdRefEdEntity rev2 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed2_id, 2 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); - } - - @Test - public void testHistoryOfIngId1() { - BiEmbIdRefEdEntity ed1 = getEntityManager().find( BiEmbIdRefEdEntity.class, ed1_id ); - BiEmbIdRefEdEntity ed2 = getEntityManager().find( BiEmbIdRefEdEntity.class, ed2_id ); - - BiEmbIdRefIngEntity rev1 = getAuditReader().find( BiEmbIdRefIngEntity.class, ing1_id, 1 ); - BiEmbIdRefIngEntity rev2 = getAuditReader().find( BiEmbIdRefIngEntity.class, ing1_id, 2 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java deleted file mode 100644 index 285c21a7bbf4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MulIdBidirectional extends BaseEnversJPAFunctionalTestCase { - private MulId ed1_id; - private MulId ed2_id; - - private MulId ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiMulIdRefEdEntity.class, BiMulIdRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ed1_id = new MulId( 1, 2 ); - ed2_id = new MulId( 3, 4 ); - - ing1_id = new MulId( 5, 6 ); - - BiMulIdRefEdEntity ed1 = new BiMulIdRefEdEntity( ed1_id.getId1(), ed1_id.getId2(), "data_ed_1" ); - BiMulIdRefEdEntity ed2 = new BiMulIdRefEdEntity( ed2_id.getId1(), ed2_id.getId2(), "data_ed_2" ); - - BiMulIdRefIngEntity ing1 = new BiMulIdRefIngEntity( ing1_id.getId1(), ing1_id.getId2(), "data_ing_1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiMulIdRefIngEntity.class, ing1_id ); - ed2 = em.find( BiMulIdRefEdEntity.class, ed2_id ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiMulIdRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiMulIdRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiMulIdRefIngEntity.class, ing1_id ) ); - } - - @Test - public void testHistoryOfEdId1() { - BiMulIdRefIngEntity ing1 = getEntityManager().find( BiMulIdRefIngEntity.class, ing1_id ); - - BiMulIdRefEdEntity rev1 = getAuditReader().find( BiMulIdRefEdEntity.class, ed1_id, 1 ); - BiMulIdRefEdEntity rev2 = getAuditReader().find( BiMulIdRefEdEntity.class, ed1_id, 2 ); - - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing() == null; - } - - @Test - public void testHistoryOfEdId2() { - BiMulIdRefIngEntity ing1 = getEntityManager().find( BiMulIdRefIngEntity.class, ing1_id ); - - BiMulIdRefEdEntity rev1 = getAuditReader().find( BiMulIdRefEdEntity.class, ed2_id, 1 ); - BiMulIdRefEdEntity rev2 = getAuditReader().find( BiMulIdRefEdEntity.class, ed2_id, 2 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); - } - - @Test - public void testHistoryOfIngId1() { - BiMulIdRefEdEntity ed1 = getEntityManager().find( BiMulIdRefEdEntity.class, ed1_id ); - BiMulIdRefEdEntity ed2 = getEntityManager().find( BiMulIdRefEdEntity.class, ed2_id ); - - BiMulIdRefIngEntity rev1 = getAuditReader().find( BiMulIdRefIngEntity.class, ing1_id, 1 ); - BiMulIdRefIngEntity rev2 = getAuditReader().find( BiMulIdRefIngEntity.class, ing1_id, 2 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/Account.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/Account.java deleted file mode 100644 index 315e11ca87cd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/Account.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.primarykeyjoincolumn; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; -import jakarta.persistence.PrimaryKeyJoinColumn; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Account implements Serializable { - @Id - @Column(name = "ACCOUNT_ID") - @GeneratedValue(generator = "AccountForeignKeyGenerator") - @GenericGenerator(name = "AccountForeignKeyGenerator", strategy = "foreign", - parameters = {@Parameter(name = "property", value = "owner")}) - private Long accountId; - - private String type; - - @OneToOne(optional = false) - @PrimaryKeyJoinColumn(name = "ACCOUNT_ID", referencedColumnName = "PERSON_ID") - private Person owner; - - public Account() { - } - - public Account(String type) { - this.type = type; - } - - public Account(Long accountId, String type) { - this.accountId = accountId; - this.type = type; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Account) ) { - return false; - } - - Account account = (Account) o; - - if ( accountId != null ? !accountId.equals( account.accountId ) : account.accountId != null ) { - return false; - } - if ( type != null ? !type.equals( account.type ) : account.type != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = accountId != null ? accountId.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Account(accountId = " + accountId + ", type = " + type + ")"; - } - - public Long getAccountId() { - return accountId; - } - - public void setAccountId(Long accountId) { - this.accountId = accountId; - } - - public Person getOwner() { - return owner; - } - - public void setOwner(Person owner) { - this.owner = owner; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/AccountNotAuditedOwners.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/AccountNotAuditedOwners.java deleted file mode 100644 index ada37247d71a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/AccountNotAuditedOwners.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.primarykeyjoincolumn; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class AccountNotAuditedOwners implements Serializable { - @Id - @Column(name = "ACCOUNT_ID") - @GeneratedValue - private Long accountId; - - private String type; - - @OneToOne(mappedBy = "account", optional = false, fetch = FetchType.LAZY) - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private NotAuditedPerson owner; - - public AccountNotAuditedOwners() { - } - - public AccountNotAuditedOwners(String type) { - this.type = type; - } - - public AccountNotAuditedOwners(Long accountId, String type) { - this.accountId = accountId; - this.type = type; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AccountNotAuditedOwners) ) { - return false; - } - - AccountNotAuditedOwners account = (AccountNotAuditedOwners) o; - - if ( accountId != null ? !accountId.equals( account.accountId ) : account.accountId != null ) { - return false; - } - if ( type != null ? !type.equals( account.type ) : account.type != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = accountId != null ? accountId.hashCode() : 0; - result = 31 * result + (type != null ? type.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "AccountNotAuditedOwners(accountId = " + accountId + ", type = " + type + ")"; - } - - public Long getAccountId() { - return accountId; - } - - public void setAccountId(Long accountId) { - this.accountId = accountId; - } - - public NotAuditedPerson getOwner() { - return owner; - } - - public void setOwner(NotAuditedPerson owner) { - this.owner = owner; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/NotAuditedNoProxyPerson.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/NotAuditedNoProxyPerson.java deleted file mode 100644 index b314be774e71..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/NotAuditedNoProxyPerson.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.primarykeyjoincolumn; - -import java.io.Serializable; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; -import jakarta.persistence.PrimaryKeyJoinColumn; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class NotAuditedNoProxyPerson implements Serializable { - @Id - @Column(name = "PERSON_ID") - @GeneratedValue(generator = "NotAuditedNoProxyKeyGenerator") - @GenericGenerator(name = "NotAuditedNoProxyKeyGenerator", strategy = "foreign", - parameters = {@Parameter(name = "property", value = "account")}) - private Long personId; - - private String name; - - @OneToOne(optional = false) - @PrimaryKeyJoinColumn(name = "PERSON_ID", referencedColumnName = "ACCOUNT_ID") - private AccountNotAuditedOwners account; - - public NotAuditedNoProxyPerson() { - } - - public NotAuditedNoProxyPerson(String name) { - this.name = name; - } - - public NotAuditedNoProxyPerson(Long personId, String name) { - this.personId = personId; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotAuditedNoProxyPerson) ) { - return false; - } - - NotAuditedNoProxyPerson person = (NotAuditedNoProxyPerson) o; - - if ( personId != null ? !personId.equals( person.personId ) : person.personId != null ) { - return false; - } - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = personId != null ? personId.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "NotAuditedNoProxyPerson(personId = " + personId + ", name = " + name + ")"; - } - - public Long getPersonId() { - return personId; - } - - public void setPersonId(Long personId) { - this.personId = personId; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AccountNotAuditedOwners getAccount() { - return account; - } - - public void setAccount(AccountNotAuditedOwners account) { - this.account = account; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/NotAuditedPerson.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/NotAuditedPerson.java deleted file mode 100644 index 64593ade4150..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/NotAuditedPerson.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.primarykeyjoincolumn; - -import java.io.Serializable; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; -import jakarta.persistence.PrimaryKeyJoinColumn; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class NotAuditedPerson implements Serializable { - @Id - @Column(name = "PERSON_ID") - @GeneratedValue(generator = "NotAuditedProxyKeyGenerator") - @GenericGenerator(name = "NotAuditedProxyKeyGenerator", strategy = "foreign", - parameters = {@Parameter(name = "property", value = "account")}) - private Long personId; - - private String name; - - @OneToOne(optional = false, fetch = FetchType.LAZY) - @PrimaryKeyJoinColumn(name = "PERSON_ID", referencedColumnName = "ACCOUNT_ID") - private AccountNotAuditedOwners account; - - public NotAuditedPerson() { - } - - public NotAuditedPerson(String name) { - this.name = name; - } - - public NotAuditedPerson(Long personId, String name) { - this.personId = personId; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotAuditedPerson ) ) { - return false; - } - - NotAuditedPerson person = (NotAuditedPerson) o; - - if ( personId != null ? !personId.equals( person.personId ) : person.personId != null ) { - return false; - } - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = personId != null ? personId.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "NotAuditedProxyPerson(personId = " + personId + ", name = " + name + ")"; - } - - public Long getPersonId() { - return personId; - } - - public void setPersonId(Long personId) { - this.personId = personId; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AccountNotAuditedOwners getAccount() { - return account; - } - - public void setAccount(AccountNotAuditedOwners account) { - this.account = account; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java deleted file mode 100644 index bcb797eb8899..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.primarykeyjoincolumn; - -import java.util.Arrays; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.proxy.HibernateProxy; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -import jakarta.persistence.EntityManager; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6825") -public class OneToOneWithPrimaryKeyJoinTest extends BaseEnversJPAFunctionalTestCase { - private Long personId = null; - private Long accountId = null; - private Long proxyPersonId = null; - private Long accountNotAuditedOwnersId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Person.class, - Account.class, - AccountNotAuditedOwners.class, - NotAuditedPerson.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Person person = new Person( "Robert" ); - Account account = new Account( "Saving" ); - person.setAccount( account ); - account.setOwner( person ); - em.persist( person ); - em.persist( account ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - NotAuditedPerson proxyPerson = new NotAuditedPerson( "Lukasz" ); - AccountNotAuditedOwners accountNotAuditedOwners = new AccountNotAuditedOwners( "Standard" ); - proxyPerson.setAccount( accountNotAuditedOwners ); - accountNotAuditedOwners.setOwner( proxyPerson ); - em.persist( accountNotAuditedOwners ); - em.persist( proxyPerson ); - em.getTransaction().commit(); - - personId = person.getPersonId(); - accountId = account.getAccountId(); - accountNotAuditedOwnersId = accountNotAuditedOwners.getAccountId(); - proxyPersonId = proxyPerson.getPersonId(); - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, personId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Account.class, accountId ) ); - Assert.assertEquals( - Arrays.asList( 2 ), getAuditReader().getRevisions( - AccountNotAuditedOwners.class, - accountNotAuditedOwnersId - ) - ); - } - - @Test - public void testHistoryOfPerson() { - Person personVer1 = new Person( personId, "Robert" ); - Account accountVer1 = new Account( accountId, "Saving" ); - personVer1.setAccount( accountVer1 ); - accountVer1.setOwner( personVer1 ); - - Object[] result = ((Object[]) getAuditReader().createQuery().forRevisionsOfEntity( Person.class, false, true ) - .add( AuditEntity.id().eq( personId ) ) - .getResultList().get( 0 )); - - Assert.assertEquals( personVer1, result[0] ); - Assert.assertEquals( personVer1.getAccount(), ((Person) result[0]).getAccount() ); - Assert.assertEquals( RevisionType.ADD, result[2] ); - - Assert.assertEquals( personVer1, getAuditReader().find( Person.class, personId, 1 ) ); - } - - @Test - public void testHistoryOfAccount() { - Person personVer1 = new Person( personId, "Robert" ); - Account accountVer1 = new Account( accountId, "Saving" ); - personVer1.setAccount( accountVer1 ); - accountVer1.setOwner( personVer1 ); - - Object[] result = ((Object[]) getAuditReader().createQuery().forRevisionsOfEntity( Account.class, false, true ) - .add( AuditEntity.id().eq( accountId ) ) - .getResultList().get( 0 )); - - Assert.assertEquals( accountVer1, result[0] ); - Assert.assertEquals( accountVer1.getOwner(), ((Account) result[0]).getOwner() ); - Assert.assertEquals( RevisionType.ADD, result[2] ); - - Assert.assertEquals( accountVer1, getAuditReader().find( Account.class, accountId, 1 ) ); - } - - @Test - public void testHistoryOfAccountNotAuditedOwners() { - NotAuditedPerson proxyPersonVer1 = new NotAuditedPerson( proxyPersonId, "Lukasz" ); - AccountNotAuditedOwners accountNotAuditedOwnersVer1 = new AccountNotAuditedOwners( - accountNotAuditedOwnersId, - "Standard" - ); - proxyPersonVer1.setAccount( accountNotAuditedOwnersVer1 ); - accountNotAuditedOwnersVer1.setOwner( proxyPersonVer1 ); - - Object[] result = ((Object[]) getAuditReader().createQuery() - .forRevisionsOfEntity( AccountNotAuditedOwners.class, false, true ) - .add( AuditEntity.id().eq( accountNotAuditedOwnersId ) ) - .getResultList() - .get( 0 )); - - Assert.assertEquals( accountNotAuditedOwnersVer1, result[0] ); - Assert.assertEquals( RevisionType.ADD, result[2] ); - Assert.assertTrue( ((AccountNotAuditedOwners) result[0]).getOwner() instanceof HibernateProxy ); - Assert.assertEquals( - proxyPersonVer1.getPersonId(), - ((AccountNotAuditedOwners) result[0]).getOwner().getPersonId() - ); - - Assert.assertEquals( - accountNotAuditedOwnersVer1, getAuditReader().find( - AccountNotAuditedOwners.class, - accountNotAuditedOwnersId, - 2 - ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/Person.java deleted file mode 100644 index 9bd61cc9375e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/Person.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.primarykeyjoincolumn; - -import java.io.Serializable; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -public class Person implements Serializable { - @Id - @Column(name = "PERSON_ID") - @GeneratedValue - private Long personId; - - private String name; - - @OneToOne(mappedBy = "owner") - private Account account; - - public Person() { - } - - public Person(String name) { - this.name = name; - } - - public Person(Long personId, String name) { - this.personId = personId; - this.name = name; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Person) ) { - return false; - } - - Person person = (Person) o; - - if ( personId != null ? !personId.equals( person.personId ) : person.personId != null ) { - return false; - } - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = personId != null ? personId.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Person(personId = " + personId + ", name = " + name + ")"; - } - - public Long getPersonId() { - return personId; - } - - public void setPersonId(Long personId) { - this.personId = personId; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Account getAccount() { - return account; - } - - public void setAccount(Account account) { - this.account = account; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java deleted file mode 100644 index bc574e04c55e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * Unidirectional ReferencEd Entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class UniRefEdEntity { - @Id - private Integer id; - - @Audited - private String data; - - public UniRefEdEntity() { - } - - public UniRefEdEntity(Integer id, String data) { - this.id = id; - this.data = data; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UniRefEdEntity) ) { - return false; - } - - UniRefEdEntity that = (UniRefEdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java deleted file mode 100644 index 65b270eb36f4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * Unidirectional ReferencIng Entity - * - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class UniRefIngEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @ManyToOne - private UniRefEdEntity reference; - - public UniRefIngEntity() { - } - - public UniRefIngEntity(Integer id, String data, UniRefEdEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public UniRefEdEntity getReference() { - return reference; - } - - public void setReference(UniRefEdEntity reference) { - this.reference = reference; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UniRefIngEntity) ) { - return false; - } - - UniRefIngEntity that = (UniRefIngEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngMulIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngMulIdEntity.java deleted file mode 100644 index b13a49b29ea0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngMulIdEntity.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.OneToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -public class UniRefIngMulIdEntity { - @Id - private Integer id; - - @Audited - private String data; - - @Audited - @OneToOne - private EmbIdTestEntity reference; - - public UniRefIngMulIdEntity() { - } - - public UniRefIngMulIdEntity(Integer id, String data, EmbIdTestEntity reference) { - this.id = id; - this.data = data; - this.reference = reference; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public EmbIdTestEntity getReference() { - return reference; - } - - public void setReference(EmbIdTestEntity reference) { - this.reference = reference; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UniRefIngMulIdEntity) ) { - return false; - } - - UniRefIngMulIdEntity that = (UniRefIngMulIdEntity) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "UniRefIngMulIdEntity[id = " + id + ", data = " + data + "]"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java deleted file mode 100644 index 6d7ab06fbb82..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Unidirectional extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - private Integer ed3_id; - private Integer ed4_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UniRefEdEntity.class, UniRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - UniRefEdEntity ed1 = new UniRefEdEntity( 1, "data_ed_1" ); - UniRefEdEntity ed2 = new UniRefEdEntity( 2, "data_ed_2" ); - UniRefEdEntity ed3 = new UniRefEdEntity( 3, "data_ed_2" ); - UniRefEdEntity ed4 = new UniRefEdEntity( 4, "data_ed_2" ); - - UniRefIngEntity ing1 = new UniRefIngEntity( 5, "data_ing_1", ed1 ); - UniRefIngEntity ing2 = new UniRefIngEntity( 6, "data_ing_2", ed3 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ed3 ); - em.persist( ed4 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em = getEntityManager(); - em.getTransaction().begin(); - - ing1 = em.find( UniRefIngEntity.class, ing1.getId() ); - ed2 = em.find( UniRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // Revision 3 - - em = getEntityManager(); - em.getTransaction().begin(); - - ing2 = em.find( UniRefIngEntity.class, ing2.getId() ); - ed3 = em.find( UniRefEdEntity.class, ed3.getId() ); - - ing2.setReference( ed4 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - ed3_id = ed3.getId(); - ed4_id = ed4.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed2_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed3_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed4_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfIngId1() { - UniRefEdEntity ed1 = getEntityManager().find( UniRefEdEntity.class, ed1_id ); - UniRefEdEntity ed2 = getEntityManager().find( UniRefEdEntity.class, ed2_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); - } - - @Test - public void testHistoryOfIngId2() { - UniRefEdEntity ed3 = getEntityManager().find( UniRefEdEntity.class, ed3_id ); - UniRefEdEntity ed4 = getEntityManager().find( UniRefEdEntity.class, ed4_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed3 ); - assert rev2.getReference().equals( ed3 ); - assert rev3.getReference().equals( ed4 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java deleted file mode 100644 index 406d1eb57a58..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class UnidirectionalMulIdWithNulls extends BaseEnversJPAFunctionalTestCase { - private EmbId ei; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbIdTestEntity.class, UniRefIngMulIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - ei = new EmbId( 1, 2 ); - - EntityManager em = getEntityManager(); - - // Revision 1 - EmbIdTestEntity eite = new EmbIdTestEntity( ei, "data" ); - UniRefIngMulIdEntity notNullRef = new UniRefIngMulIdEntity( 1, "data 1", eite ); - UniRefIngMulIdEntity nullRef = new UniRefIngMulIdEntity( 2, "data 2", null ); - - em.getTransaction().begin(); - em.persist( eite ); - em.persist( notNullRef ); - em.persist( nullRef ); - em.getTransaction().commit(); - } - - @Test - public void testNullReference() { - UniRefIngMulIdEntity nullRef = getAuditReader().find( UniRefIngMulIdEntity.class, 2, 1 ); - assertNull( nullRef.getReference() ); - } - - @Test - public void testNotNullReference() { - EmbIdTestEntity eite = getAuditReader().find( EmbIdTestEntity.class, ei, 1 ); - UniRefIngMulIdEntity notNullRef = getAuditReader().find( UniRefIngMulIdEntity.class, 1, 1 ); - assertNotNull( notNullRef.getReference() ); - assertEquals( notNullRef.getReference(), eite ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java deleted file mode 100644 index aee2e5b6041e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class UnidirectionalWithNulls extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ed2_id; - - private Integer ing1_id; - private Integer ing2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UniRefEdEntity.class, UniRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - UniRefEdEntity ed1 = new UniRefEdEntity( 1, "data_ed_1" ); - UniRefEdEntity ed2 = new UniRefEdEntity( 2, "data_ed_2" ); - - UniRefIngEntity ing1 = new UniRefIngEntity( 3, "data_ing_1", ed1 ); - UniRefIngEntity ing2 = new UniRefIngEntity( 4, "data_ing_2", null ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - - em = getEntityManager(); - em.getTransaction().begin(); - - ing1 = em.find( UniRefIngEntity.class, ing1.getId() ); - - ing1.setReference( null ); - - em.getTransaction().commit(); - - // Revision 3 - - em = getEntityManager(); - em.getTransaction().begin(); - - ing2 = em.find( UniRefIngEntity.class, ing2.getId() ); - ed2 = em.find( UniRefEdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing2_id ) ); - } - - @Test - public void testHistoryOfIngId1() { - UniRefEdEntity ed1 = getEntityManager().find( UniRefEdEntity.class, ed1_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference() == null; - assert rev3.getReference() == null; - } - - @Test - public void testHistoryOfIngId2() { - UniRefEdEntity ed2 = getEntityManager().find( UniRefEdEntity.class, ed2_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference() == null; - assert rev2.getReference() == null; - assert rev3.getReference().equals( ed2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java deleted file mode 100644 index c3b8609eb081..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.primitive; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.PrimitiveTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class PrimitiveAddDelete extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PrimitiveTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - PrimitiveTestEntity pte = new PrimitiveTestEntity( 10, 11 ); - em.persist( pte ); - id1 = pte.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - pte = em.find( PrimitiveTestEntity.class, id1 ); - pte.setNumVal1( 20 ); - pte.setNumVal2( 21 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - pte = em.find( PrimitiveTestEntity.class, id1 ); - em.remove( pte ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( PrimitiveTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - PrimitiveTestEntity ver1 = new PrimitiveTestEntity( id1, 10, 0 ); - PrimitiveTestEntity ver2 = new PrimitiveTestEntity( id1, 20, 0 ); - - assert getAuditReader().find( PrimitiveTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( PrimitiveTestEntity.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( PrimitiveTestEntity.class, id1, 3 ) == null; - } - - @Test - public void testQueryWithDeleted() { - // Selecting all entities, also the deleted ones - List entities = getAuditReader().createQuery().forRevisionsOfEntity( PrimitiveTestEntity.class, true, true ) - .getResultList(); - - assert entities.size() == 3; - assert entities.get( 0 ).equals( new PrimitiveTestEntity( id1, 10, 0 ) ); - assert entities.get( 1 ).equals( new PrimitiveTestEntity( id1, 20, 0 ) ); - assert entities.get( 2 ).equals( new PrimitiveTestEntity( id1, 0, 0 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/PropertiesTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/PropertiesTestEntity.java deleted file mode 100644 index fe4146f61f95..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/PropertiesTestEntity.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.properties; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class PropertiesTestEntity { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str; - - public PropertiesTestEntity() { - } - - public PropertiesTestEntity(String str) { - this.str = str; - } - - public PropertiesTestEntity(Integer id, String str) { - this.id = id; - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PropertiesTestEntity) ) { - return false; - } - - PropertiesTestEntity that = (PropertiesTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java deleted file mode 100644 index 7e0fee3211ca..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.properties; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Nicolas Doroskevich - */ -public class UnversionedOptimisticLockingField extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UnversionedOptimisticLockingFieldEntity.class}; - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - UnversionedOptimisticLockingFieldEntity olfe = new UnversionedOptimisticLockingFieldEntity( "x" ); - em.persist( olfe ); - id1 = olfe.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - olfe = em.find( UnversionedOptimisticLockingFieldEntity.class, id1 ); - olfe.setStr( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - UnversionedOptimisticLockingFieldEntity.class, - id1 - ) - ); - } - - @Test - public void testHistoryOfId1() { - UnversionedOptimisticLockingFieldEntity ver1 = new UnversionedOptimisticLockingFieldEntity( id1, "x" ); - UnversionedOptimisticLockingFieldEntity ver2 = new UnversionedOptimisticLockingFieldEntity( id1, "y" ); - - assert getAuditReader().find( UnversionedOptimisticLockingFieldEntity.class, id1, 1 ) - .equals( ver1 ); - assert getAuditReader().find( UnversionedOptimisticLockingFieldEntity.class, id1, 2 ) - .equals( ver2 ); - } - - @Test - public void testMapping() { - PersistentClass pc = metadata().getEntityBinding( UnversionedOptimisticLockingFieldEntity.class.getName() + "_AUD" ); - for ( Property p : pc.getProperties() ) { - Assert.assertNotEquals( "optLocking", p.getName() ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingFieldEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingFieldEntity.java deleted file mode 100644 index df1ff7d7b114..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingFieldEntity.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.properties; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; -import jakarta.persistence.Version; - -import org.hibernate.envers.Audited; - -/** - * @author Nicolas Doroskevich - */ -@Audited -@Table(name = "UnverOptimLockField") -@Entity -public class UnversionedOptimisticLockingFieldEntity { - - @Id - @GeneratedValue - private Integer id; - - private String str; - - @Version - private int optLocking; - - public UnversionedOptimisticLockingFieldEntity() { - } - - public UnversionedOptimisticLockingFieldEntity(String str) { - this.str = str; - } - - public UnversionedOptimisticLockingFieldEntity(Integer id, String str) { - this.id = id; - this.str = str; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public int getOptLocking() { - return optLocking; - } - - public void setOptLocking(int optLocking) { - this.optLocking = optLocking; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof UnversionedOptimisticLockingFieldEntity) ) { - return false; - } - - UnversionedOptimisticLockingFieldEntity that = (UnversionedOptimisticLockingFieldEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str != null ? str.hashCode() : 0); - return result; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java deleted file mode 100644 index 36a12b6a237d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.properties; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class VersionsProperties extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertiesTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_TABLE_PREFIX, "VP_" ); - options.put( EnversSettings.AUDIT_TABLE_SUFFIX, "_VS" ); - options.put( EnversSettings.REVISION_FIELD_NAME, "ver_rev" ); - options.put( EnversSettings.REVISION_TYPE_FIELD_NAME, "ver_rev_type" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - PropertiesTestEntity pte = new PropertiesTestEntity( "x" ); - em.persist( pte ); - id1 = pte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - pte = em.find( PropertiesTestEntity.class, id1 ); - pte.setStr( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PropertiesTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - PropertiesTestEntity ver1 = new PropertiesTestEntity( id1, "x" ); - PropertiesTestEntity ver2 = new PropertiesTestEntity( id1, "y" ); - - assert getAuditReader().find( PropertiesTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( PropertiesTestEntity.class, id1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java deleted file mode 100644 index 66e59b7d4294..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.proxy; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.ListRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ListRefIngEntity; -import org.hibernate.proxy.HibernateProxy; - -import org.junit.Test; - -/** - * Test case for HHH-5750: Proxied objects lose the temporary session used to - * initialize them. - * - * @author Erik-Berndt Scheper - */ -public class AuditedCollectionProxyTest extends BaseEnversJPAFunctionalTestCase { - - Integer id_ListRefEdEntity1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefEdEntity.class, ListRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListRefEdEntity listReferencedEntity1 = new ListRefEdEntity( - Integer.valueOf( 1 ), "str1" - ); - ListRefIngEntity refingEntity1 = new ListRefIngEntity( - Integer.valueOf( 1 ), "refing1", listReferencedEntity1 - ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( listReferencedEntity1 ); - em.persist( refingEntity1 ); - em.getTransaction().commit(); - - id_ListRefEdEntity1 = listReferencedEntity1.getId(); - - // Revision 2 - ListRefIngEntity refingEntity2 = new ListRefIngEntity( - Integer.valueOf( 2 ), "refing2", listReferencedEntity1 - ); - - em.getTransaction().begin(); - em.persist( refingEntity2 ); - em.getTransaction().commit(); - } - - @Test - public void testProxyIdentifier() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - - ListRefEdEntity listReferencedEntity1 = em.getReference( - ListRefEdEntity.class, id_ListRefEdEntity1 - ); - - assert listReferencedEntity1 instanceof HibernateProxy; - - // Revision 3 - ListRefIngEntity refingEntity3 = new ListRefIngEntity( - Integer.valueOf( 3 ), "refing3", listReferencedEntity1 - ); - - em.persist( refingEntity3 ); - - listReferencedEntity1.getReffering().size(); - em.getTransaction().commit(); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java deleted file mode 100644 index e9cba0577c44..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.proxy; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.ManyToManyNotAuditedNullEntity; -import org.hibernate.orm.test.envers.entities.manytoone.unidirectional.ExtManyToOneNotAuditedNullEntity; -import org.hibernate.orm.test.envers.entities.manytoone.unidirectional.ManyToOneNotAuditedNullEntity; -import org.hibernate.orm.test.envers.entities.manytoone.unidirectional.TargetNotAuditedEntity; -import org.hibernate.orm.test.envers.entities.onetomany.OneToManyNotAuditedNullEntity; -import org.hibernate.proxy.HibernateProxy; -import org.hibernate.proxy.LazyInitializer; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Eugene Goroschenya - */ -public class ProxyIdentifier extends BaseEnversJPAFunctionalTestCase { - private TargetNotAuditedEntity tnae1 = null; - private ManyToOneNotAuditedNullEntity mtonane1 = null; - private ExtManyToOneNotAuditedNullEntity emtonane1 = null; - private ManyToManyNotAuditedNullEntity mtmnane1 = null; - private OneToManyNotAuditedNullEntity otmnane1 = null; - private UnversionedStrTestEntity uste1 = null; - private UnversionedStrTestEntity uste2 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - TargetNotAuditedEntity.class, ManyToOneNotAuditedNullEntity.class, UnversionedStrTestEntity.class, - ManyToManyNotAuditedNullEntity.class, OneToManyNotAuditedNullEntity.class, - ExtManyToOneNotAuditedNullEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - uste1 = new UnversionedStrTestEntity( "str1" ); - uste2 = new UnversionedStrTestEntity( "str2" ); - - // No revision - em.getTransaction().begin(); - em.persist( uste1 ); - em.persist( uste2 ); - em.getTransaction().commit(); - - // Revision 1 - em.getTransaction().begin(); - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - tnae1 = new TargetNotAuditedEntity( 1, "tnae1", uste1 ); - em.persist( tnae1 ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - mtonane1 = new ManyToOneNotAuditedNullEntity( 2, "mtonane1", uste2 ); - mtmnane1 = new ManyToManyNotAuditedNullEntity( 3, "mtmnane1" ); - mtmnane1.getReferences().add( uste2 ); - otmnane1 = new OneToManyNotAuditedNullEntity( 4, "otmnane1" ); - otmnane1.getReferences().add( uste2 ); - emtonane1 = new ExtManyToOneNotAuditedNullEntity( 5, "emtonane1", uste2, "extension" ); - em.persist( mtonane1 ); - em.persist( mtmnane1 ); - em.persist( otmnane1 ); - em.persist( emtonane1 ); - em.getTransaction().commit(); - - em.clear(); - - // Revision 3 - // Remove not audited target entity, so we can verify null reference - // when @NotFound(action = NotFoundAction.IGNORE) applied. - em.getTransaction().begin(); - ManyToOneNotAuditedNullEntity tmp1 = em.find( ManyToOneNotAuditedNullEntity.class, mtonane1.getId() ); - tmp1.setReference( null ); - tmp1 = em.merge( tmp1 ); - ManyToManyNotAuditedNullEntity tmp2 = em.find( ManyToManyNotAuditedNullEntity.class, mtmnane1.getId() ); - tmp2.setReferences( null ); - tmp2 = em.merge( tmp2 ); - OneToManyNotAuditedNullEntity tmp3 = em.find( OneToManyNotAuditedNullEntity.class, otmnane1.getId() ); - tmp3.setReferences( null ); - tmp3 = em.merge( tmp3 ); - ExtManyToOneNotAuditedNullEntity tmp4 = em.find( ExtManyToOneNotAuditedNullEntity.class, emtonane1.getId() ); - tmp4.setReference( null ); - tmp4 = em.merge( tmp4 ); - em.remove( em.getReference( UnversionedStrTestEntity.class, uste2.getId() ) ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testProxyIdentifier() { - TargetNotAuditedEntity rev1 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1.getId(), 1 ); - - Assert.assertTrue( rev1.getReference() instanceof HibernateProxy ); - - HibernateProxy proxyCreateByEnvers = (HibernateProxy) rev1.getReference(); - LazyInitializer lazyInitializer = proxyCreateByEnvers.getHibernateLazyInitializer(); - - Assert.assertTrue( lazyInitializer.isUninitialized() ); - Assert.assertNotNull( lazyInitializer.getInternalIdentifier() ); - Assert.assertEquals( tnae1.getId(), lazyInitializer.getInternalIdentifier() ); - Assert.assertTrue( lazyInitializer.isUninitialized() ); - - Assert.assertEquals( uste1.getId(), rev1.getReference().getId() ); - Assert.assertEquals( uste1.getStr(), rev1.getReference().getStr() ); - Assert.assertFalse( lazyInitializer.isUninitialized() ); - } - - @Test - @JiraKey( value = "HHH-8174" ) - public void testNullReferenceWithNotFoundActionIgnore() { - ManyToOneNotAuditedNullEntity mtoRev2 = getAuditReader().find( ManyToOneNotAuditedNullEntity.class, mtonane1.getId(), 2 ); - Assert.assertEquals( mtonane1, mtoRev2 ); - Assert.assertNull( mtoRev2.getReference() ); - - ManyToManyNotAuditedNullEntity mtmRev2 = getAuditReader().find( ManyToManyNotAuditedNullEntity.class, mtmnane1.getId(), 2 ); - Assert.assertEquals( mtmnane1, mtmRev2 ); - Assert.assertTrue( mtmRev2.getReferences().isEmpty() ); - - OneToManyNotAuditedNullEntity otmRev2 = getAuditReader().find( OneToManyNotAuditedNullEntity.class, otmnane1.getId(), 2 ); - Assert.assertEquals( otmnane1, otmRev2 ); - Assert.assertTrue( otmRev2.getReferences().isEmpty() ); - } - - @Test - @JiraKey( value = "HHH-8912" ) - public void testNullReferenceWithNotFoundActionIgnoreInParent() { - ExtManyToOneNotAuditedNullEntity emtoRev2 = getAuditReader().find( ExtManyToOneNotAuditedNullEntity.class, emtonane1.getId(), 2 ); - Assert.assertEquals( emtonane1, emtoRev2 ); - Assert.assertNull( emtoRev2.getReference() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java deleted file mode 100644 index c281e544ae05..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.proxy; - -import java.util.Arrays; -import java.util.List; - -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class QueryingWithProxyObjectTest extends BaseEnversFunctionalTestCase { - private Integer id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - getSession().getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "data" ); - getSession().persist( ste ); - getSession().getTransaction().commit(); - id = ste.getId(); - getSession().close(); - } - - @Test - @JiraKey(value = "HHH-4760") - @SuppressWarnings("unchecked") - public void testQueryingWithProxyObject() { - StrTestEntity originalSte = new StrTestEntity( "data", id ); - // Load the proxy instance - StrTestEntity proxySte = (StrTestEntity) getSession().getReference( StrTestEntity.class, id ); - - Assert.assertTrue( getAuditReader().isEntityClassAudited( proxySte.getClass() ) ); - - StrTestEntity ste = getAuditReader().find( proxySte.getClass(), proxySte.getId(), 1 ); - Assert.assertEquals( originalSte, ste ); - - List revisions = getAuditReader().getRevisions( proxySte.getClass(), proxySte.getId() ); - Assert.assertEquals( Arrays.asList( 1 ), revisions ); - - List entities = getAuditReader().createQuery() - .forEntitiesAtRevision( proxySte.getClass(), 1 ) - .getResultList(); - Assert.assertEquals( Arrays.asList( originalSte ), entities ); - - ste = (StrTestEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( proxySte.getClass(), true, false ) - .getSingleResult(); - Assert.assertEquals( originalSte, ste ); - - ste = (StrTestEntity) getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( proxySte.getClass(), 1 ) - .getSingleResult(); - Assert.assertEquals( originalSte, ste ); - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java deleted file mode 100644 index af61878962fb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java +++ /dev/null @@ -1,603 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.proxy; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.Hibernate; -import org.hibernate.dialect.HSQLDialect; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; -import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; -import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; -import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; -import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; -import org.hibernate.orm.test.envers.entities.manytomany.SetOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.SetOwningEntity; -import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.M2MIndexedListTargetNotAuditedEntity; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; -import org.hibernate.orm.test.envers.integration.manytomany.ternary.TernaryMapEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-5845") -public class RemovedObjectQueryTest extends BaseEnversJPAFunctionalTestCase { - private Integer stringSetId = null; - private Integer ternaryMapId = null; - private UnversionedStrTestEntity unversionedEntity1 = null; - private UnversionedStrTestEntity unversionedEntity2 = null; - private StrTestPrivSeqEntity stringEntity1 = null; - private StrTestPrivSeqEntity stringEntity2 = null; - private IntTestPrivSeqEntity intEntity1 = null; - private IntTestPrivSeqEntity intEntity2 = null; - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - SetRefEdEntity.class, SetRefIngEntity.class, SetOwnedEntity.class, SetOwningEntity.class, - StringSetEntity.class, UnversionedStrTestEntity.class, M2MIndexedListTargetNotAuditedEntity.class, - TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class, - CollectionRefEdEntity.class, CollectionRefIngEntity.class, ListOwnedEntity.class, ListOwningEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity refEdEntity1 = new SetRefEdEntity( 1, "Demo Data 1" ); - SetRefIngEntity refIngEntity1 = new SetRefIngEntity( 2, "Example Data 1", refEdEntity1 ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( refEdEntity1 ); - em.persist( refIngEntity1 ); - em.getTransaction().commit(); - - // Revision 2 - removing both object in the same revision - em.getTransaction().begin(); - refEdEntity1 = em.find( SetRefEdEntity.class, 1 ); - refIngEntity1 = em.find( SetRefIngEntity.class, 2 ); - em.remove( refIngEntity1 ); - em.remove( refEdEntity1 ); - em.getTransaction().commit(); - - SetRefEdEntity refEdEntity2 = new SetRefEdEntity( 3, "Demo Data 2" ); - SetRefIngEntity refIngEntity2 = new SetRefIngEntity( 4, "Example Data 2", refEdEntity2 ); - - // Revision 3 - em.getTransaction().begin(); - em.persist( refEdEntity2 ); - em.persist( refIngEntity2 ); - em.getTransaction().commit(); - - // Revision 4 - removing child object - em.getTransaction().begin(); - refIngEntity2 = em.find( SetRefIngEntity.class, 4 ); - em.remove( refIngEntity2 ); - em.getTransaction().commit(); - - // Revision 5 - removing parent object - em.getTransaction().begin(); - refEdEntity2 = em.find( SetRefEdEntity.class, 3 ); - em.remove( refEdEntity2 ); - em.getTransaction().commit(); - - SetOwningEntity setOwningEntity1 = new SetOwningEntity( 5, "Demo Data 1" ); - SetOwnedEntity setOwnedEntity1 = new SetOwnedEntity( 6, "Example Data 1" ); - Set owning = new HashSet(); - Set owned = new HashSet(); - owning.add( setOwningEntity1 ); - owned.add( setOwnedEntity1 ); - setOwningEntity1.setReferences( owned ); - setOwnedEntity1.setReferencing( owning ); - - // Revision 6 - em.getTransaction().begin(); - em.persist( setOwnedEntity1 ); - em.persist( setOwningEntity1 ); - em.getTransaction().commit(); - - // Revision 7 - removing both object in the same revision - em.getTransaction().begin(); - setOwnedEntity1 = em.find( SetOwnedEntity.class, 6 ); - setOwningEntity1 = em.find( SetOwningEntity.class, 5 ); - em.remove( setOwningEntity1 ); - em.remove( setOwnedEntity1 ); - em.getTransaction().commit(); - - SetOwningEntity setOwningEntity2 = new SetOwningEntity( 7, "Demo Data 2" ); - SetOwnedEntity setOwnedEntity2 = new SetOwnedEntity( 8, "Example Data 2" ); - owning = new HashSet(); - owned = new HashSet(); - owning.add( setOwningEntity2 ); - owned.add( setOwnedEntity2 ); - setOwningEntity2.setReferences( owned ); - setOwnedEntity2.setReferencing( owning ); - - // Revision 8 - em.getTransaction().begin(); - em.persist( setOwnedEntity2 ); - em.persist( setOwningEntity2 ); - em.getTransaction().commit(); - - // Revision 9 - removing first object - em.getTransaction().begin(); - setOwningEntity2 = em.find( SetOwningEntity.class, 7 ); - setOwnedEntity2.getReferencing().remove( setOwningEntity2 ); - em.remove( setOwningEntity2 ); - em.getTransaction().commit(); - - // Revision 10 - removing second object - em.getTransaction().begin(); - setOwnedEntity2 = em.find( SetOwnedEntity.class, 8 ); - em.remove( setOwnedEntity2 ); - em.getTransaction().commit(); - - StringSetEntity stringSetEntity = new StringSetEntity(); - stringSetEntity.getStrings().add( "string 1" ); - stringSetEntity.getStrings().add( "string 2" ); - - // Revision 11 - em.getTransaction().begin(); - em.persist( stringSetEntity ); - em.getTransaction().commit(); - - stringSetId = stringSetEntity.getId(); - - // Revision 12 - removing element collection - em.getTransaction().begin(); - stringSetEntity = em.find( StringSetEntity.class, stringSetEntity.getId() ); - em.remove( stringSetEntity ); - em.getTransaction().commit(); - - // Revision 13 - em.getTransaction().begin(); - unversionedEntity1 = new UnversionedStrTestEntity( "string 1" ); - unversionedEntity2 = new UnversionedStrTestEntity( "string 2" ); - M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = new M2MIndexedListTargetNotAuditedEntity( - 1, - "Parent" - ); - relationNotAuditedEntity.getReferences().add( unversionedEntity1 ); - relationNotAuditedEntity.getReferences().add( unversionedEntity2 ); - em.persist( unversionedEntity1 ); - em.persist( unversionedEntity2 ); - em.persist( relationNotAuditedEntity ); - em.getTransaction().commit(); - - // Revision 14 - removing entity with unversioned relation - em.getTransaction().begin(); - relationNotAuditedEntity = em.find( - M2MIndexedListTargetNotAuditedEntity.class, - relationNotAuditedEntity.getId() - ); - em.remove( relationNotAuditedEntity ); - em.getTransaction().commit(); - - stringEntity1 = new StrTestPrivSeqEntity( "Value 1" ); - stringEntity2 = new StrTestPrivSeqEntity( "Value 2" ); - intEntity1 = new IntTestPrivSeqEntity( 1 ); - intEntity2 = new IntTestPrivSeqEntity( 2 ); - TernaryMapEntity mapEntity = new TernaryMapEntity(); - mapEntity.getMap().put( intEntity1, stringEntity1 ); - mapEntity.getMap().put( intEntity2, stringEntity2 ); - - // Revision 15 - em.getTransaction().begin(); - em.persist( stringEntity1 ); - em.persist( stringEntity2 ); - em.persist( intEntity1 ); - em.persist( intEntity2 ); - em.persist( mapEntity ); - em.getTransaction().commit(); - - ternaryMapId = mapEntity.getId(); - - // Revision 16 - updating ternary map - em.getTransaction().begin(); - intEntity2 = em.find( IntTestPrivSeqEntity.class, intEntity2.getId() ); - intEntity2.setNumber( 3 ); - intEntity2 = em.merge( intEntity2 ); - stringEntity2 = em.find( StrTestPrivSeqEntity.class, stringEntity2.getId() ); - stringEntity2.setStr( "Value 3" ); - stringEntity2 = em.merge( stringEntity2 ); - em.getTransaction().commit(); - - // Revision 17 - removing ternary map - em.getTransaction().begin(); - mapEntity = em.find( TernaryMapEntity.class, mapEntity.getId() ); - em.remove( mapEntity ); - em.getTransaction().commit(); - - CollectionRefEdEntity collEd1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - CollectionRefIngEntity collIng1 = new CollectionRefIngEntity( 2, "data_ing_1", collEd1 ); - collEd1.setReffering( new ArrayList() ); - collEd1.getReffering().add( collIng1 ); - - // Revision 18 - testing one-to-many collection - em.getTransaction().begin(); - em.persist( collEd1 ); - em.persist( collIng1 ); - em.getTransaction().commit(); - - // Revision 19 - em.getTransaction().begin(); - collIng1 = em.find( CollectionRefIngEntity.class, collIng1.getId() ); - collIng1.setData( "modified data_ing_1" ); - collIng1 = em.merge( collIng1 ); - em.getTransaction().commit(); - - // Revision 20 - em.getTransaction().begin(); - collEd1 = em.find( CollectionRefEdEntity.class, collEd1.getId() ); - collIng1 = em.find( CollectionRefIngEntity.class, collIng1.getId() ); - em.remove( collIng1 ); - em.remove( collEd1 ); - em.getTransaction().commit(); - - ListOwnedEntity listEd1 = new ListOwnedEntity( 1, "data_ed_1" ); - ListOwningEntity listIng1 = new ListOwningEntity( 2, "data_ing_1" ); - listEd1.setReferencing( new ArrayList() ); - listIng1.setReferences( new ArrayList() ); - listEd1.getReferencing().add( listIng1 ); - listIng1.getReferences().add( listEd1 ); - - // Revision 21 - testing many-to-many collection - em.getTransaction().begin(); - em.persist( listEd1 ); - em.persist( listIng1 ); - em.getTransaction().commit(); - - // Revision 22 - em.getTransaction().begin(); - listIng1 = em.find( ListOwningEntity.class, listIng1.getId() ); - listIng1.setData( "modified data_ing_1" ); - listIng1 = em.merge( listIng1 ); - em.getTransaction().commit(); - - // Revision 23 - em.getTransaction().begin(); - listIng1 = em.find( ListOwningEntity.class, listIng1.getId() ); - listEd1 = em.find( ListOwnedEntity.class, listEd1.getId() ); - em.remove( listIng1 ); - em.remove( listEd1 ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testTernaryMap() { - final TernaryMapEntity ternaryMap = new TernaryMapEntity(); - ternaryMap.setId( ternaryMapId ); - ternaryMap.getMap().put( intEntity1, stringEntity1 ); - ternaryMap.getMap().put( new IntTestPrivSeqEntity( 2, intEntity2.getId() ) , new StrTestPrivSeqEntity( "Value 2", stringEntity2.getId() ) ); - - TernaryMapEntity entity = getAuditReader().find( TernaryMapEntity.class, ternaryMapId, 15 ); - - Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); - - ternaryMap.getMap().clear(); - ternaryMap.getMap().put( intEntity1, stringEntity1 ); - ternaryMap.getMap().put( intEntity2, stringEntity2 ); - - entity = getAuditReader().find( TernaryMapEntity.class, ternaryMapId, 16 ); - - Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); - - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( TernaryMapEntity.class, false, true ) - .add( AuditEntity.id().eq( ternaryMapId ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 17, getRevisionNumber( objArray[1] ) ); - - entity = (TernaryMapEntity) objArray[0]; - Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); - } - - @Test - public void testUnversionedRelation() { - List queryResult = getAuditReader().createQuery() - .forRevisionsOfEntity( M2MIndexedListTargetNotAuditedEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 14, getRevisionNumber( objArray[1] ) ); - - M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = (M2MIndexedListTargetNotAuditedEntity) objArray[0]; - Assert.assertTrue( - TestTools.checkCollection( - relationNotAuditedEntity.getReferences(), - unversionedEntity1, unversionedEntity2 - ) - ); - } - - @Test - public void testElementCollection() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( StringSetEntity.class, false, true ) - .add( AuditEntity.id().eq( stringSetId ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 12, getRevisionNumber( objArray[1] ) ); - - StringSetEntity stringSetEntity = (StringSetEntity) objArray[0]; - Assert.assertEquals( TestTools.makeSet( "string 1", "string 2" ), stringSetEntity.getStrings() ); - } - - // One to many tests. - - @Test - public void testOneToManyCollectionSemantics() { - final CollectionRefEdEntity edVer1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - final CollectionRefIngEntity ingVer1 = new CollectionRefIngEntity( 2, "data_ing_1" ); - final CollectionRefIngEntity ingVer2 = new CollectionRefIngEntity( 2, "modified data_ing_1" ); - - CollectionRefEdEntity entity = getAuditReader().find( CollectionRefEdEntity.class, 1, 18 ); - - Assert.assertEquals( edVer1, entity ); - Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer1 ) ); - - entity = getAuditReader().find( CollectionRefEdEntity.class, 1, 19 ); - - Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); - - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( CollectionRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 20, getRevisionNumber( objArray[1] ) ); - - entity = (CollectionRefEdEntity) objArray[0]; - Assert.assertEquals( "data_ed_1", entity.getData() ); - Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); - } - - @Test - public void testReferencedOneToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) - .add( AuditEntity.id().eq( 2 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); - - SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; - Assert.assertEquals( "Example Data 1", refIngEntity.getData() ); - - Hibernate.initialize( refIngEntity.getReference() ); - Assert.assertEquals( "Demo Data 1", refIngEntity.getReference().getData() ); - } - - @Test - public void testReferringOneToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); - - SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; - Assert.assertEquals( "Demo Data 1", refEdEntity.getData() ); - - Hibernate.initialize( refEdEntity.getReffering() ); - Assert.assertEquals( - TestTools.makeSet( new SetRefIngEntity( 2, "Example Data 1" ) ), - refEdEntity.getReffering() - ); - } - - @Test - public void testReferencedOneToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) - .add( AuditEntity.id().eq( 4 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 4, getRevisionNumber( objArray[1] ) ); - - SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; - Assert.assertEquals( "Example Data 2", refIngEntity.getData() ); - - Hibernate.initialize( refIngEntity.getReference() ); - Assert.assertEquals( "Demo Data 2", refIngEntity.getReference().getData() ); - } - - @Test - public void testReferringOneToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 3 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 5, getRevisionNumber( objArray[1] ) ); - - SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; - Assert.assertEquals( "Demo Data 2", refEdEntity.getData() ); - - Hibernate.initialize( refEdEntity.getReffering() ); - Assert.assertTrue( refEdEntity.getReffering().isEmpty() ); - - // After commit in revision four, child entity has been removed. - queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 3 ) ) - .add( AuditEntity.revisionNumber().eq( 4 ) ) - .getResultList(); - objArray = (Object[]) queryResult.get( 0 ); - - refEdEntity = (SetRefEdEntity) objArray[0]; - Assert.assertEquals( "Demo Data 2", refEdEntity.getData() ); - - Hibernate.initialize( refEdEntity.getReffering() ); - Assert.assertTrue( refEdEntity.getReffering().isEmpty() ); - } - - // Many to many tests. - - @Test - public void testManyToManyCollectionSemantics() { - final ListOwnedEntity edVer1 = new ListOwnedEntity( 1, "data_ed_1" ); - final ListOwningEntity ingVer1 = new ListOwningEntity( 2, "data_ing_1" ); - final ListOwningEntity ingVer2 = new ListOwningEntity( 2, "modified data_ing_1" ); - - ListOwnedEntity entity = getAuditReader().find( ListOwnedEntity.class, 1, 21 ); - - Assert.assertEquals( edVer1, entity ); - Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer1 ) ); - - entity = getAuditReader().find( ListOwnedEntity.class, 1, 22 ); - - Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); - - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( ListOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 23, getRevisionNumber( objArray[1] ) ); - - entity = (ListOwnedEntity) objArray[0]; - Assert.assertEquals( "data_ed_1", entity.getData() ); - Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); - } - - @Test - public void testOwnedManyToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) - .add( AuditEntity.id().eq( 5 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); - - SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; - Assert.assertEquals( "Demo Data 1", setOwningEntity.getData() ); - - Hibernate.initialize( setOwningEntity.getReferences() ); - Assert.assertEquals( - TestTools.makeSet( new SetOwnedEntity( 6, "Example Data 1" ) ), - setOwningEntity.getReferences() - ); - } - - @Test - public void testOwningManyToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 6 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); - - SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; - Assert.assertEquals( "Example Data 1", setOwnedEntity.getData() ); - - Hibernate.initialize( setOwnedEntity.getReferencing() ); - Assert.assertEquals( - TestTools.makeSet( new SetOwningEntity( 5, "Demo Data 1" ) ), - setOwnedEntity.getReferencing() - ); - } - - @Test - public void testOwnedManyToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) - .add( AuditEntity.id().eq( 7 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 9, getRevisionNumber( objArray[1] ) ); - - SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; - Assert.assertEquals( "Demo Data 2", setOwningEntity.getData() ); - - Hibernate.initialize( setOwningEntity.getReferences() ); - Assert.assertEquals( - TestTools.makeSet( new SetOwnedEntity( 8, "Example Data 2" ) ), - setOwningEntity.getReferences() - ); - } - - @Test - public void testOwningManyToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 8 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 10, getRevisionNumber( objArray[1] ) ); - - SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; - Assert.assertEquals( "Example Data 2", setOwnedEntity.getData() ); - - Hibernate.initialize( setOwnedEntity.getReferencing() ); - Assert.assertTrue( setOwnedEntity.getReferencing().isEmpty() ); - - // After commit in revision nine, related entity has been removed. - queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 8 ) ) - .add( AuditEntity.revisionNumber().eq( 9 ) ) - .getResultList(); - objArray = (Object[]) queryResult.get( 0 ); - - setOwnedEntity = (SetOwnedEntity) objArray[0]; - Assert.assertEquals( "Example Data 2", setOwnedEntity.getData() ); - - Hibernate.initialize( setOwnedEntity.getReferencing() ); - Assert.assertTrue( setOwnedEntity.getReferencing().isEmpty() ); - } - - private Number getRevisionNumber(Object revisionEntity) { - return ((SequenceIdRevisionEntity) revisionEntity).getId(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java deleted file mode 100644 index 54b6c79881f5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-8058" ) -public abstract class AbstractEntityWithChangesQueryTest extends BaseEnversJPAFunctionalTestCase { - private Integer simpleId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Simple.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - simpleId = doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = new Simple(); - simple.setName( "Name" ); - simple.setValue( 25 ); - entityManager.persist( simple ); - return simple.getId(); - } ); - - // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, simpleId ); - simple.setName( "Name-Modified2" ); - entityManager.merge( simple ); - } ); - - // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, simpleId ); - simple.setName( "Name-Modified3" ); - simple.setValue( 100 ); - entityManager.merge( simple ); - } ); - - // Revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Simple simple = entityManager.find( Simple.class, simpleId ); - entityManager.remove( simple ); - } ); - } - - @Test - public void testRevisionCount() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Simple.class, simpleId ) ); - } - - @Test - public void testEntityRevisionsWithChangesQueryNoDeletions() { - List results = getAuditReader().createQuery() - .forRevisionsOfEntityWithChanges( Simple.class, false ) - .add( AuditEntity.id().eq( simpleId ) ) - .getResultList(); - compareResults( getExpectedResults( false ), results ); - } - - @Test - public void testEntityRevisionsWithChangesQuery() { - List results = getAuditReader().createQuery() - .forRevisionsOfEntityWithChanges( Simple.class, true ) - .add( AuditEntity.id().eq( simpleId ) ) - .getResultList(); - compareResults( getExpectedResults( true ), results ); - } - - private void compareResults(List expectedResults, List results) { - assertEquals( expectedResults.size(), results.size() ); - for ( int i = 0; i < results.size(); ++i ) { - final Object[] row = (Object[]) results.get( i ); - final Object[] expectedRow = expectedResults.get( i ); - // the query returns 4, index 1 has the revision entity which we don't test here - assertEquals( 4, row.length ); - // because we don't test the revision entity, we adjust indexes between the two arrays - assertEquals( expectedRow[ 0 ], row[ 0 ] ); - assertEquals( expectedRow[ 1 ], row[ 2 ] ); - assertEquals( expectedRow[ 2 ], row[ 3 ] ); - } - } - - protected List getExpectedResults(boolean includeDeletions) { - - String deleteName = null; - Integer deleteValue = null; - if ( getConfig().get( EnversSettings.STORE_DATA_AT_DELETE ) == Boolean.TRUE ) { - deleteName = "Name-Modified3"; - deleteValue = 100; - } - - final List results = new ArrayList<>(); - - results.add( - new Object[] { - new Simple( simpleId, "Name", 25 ), - RevisionType.ADD, - Collections.emptySet() - } - ); - - results.add( - new Object[] { - new Simple( simpleId, "Name-Modified2", 25 ), - RevisionType.MOD, - TestTools.makeSet( "name" ) - } - ); - - results.add( - new Object[] { - new Simple( simpleId, "Name-Modified3", 100 ), - RevisionType.MOD, - TestTools.makeSet( "name", "value" ) - } - ); - - if ( includeDeletions ) { - results.add( - new Object[] { - new Simple( simpleId, deleteName, deleteValue ), - RevisionType.DEL, - Collections.emptySet() - } - ); - } - - System.out.println( "Generated " + results.size() + " results." ); - return results; - } - - @Audited - @Entity(name = "Simple") - public static class Simple { - @Id - @GeneratedValue - private Integer id; - private String name; - @Column(name = "val") - private Integer value; - - Simple() { - - } - - Simple(Integer id, String name, Integer value) { - this.id = id; - this.name = name; - this.value = value; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getValue() { - return value; - } - - public void setValue(Integer value) { - this.value = value; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - - Simple simple = (Simple) o; - - if ( getId() != null ? !getId().equals( simple.getId() ) : simple.getId() != null ) { - return false; - } - if ( getName() != null ? !getName().equals( simple.getName() ) : simple.getName() != null ) { - return false; - } - return getValue() != null ? getValue().equals( simple.getValue() ) : simple.getValue() == null; - } - - @Override - public int hashCode() { - int result = getId() != null ? getId().hashCode() : 0; - result = 31 * result + ( getName() != null ? getName().hashCode() : 0 ); - result = 31 * result + ( getValue() != null ? getValue().hashCode() : 0 ); - return result; - } - - @Override - public String toString() { - return "Simple{" + - "id=" + id + - ", name='" + name + '\'' + - ", value=" + value + - '}'; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java deleted file mode 100644 index d44904b7b135..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; -import org.hibernate.orm.test.envers.entities.ids.UnusualIdNamingEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class AggregateQuery extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class, UnusualIdNamingEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - IntTestEntity ite1 = new IntTestEntity( 2 ); - IntTestEntity ite2 = new IntTestEntity( 10 ); - em.persist( ite1 ); - em.persist( ite2 ); - Integer id1 = ite1.getId(); - Integer id2 = ite2.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - IntTestEntity ite3 = new IntTestEntity( 8 ); - UnusualIdNamingEntity uine1 = new UnusualIdNamingEntity( "id1", "data1" ); - em.persist( uine1 ); - em.persist( ite3 ); - ite1 = em.find( IntTestEntity.class, id1 ); - ite1.setNumber( 0 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - ite2 = em.find( IntTestEntity.class, id2 ); - ite2.setNumber( 52 ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testEntitiesAvgMaxQuery() { - Object[] ver1 = (Object[]) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addProjection( AuditEntity.property( "number" ).max() ) - .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) - .getSingleResult(); - - Object[] ver2 = (Object[]) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addProjection( AuditEntity.property( "number" ).max() ) - .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) - .getSingleResult(); - - Object[] ver3 = (Object[]) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 3 ) - .addProjection( AuditEntity.property( "number" ).max() ) - .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) - .getSingleResult(); - - assert (Integer) ver1[0] == 10; - assert (Double) ver1[1] == 6.0; - - assert (Integer) ver2[0] == 10; - assert (Double) ver2[1] == 6.0; - - assert (Integer) ver3[0] == 52; - assert (Double) ver3[1] == 20.0; - } - - @Test - @JiraKey(value = "HHH-8036") - public void testEntityIdProjection() { - Integer maxId = (Integer) getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) - .addProjection( AuditEntity.id().max() ) - .add( AuditEntity.revisionNumber().gt( 2 ) ) - .getSingleResult(); - Assert.assertEquals( Integer.valueOf( 2 ), maxId ); - } - - @Test - @JiraKey(value = "HHH-8036") - public void testEntityIdRestriction() { - List list = getAuditReader().createQuery().forRevisionsOfEntity( - IntTestEntity.class, - true, - true - ) - .add( AuditEntity.id().between( 2, 3 ) ) - .getResultList(); - Assert.assertTrue( - TestTools.checkCollection( - list, - new IntTestEntity( 10, 2 ), new IntTestEntity( 8, 3 ), new IntTestEntity( 52, 2 ) - ) - ); - } - - @Test - @JiraKey(value = "HHH-8036") - public void testEntityIdOrdering() { - List list = getAuditReader().createQuery().forRevisionsOfEntity( - IntTestEntity.class, - true, - true - ) - .add( AuditEntity.revisionNumber().lt( 2 ) ) - .addOrder( AuditEntity.id().desc() ) - .getResultList(); - Assert.assertEquals( Arrays.asList( new IntTestEntity( 10, 2 ), new IntTestEntity( 2, 1 ) ), list ); - } - - @Test - @JiraKey(value = "HHH-8036") - public void testUnusualIdFieldName() { - UnusualIdNamingEntity entity = (UnusualIdNamingEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( UnusualIdNamingEntity.class, true, true ) - .add( AuditEntity.id().like( "id1" ) ) - .getSingleResult(); - Assert.assertEquals( new UnusualIdNamingEntity( "id1", "data1" ), entity ); - } - - @Test - @JiraKey(value = "HHH-8036") - public void testEntityIdModifiedFlagNotSupported() { - try { - getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) - .add( AuditEntity.id().hasChanged() ) - .getResultList(); - } - catch (UnsupportedOperationException e1) { - try { - getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) - .add( AuditEntity.id().hasNotChanged() ) - .getResultList(); - } - catch (UnsupportedOperationException e2) { - return; - } - Assert.fail(); - } - Assert.fail(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java deleted file mode 100644 index 0b924b39b33f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11981") -public class AssociationEntitiesModifiedQueryTest extends BaseEnversJPAFunctionalTestCase { - @Entity(name = "TemplateType") - @Audited(withModifiedFlag = true) - public static class TemplateType { - @Id - private Integer id; - private String name; - - TemplateType() { - this( null, null ); - } - - TemplateType(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "Template") - @Audited(withModifiedFlag = true) - public static class Template { - @Id - private Integer id; - private String name; - @ManyToOne - private TemplateType templateType; - - Template() { - this( null, null, null ); - } - - Template(Integer id, String name, TemplateType type) { - this.id = id; - this.name = name; - this.templateType = type; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public TemplateType getTemplateType() { - return templateType; - } - - public void setTemplateType(TemplateType templateType) { - this.templateType = templateType; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TemplateType.class, Template.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { - final TemplateType type1 = new TemplateType( 1, "Type1" ); - final TemplateType type2 = new TemplateType( 2, "Type2" ); - final Template template = new Template( 1, "Template1", type1 ); - entityManager.persist( type1 ); - entityManager.persist( type2 ); - entityManager.persist( template ); - } ); - - // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final TemplateType type = entityManager.find( TemplateType.class, 2 ); - final Template template = entityManager.find( Template.class, 1 ); - template.setTemplateType( type ); - entityManager.merge( template ); - } ); - - // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Template template = entityManager.find( Template.class, 1 ); - entityManager.remove( template ); - } ); - } - - @Test - public void testEntitiesModifiedAtRevision1WithAssociationQueries() { - doInJPA( this::entityManagerFactory, entityManager -> { - List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( 1 ); - assertEquals( 1, results.size() ); - assertEquals( "Type1", ( (TemplateType) results.get( 0 ) ).getName() ); - } ); - } - - @Test - public void testEntitiesModifiedAtRevision2WithAssociationQueries() { - doInJPA( this::entityManagerFactory, entityManager -> { - List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( 2 ); - assertEquals( 1, results.size() ); - assertEquals( "Type2", ( (TemplateType) results.get( 0 ) ).getName() ); - } ); - } - - @Test - public void testEntitiesModifiedAtRevision3WithAssociationQueries() { - doInJPA( this::entityManagerFactory, entityManager -> { - List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( 3 ); - assertEquals( 0, results.size() ); - } ); - } - - private List getEntitiesModifiedAtRevisionUsingAssociationQueryResults(Number revision) { - // Without fix HHH-11981, throw org.hibernate.QueryException - Parameter not bound : revision - return getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( Template.class, revision ) - .traverseRelation( "templateType", JoinType.INNER ) - .addProjection( AuditEntity.selectEntity( false ) ) - .up() - .add( AuditEntity.property( "templateType" ).hasChanged() ) - .getResultList(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java deleted file mode 100644 index 7ede6497f32e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@JiraKey(value = "HHH-11896") -public class AssociationQueryWithOnClauseTest extends BaseEnversJPAFunctionalTestCase { - - private EntityA a1; - private EntityA a2; - private EntityA a3; - - @Entity(name = "EntityA") - @Audited - public static class EntityA { - - @Id - private Long id; - - @ManyToOne - private EntityB bManyToOne; - - @OneToMany - @AuditJoinTable(name = "entitya_onetomany_entityb_aud") - private Set bOneToMany = new HashSet<>(); - - @ManyToMany - @JoinTable(name = "entitya_manytomany_entityb") - private Set bManyToMany = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public EntityB getbManyToOne() { - return bManyToOne; - } - - public void setbManyToOne(EntityB bManyToOne) { - this.bManyToOne = bManyToOne; - } - - public Set getbOneToMany() { - return bOneToMany; - } - - public void setbOneToMany(Set bOneToMany) { - this.bOneToMany = bOneToMany; - } - - public Set getbManyToMany() { - return bManyToMany; - } - - public void setbManyToMany(Set bManyToMany) { - this.bManyToMany = bManyToMany; - } - - } - - @Entity(name = "EntityB") - @Audited - public static class EntityB { - - @Id - private Long id; - - private String type; - - @Column(name = "num") - private int number; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - final EntityB b1t1 = new EntityB(); - b1t1.setId( 21L ); - b1t1.setType( "T1" ); - b1t1.setNumber( 1 ); - em.persist( b1t1 ); - final EntityB b2t2 = new EntityB(); - b2t2.setId( 22L ); - b2t2.setType( "T2" ); - b2t2.setNumber( 2 ); - em.persist( b2t2 ); - final EntityB b3t1 = new EntityB(); - b3t1.setId( 23L ); - b3t1.setType( "T1" ); - b3t1.setNumber( 3 ); - em.persist( b3t1 ); - - a1 = new EntityA(); - a1.setId( 1L ); - a1.setbManyToOne( b1t1 ); - a1.getbOneToMany().add( b1t1 ); - a1.getbOneToMany().add( b2t2 ); - a1.getbManyToMany().add( b1t1 ); - a1.getbManyToMany().add( b2t2 ); - em.persist( a1 ); - a2 = new EntityA(); - a2.setId( 2L ); - a2.setbManyToOne( b2t2 ); - a2.getbManyToMany().add( b3t1 ); - em.persist( a2 ); - a3 = new EntityA(); - a3.setId( 3L ); - a3.setbManyToOne( b3t1 ); - a3.getbOneToMany().add( b3t1 ); - a3.getbManyToMany().add( b3t1 ); - em.persist( a3 ); - - em.getTransaction().commit(); - } - - @Test - public void testManyToOne() { - List list = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "bManyToOne", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) - .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addProjection( AuditEntity.id() ) - .addProjection( AuditEntity.property( "b", "number" ) ) - .getResultList(); - assertArrayListEquals( list, tuple( a2.getId(), null ), tuple( a1.getId(), 1 ), tuple( a3.getId(), 3 ) ); - } - - @Test - public void testOneToMany() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "bOneToMany", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) - .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc() ) - .addProjection( AuditEntity.id() ) - .addProjection( AuditEntity.property( "b", "number" ) ) - .getResultList(); - assertArrayListEquals( list, tuple( a1.getId(), null ), tuple( a2.getId(), null ), tuple( a1.getId(), 1 ), tuple( a3.getId(), 3 ) ); - } - - @Test - public void testManyToMany() { - List list = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "bManyToMany", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) - .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc().nulls( NullPrecedence.FIRST ) ) - .addProjection(AuditEntity.id() ) - .addProjection( AuditEntity.property( "b", "number" ) ) - .getResultList(); - assertArrayListEquals( list, tuple( a1.getId(), null ), tuple( a1.getId(), 1 ), tuple( a2.getId(), 3 ), tuple( a3.getId(), 3 ) ); - } - - private Object[] tuple(final Long id, final Integer number) { - return new Object[]{ id, number }; - } - - private void assertArrayListEquals(final List actual, final Object[]... expected) { - assertEquals( "Unexpected number of results", expected.length, actual.size() ); - for ( int i = 0; i < expected.length; i++ ) { - final Object[] exp = expected[i]; - final Object[] act = (Object[]) actual.get( i ); - assertArrayEquals( exp, act ); - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java deleted file mode 100644 index 59d0bfc483c0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-13817" ) -public class AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest extends AssociationRevisionsOfEntitiesQueryTest { - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - settings.put( EnversSettings.STORE_DATA_AT_DELETE, true ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java deleted file mode 100644 index 7692d882b47c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Chris Cranford - */ -@JiraKey( "HHH-13817" ) -public class AssociationRevisionsOfEntitiesQueryTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Template.class, TemplateType.class }; - } - - @Test - @Priority(10) - public void initData() { - doInHibernate( this::sessionFactory, session -> { - final TemplateType type1 = new TemplateType( 1, "Type1" ); - final TemplateType type2 = new TemplateType( 2, "Type2" ); - session.persist( type1 ); - session.persist( type2 ); - - final Template template = new Template( 1, "Template1", type1 ); - session.persist( template ); - } ); - - doInHibernate( this::sessionFactory, session -> { - final TemplateType type = session.find( TemplateType.class, 2 ); - final Template template = session.find( Template.class, 1 ); - template.setName( "Template1-Updated" ); - template.setTemplateType( type ); - session.merge( template ); - } ); - - doInHibernate( this::sessionFactory, session -> { - final Template template = session.find( Template.class, 1 ); - session.remove( template ); - } ); - } - - @Test - public void testRevisionsOfEntityWithAssociationQueries() { - doInHibernate( this::sessionFactory, session -> { - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( Template.class, true, true ) - .add( AuditEntity.id().eq( 1 ) ) - .traverseRelation( "templateType", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "Type1" ) ) - .up() - .getResultList(); - assertEquals( 1, results.size() ); - assertEquals( "Template1", ( (Template) results.get( 0 ) ).getName() ); - } ); - - doInHibernate( this::sessionFactory, session -> { - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( Template.class, true, true ) - .add( AuditEntity.id().eq( 1 ) ) - .traverseRelation( "templateType", JoinType.INNER ) - .add( AuditEntity.property("name" ).eq("Type2" ) ) - .up() - .getResultList(); - - assertEquals( getConfiguration().isStoreDataAtDelete() ? 2 : 1, results.size() ); - for ( Object result : results ) { - assertEquals( "Template1-Updated", ( (Template) result ).getName() ); - } - } ); - } - - @Test - public void testAssociationQueriesNotAllowedWhenNotSelectingJustEntities() { - try { - doInHibernate( this::sessionFactory, session -> { - getAuditReader().createQuery() - .forRevisionsOfEntity( Template.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .traverseRelation("templateType", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "Type1" ) ) - .up() - .getResultList(); - } ); - - fail( "Test should have thrown IllegalStateException due to selectEntitiesOnly=false" ); - } - catch ( Exception e ) { - assertTyping( IllegalStateException.class, e ); - } - } - - @Entity(name = "TemplateType") - @Audited - public static class TemplateType { - @Id - private Integer id; - private String name; - - TemplateType() { - this( null, null ); - } - - TemplateType(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "Template") - @Audited - public static class Template { - @Id - private Integer id; - private String name; - @ManyToOne - private TemplateType templateType; - - Template() { - this( null, null, null ); - } - - Template(Integer id, String name, TemplateType type) { - this.id = id; - this.name = name; - this.templateType = type; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public TemplateType getTemplateType() { - return templateType; - } - - public void setTemplateType(TemplateType templateType) { - this.templateType = templateType; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java deleted file mode 100644 index afc0768db015..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java +++ /dev/null @@ -1,494 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToMany; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@JiraKey(value = "HHH-11735") -public class AssociationToManyJoinQueryTest extends BaseEnversJPAFunctionalTestCase { - - private EntityA aEmpty; - private EntityA aOneToMany; - private EntityA aManyToMany; - private EntityA aBidiOneToManyInverse; - private EntityA aBidiManyToManyOwning; - private EntityA aBidiManyToManyInverse; - private EntityB b1; - private EntityB b2; - private EntityB b3; - private EntityC c1; - private EntityC c2; - private EntityC c3; - - @Entity(name = "EntityA") - @Audited - public static class EntityA { - - @Id - private Long id; - - private String name; - - @OneToMany - @AuditJoinTable(name = "entitya_onetomany_entityb_aud") - private Set bOneToMany = new HashSet<>(); - - @ManyToMany - @JoinTable(name = "entitya_manytomany_entityb") - private Set bManyToMany = new HashSet<>(); - - @OneToMany(mappedBy = "bidiAManyToOneOwning") - private Set bidiCOneToManyInverse = new HashSet<>(); - - @ManyToMany - @AuditJoinTable(name = "entitya_entityc_bidi_aud") - private Set bidiCManyToManyOwning = new HashSet<>(); - - @ManyToMany(mappedBy = "bidiAManyToManyOwning") - private Set bidiCManyToManyInverse = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getbOneToMany() { - return bOneToMany; - } - - public void setbOneToMany(Set bOneToMany) { - this.bOneToMany = bOneToMany; - } - - public Set getbManyToMany() { - return bManyToMany; - } - - public void setbManyToMany(Set bManyToMany) { - this.bManyToMany = bManyToMany; - } - - public Set getBidiCOneToManyInverse() { - return bidiCOneToManyInverse; - } - - public void setBidiCOneToManyInverse(Set bidiCOneToManyInverse) { - this.bidiCOneToManyInverse = bidiCOneToManyInverse; - } - - public Set getBidiCManyToManyOwning() { - return bidiCManyToManyOwning; - } - - public void setBidiCManyToManyOwning(Set bidiCManyToManyOwning) { - this.bidiCManyToManyOwning = bidiCManyToManyOwning; - } - - public Set getBidiCManyToManyInverse() { - return bidiCManyToManyInverse; - } - - public void setBidiCManyToManyInverse(Set bidiCManyToManyInverse) { - this.bidiCManyToManyInverse = bidiCManyToManyInverse; - } - - } - - @Entity(name = "EntityB") - @Audited - public static class EntityB { - - @Id - private Long id; - - private String name; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityC") - @Audited - public static class EntityC { - - @Id - private Long id; - - private String name; - - @ManyToOne - private EntityA bidiAManyToOneOwning; - - @ManyToMany - @JoinTable(name = "entityc_entitya_bidi") - private Set bidiAManyToManyOwning = new HashSet<>(); - - @ManyToMany(mappedBy = "bidiCManyToManyOwning") - private Set bidiAManyToManyInverse = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public EntityA getBidiAManyToOneOwning() { - return bidiAManyToOneOwning; - } - - public void setBidiAManyToOneOwning(EntityA bidiAManyToOneOwning) { - this.bidiAManyToOneOwning = bidiAManyToOneOwning; - } - - public Set getBidiAManyToManyOwning() { - return bidiAManyToManyOwning; - } - - public void setBidiAManyToManyOwning(Set bidiAManyToManyOwning) { - this.bidiAManyToManyOwning = bidiAManyToManyOwning; - } - - public Set getBidiAManyToManyInverse() { - return bidiAManyToManyInverse; - } - - public void setBidiAManyToManyInverse(Set bidiAManyToManyInverse) { - this.bidiAManyToManyInverse = bidiAManyToManyInverse; - } - - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class, EntityC.class }; - } - - @Test - @Priority(10) - public void initData() { - // revision 1: - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - b1 = new EntityB(); - b1.setId( 21L ); - b1.setName( "B1" ); - em.persist( b1 ); - b2 = new EntityB(); - b2.setId( 22L ); - b2.setName( "B2" ); - em.persist( b2 ); - b3 = new EntityB(); - b3.setId( 23L ); - b3.setName( "B3" ); - em.persist( b3 ); - c1 = new EntityC(); - c1.setId( 31L ); - c1.setName( "C1" ); - em.persist( c1 ); - c2 = new EntityC(); - c2.setId( 32L ); - c2.setName( "C2" ); - em.persist( c2 ); - c3 = new EntityC(); - c3.setId( 33L ); - c3.setName( "C3" ); - em.persist( c3 ); - aEmpty = new EntityA(); - aEmpty.setId( 1L ); - aEmpty.setName( "aEmpty" ); - em.persist( aEmpty ); - aOneToMany = new EntityA(); - aOneToMany.setId( 2L ); - aOneToMany.setName( "aOneToMany" ); - aOneToMany.getbOneToMany().add( b1 ); - aOneToMany.getbOneToMany().add( b3 ); - em.persist( aOneToMany ); - aManyToMany = new EntityA(); - aManyToMany.setId( 3L ); - aManyToMany.setName( "aManyToMany" ); - aManyToMany.getbManyToMany().add( b1 ); - aManyToMany.getbManyToMany().add( b3 ); - em.persist( aManyToMany ); - aBidiOneToManyInverse = new EntityA(); - aBidiOneToManyInverse.setId( 4L ); - aBidiOneToManyInverse.setName( "aBidiOneToManyInverse" ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c1 ); - c1.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c3 ); - c3.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - em.persist( aBidiOneToManyInverse ); - aBidiManyToManyOwning = new EntityA(); - aBidiManyToManyOwning.setId( 5L ); - aBidiManyToManyOwning.setName( "aBidiManyToManyOwning" ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c1 ); - c1.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c3 ); - c3.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - em.persist( aBidiManyToManyOwning ); - aBidiManyToManyInverse = new EntityA(); - aBidiManyToManyInverse.setId( 6L ); - aBidiManyToManyInverse.setName( "aBidiManyToManyInverse" ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c1 ); - c1.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c3 ); - c3.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.persist( aBidiManyToManyInverse ); - em.getTransaction().commit(); - - // revision 2: - em.getTransaction().begin(); - aOneToMany.getbOneToMany().remove( b1 ); - aOneToMany.getbOneToMany().add( b2 ); - aManyToMany.getbManyToMany().remove( b1 ); - aManyToMany.getbManyToMany().add( b2 ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().remove( c1 ); - c1.setBidiAManyToOneOwning( null ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c2 ); - c2.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().remove( c1 ); - c1.getBidiAManyToManyInverse().remove( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c2 ); - c2.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().remove( c1 ); - c1.getBidiAManyToManyOwning().remove( aBidiManyToManyInverse ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c2 ); - c2.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.getTransaction().commit(); - } - - @Test - public void testOneToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testOneToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aOneToMany.getId() ) ); - } - - @Test - public void testManyToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testManyToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aManyToMany.getId() ) ); - } - - @Test - public void testBidiOneToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testBidiOneToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiOneToManyInverse.getId() ) ); - } - - @Test - public void testBidiManyToManyOwningInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testBidiManyToManyOwningLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiManyToManyOwning.getId() ) ); - } - - @Test - public void testBidiManyToManyInverseInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testBidiManyToManyInverseLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiManyToManyInverse.getId() ) ); - } - - private boolean listContainsIds(final Collection entities, final long... ids) { - final Set idSet = new HashSet<>(); - for ( final Object entity : entities ) { - idSet.add( ( (EntityA) entity ).getId() ); - } - boolean result = true; - for ( final long id : ids ) { - if ( !idSet.contains( id ) ) { - result = false; - break; - } - } - return result; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java deleted file mode 100644 index 4fa277607c65..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java +++ /dev/null @@ -1,506 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import jakarta.persistence.JoinTable; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.OneToMany; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@JiraKey(value = "HHH-11735") -public class AssociationToNotAuditedManyJoinQueryTest extends BaseEnversJPAFunctionalTestCase { - - private EntityA aEmpty; - private EntityA aOneToMany; - private EntityA aManyToMany; - private EntityA aBidiOneToManyInverse; - private EntityA aBidiManyToManyOwning; - private EntityA aBidiManyToManyInverse; - private EntityB b1; - private EntityB b2; - private EntityB b3; - private EntityC c1; - private EntityC c2; - private EntityC c3; - - @Entity(name = "EntityA") - @Audited - public static class EntityA { - - @Id - private Long id; - - private String name; - - @OneToMany - @AuditJoinTable(name = "entitya_onetomany_entityb_aud") - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Set bOneToMany = new HashSet<>(); - - @ManyToMany - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @JoinTable(name = "entitya_manytomany_entityb") - private Set bManyToMany = new HashSet<>(); - - // @OneToMany(mappedBy="bidiAManyToOneOwning") - // @Audited(targetAuditMode=RelationTargetAuditMode.NOT_AUDITED) - // private Set bidiCOneToManyInverse = new HashSet<>(); - - @ManyToMany - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - @AuditJoinTable(name = "entitya_entityc_bidi_aud") - private Set bidiCManyToManyOwning = new HashSet<>(); - - // @ManyToMany(mappedBy="bidiAManyToManyOwning") - // @Audited(targetAuditMode=RelationTargetAuditMode.NOT_AUDITED) - // private Set bidiCManyToManyInverse = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getbOneToMany() { - return bOneToMany; - } - - public void setbOneToMany(Set bOneToMany) { - this.bOneToMany = bOneToMany; - } - - public Set getbManyToMany() { - return bManyToMany; - } - - public void setbManyToMany(Set bManyToMany) { - this.bManyToMany = bManyToMany; - } - - // public Set getBidiCOneToManyInverse() { - // return bidiCOneToManyInverse; - // } - // - // - // - // public void setBidiCOneToManyInverse(Set bidiCOneToManyInverse) { - // this.bidiCOneToManyInverse = bidiCOneToManyInverse; - // } - - public Set getBidiCManyToManyOwning() { - return bidiCManyToManyOwning; - } - - public void setBidiCManyToManyOwning(Set bidiCManyToManyOwning) { - this.bidiCManyToManyOwning = bidiCManyToManyOwning; - } - - // public Set getBidiCManyToManyInverse() { - // return bidiCManyToManyInverse; - // } - // - // - // public void setBidiCManyToManyInverse(Set bidiCManyToManyInverse) { - // this.bidiCManyToManyInverse = bidiCManyToManyInverse; - // } - - } - - @Entity(name = "EntityB") - public static class EntityB { - - @Id - private Long id; - - private String name; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityC") - public static class EntityC { - - @Id - private Long id; - - private String name; - - // @ManyToOne - // private EntityA bidiAManyToOneOwning; - - // @ManyToMany - // @JoinTable(name="entityc_entitya_bidi") - // private Set bidiAManyToManyOwning = new HashSet<>(); - - @ManyToMany(mappedBy = "bidiCManyToManyOwning") - private Set bidiAManyToManyInverse = new HashSet<>(); - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - // public EntityA getBidiAManyToOneOwning() { - // return bidiAManyToOneOwning; - // } - // - // - // public void setBidiAManyToOneOwning(EntityA bidiAManyToOneOwning) { - // this.bidiAManyToOneOwning = bidiAManyToOneOwning; - // } - - // public Set getBidiAManyToManyOwning() { - // return bidiAManyToManyOwning; - // } - // - // - // public void setBidiAManyToManyOwning(Set bidiAManyToManyOwning) { - // this.bidiAManyToManyOwning = bidiAManyToManyOwning; - // } - - public Set getBidiAManyToManyInverse() { - return bidiAManyToManyInverse; - } - - public void setBidiAManyToManyInverse(Set bidiAManyToManyInverse) { - this.bidiAManyToManyInverse = bidiAManyToManyInverse; - } - - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class, EntityC.class }; - } - - @Test - @Priority(10) - public void initData() { - // revision 1: - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - b1 = new EntityB(); - b1.setId( 21L ); - b1.setName( "B1" ); - em.persist( b1 ); - b2 = new EntityB(); - b2.setId( 22L ); - b2.setName( "B2" ); - em.persist( b2 ); - b3 = new EntityB(); - b3.setId( 23L ); - b3.setName( "B3" ); - em.persist( b3 ); - c1 = new EntityC(); - c1.setId( 31L ); - c1.setName( "C1" ); - em.persist( c1 ); - c2 = new EntityC(); - c2.setId( 32L ); - c2.setName( "C2" ); - em.persist( c2 ); - c3 = new EntityC(); - c3.setId( 33L ); - c3.setName( "C3" ); - em.persist( c3 ); - aEmpty = new EntityA(); - aEmpty.setId( 1L ); - aEmpty.setName( "aEmpty" ); - em.persist( aEmpty ); - aOneToMany = new EntityA(); - aOneToMany.setId( 2L ); - aOneToMany.setName( "aOneToMany" ); - aOneToMany.getbOneToMany().add( b1 ); - aOneToMany.getbOneToMany().add( b3 ); - em.persist( aOneToMany ); - aManyToMany = new EntityA(); - aManyToMany.setId( 3L ); - aManyToMany.setName( "aManyToMany" ); - aManyToMany.getbManyToMany().add( b1 ); - aManyToMany.getbManyToMany().add( b3 ); - em.persist( aManyToMany ); - aBidiOneToManyInverse = new EntityA(); - aBidiOneToManyInverse.setId( 4L ); - aBidiOneToManyInverse.setName( "aBidiOneToManyInverse" ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c1 ); - // c1.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c3 ); - // c3.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - em.persist( aBidiOneToManyInverse ); - aBidiManyToManyOwning = new EntityA(); - aBidiManyToManyOwning.setId( 5L ); - aBidiManyToManyOwning.setName( "aBidiManyToManyOwning" ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c1 ); - c1.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c3 ); - c3.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - em.persist( aBidiManyToManyOwning ); - aBidiManyToManyInverse = new EntityA(); - aBidiManyToManyInverse.setId( 6L ); - aBidiManyToManyInverse.setName( "aBidiManyToManyInverse" ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c1 ); - // c1.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c3 ); - // c3.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.persist( aBidiManyToManyInverse ); - em.getTransaction().commit(); - - // revision 2: - em.getTransaction().begin(); - aOneToMany.getbOneToMany().remove( b1 ); - aOneToMany.getbOneToMany().add( b2 ); - aManyToMany.getbManyToMany().remove( b1 ); - aManyToMany.getbManyToMany().add( b2 ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().remove( c1 ); - // c1.setBidiAManyToOneOwning( null ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c2 ); - // c2.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().remove( c1 ); - c1.getBidiAManyToManyInverse().remove( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c2 ); - c2.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().remove( c1 ); - // c1.getBidiAManyToManyOwning().remove( aBidiManyToManyInverse ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c2 ); - // c2.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.getTransaction().commit(); - } - - @Test - public void testOneToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testOneToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aOneToMany.getId() ) ); - } - - @Test - public void testManyToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testManyToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aManyToMany.getId() ) ); - } - - // @Test - // public void testBidiOneToManyInnerJoin() { - // List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list1.size()); - // EntityA entityA1 = (EntityA) list1.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA1.getId()); - // - // List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty()); - // - // List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list3.size()); - // EntityA entityA3 = (EntityA) list3.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA3.getId()); - // - // List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty()); - // } - // - // @Test - // public void testBidiOneToManyLeftJoin() { - // List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.LEFT, "c" ).up() - // .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" - // ) ) ) - // .getResultList(); - // assertTrue("Expected the correct entities to be resolved", listContainsIds(list, aEmpty.getId(), - // aBidiOneToManyInverse.getId())); - // } - - @Test - public void testBidiManyToManyOwningInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); - } - - @Test - public void testBidiManyToManyOwningLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiManyToManyOwning.getId() ) ); - } - - // @Test - // public void testBidiManyToManyInverseInnerJoin() { - // List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list1.size()); - // EntityA entityA1 = (EntityA) list1.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA1.getId()); - // - // List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty()); - // - // List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list3.size()); - // EntityA entityA3 = (EntityA) list3.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA3.getId()); - // - // List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty()); - // } - // - // @Test - // public void testBidiManyToManyInverseLeftJoin() { - // List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.LEFT, "c" ).up() - // .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" - // ) ) ) - // .getResultList(); - // assertTrue("Expected the correct entities to be resolved", listContainsIds(list, aEmpty.getId(), - // aBidiManyToManyInverse.getId())); - // } - - private boolean listContainsIds(final Collection entities, final long... ids) { - final Set idSet = new HashSet<>(); - for ( final Object entity : entities ) { - idSet.add( ( (EntityA) entity ).getId() ); - } - boolean result = true; - for ( final long id : ids ) { - if ( !idSet.contains( id ) ) { - result = false; - break; - } - } - return result; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java deleted file mode 100644 index 90a79ed471da..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.List; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.query.entities.Address; -import org.hibernate.orm.test.envers.integration.query.entities.Car; -import org.hibernate.orm.test.envers.integration.query.entities.Person; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@SuppressWarnings("unchecked") -public class AssociationToOneLeftJoinQueryTest extends BaseEnversJPAFunctionalTestCase { - - private Car car1; - private Car car2; - private Car car3; - private Person person1; - private Person person2; - private Address address1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Car.class, Person.class, Address.class }; - } - - @Test - @Priority(10) - public void initData() { - final EntityManager em = getEntityManager(); - - // revision 1 - em.getTransaction().begin(); - address1 = new Address("address1", 1); - em.persist(address1); - Address address2 = new Address("address2", 2); - em.persist(address2); - person1 = new Person("person1", 30, address1); - em.persist(person1); - person2 = new Person("person2", 20, null); - em.persist(person2); - Person person3 = new Person("person3", 10, address1); - em.persist(person3); - car1 = new Car("car1"); - car1.setOwner(person1); - em.persist(car1); - car2 = new Car("car2"); - car2.setOwner(person2); - em.persist(car2); - car3 = new Car("car3"); - em.persist(car3); - em.getTransaction().commit(); - - // revision 2 - em.getTransaction().begin(); - person2.setAge(21); - em.getTransaction().commit(); - } - - @Test - public void testLeftJoinOnAuditedEntity() { - final AuditReader auditReader = getAuditReader(); - // all cars where the owner has an age of 20 or where there is no owner at all - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.LEFT, "p" ) - .up().add( AuditEntity.or( AuditEntity.property( "p", "age").eq( 20 ), - AuditEntity.relatedId( "owner" ).eq( null ) ) ) - .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); - assertEquals( "The result list should have 2 results, car1 because its owner has an age of 30 and car3 because it has no owner at all", 2, resultList.size() ); - Car car0 = resultList.get(0); - Car car1 = resultList.get(1); - assertEquals( "Unexpected car at index 0", car2.getId(), car0.getId() ); - assertEquals( "Unexpected car at index 0", car3.getId(), car1.getId() ); - } - - /** - * In a first attempt to implement left joins in Envers, a full join - * has been performed and than the entities has been filtered in the - * where clause. However, this approach did only work for inner joins - * but not for left joins. One of the defects in this approach is, - * that audit entities, which have a null 'relatedId' are and do not - * match the query criterias, still joined to other entities which matched - * match the query criterias. - * This test ensures that this defect is no longer in the current implementation. - */ - @Test - public void testEntitiesWithANullRelatedIdAreNotJoinedToOtherEntities() { - final AuditReader auditReader = getAuditReader(); - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.LEFT, "p" ) - .up().add( AuditEntity.and( AuditEntity.property( "make" ).eq( "car3" ), AuditEntity.property( "p", "age" ).eq( 30 ) ) ) - .getResultList(); - assertTrue( "Expected no cars to be returned, because car3 does not have an owner", resultList.isEmpty() ); - } - - /** - * In a first attempt to implement left joins in Envers, a full join - * has been performed and than the entities has been filtered in the - * where clause. However, this approach did only work for inner joins - * but not for left joins. One of the defects in this approach is, - * that audit entities, which have a null 'relatedId' and do match - * the query criterias, have been returned multiple times by a query. - * This test ensures that this defect is no longer in the current implementation. - */ - @Test - public void testEntitiesWithANullRelatedIdAreNotReturnedMoreThanOnce() { - final AuditReader auditReader = getAuditReader(); - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.LEFT, "p" ) - .up().add( AuditEntity.or( AuditEntity.property( "make" ).eq( "car3" ), AuditEntity.property( "p", "age" ).eq( 10 ) ) ) - .getResultList(); - assertEquals( "Expected car3 to be returned but only once", 1, resultList.size() ); - assertEquals( "Unexpected car at index 0", car3.getId(), resultList.get(0).getId() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java deleted file mode 100644 index 7b17320d57cd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java +++ /dev/null @@ -1,366 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@SuppressWarnings("rawtypes") -@JiraKey(value = "HHH-11895") -public class ComponentQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Embeddable - public static class Symbol { - - @ManyToOne - private SymbolType type; - private String identifier; - - public Symbol() { - - } - - public Symbol(final SymbolType type, final String identifier) { - this.type = type; - this.identifier = identifier; - } - - public SymbolType getType() { - return type; - } - - public void setType(SymbolType type) { - this.type = type; - } - - public String getIdentifier() { - return identifier; - } - - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - } - - @Entity(name = "SymbolType") - @Audited - public static class SymbolType { - - @Id - @GeneratedValue - private Integer id; - - private String name; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "Asset") - @Audited - public static class Asset { - - @Id - @GeneratedValue - private Integer id; - - @Embedded - private Symbol singleSymbol; - - @ElementCollection - private Set multiSymbols = new HashSet<>(); - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Symbol getSingleSymbol() { - return singleSymbol; - } - - public void setSingleSymbol(Symbol singleSymbol) { - this.singleSymbol = singleSymbol; - } - - public Set getMultiSymbols() { - return multiSymbols; - } - - public void setMultiSymbols(Set multiSymbols) { - this.multiSymbols = multiSymbols; - } - - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Asset.class, Symbol.class, SymbolType.class }; - } - - private SymbolType type1; - private SymbolType type2; - - private Asset asset1; - private Asset asset2; - private Asset asset3; - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - type1 = new SymbolType(); - type1.setName( "T1" ); - em.persist( type1 ); - - type2 = new SymbolType(); - type2.setName( "T2" ); - em.persist( type2 ); - - asset1 = new Asset(); - em.persist( asset1 ); - - asset2 = new Asset(); - asset2.setSingleSymbol( new Symbol( type1, "X1" ) ); - asset2.getMultiSymbols().add( new Symbol( type1, "X" ) ); - em.persist( asset2 ); - - asset3 = new Asset(); - asset3.setSingleSymbol( new Symbol( type2, "X2" ) ); - asset3.getMultiSymbols().add( new Symbol( type1, "Y" ) ); - asset3.getMultiSymbols().add( new Symbol( type2, "X" ) ); - em.persist( asset3 ); - - em.getTransaction().commit(); - } - - @Test - public void testSingleSymbolUsingIdentifier() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "identifier" ).eq( "X1" ) ) - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset2 to be returned", Collections.singletonList( asset2.getId() ), actual ); - } - - @Test - public void testMultiSymbolUsingIdentifier() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "identifier" ).like( "X%" ) ) - .up() - .addProjection( AuditEntity.id() ) - .addOrder( AuditEntity.id().asc() ) - .getResultList(); - List expected = new ArrayList<>(); - Collections.addAll( expected, asset2.getId(), asset3.getId() ); - assertEquals( "Expected only the ids of the assets with symbol T1", expected, actual ); - } - - @Test - public void testSingleSymbolUsingType() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "type" ).eq( type1 ) ) - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset2 to be returned", Collections.singletonList( asset2.getId() ), actual ); - } - - @Test - public void testMultiSymbolUsingType() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "type" ).eq( type2 ) ) - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( " Expected only asset3 to be returned", Collections.singletonList( asset3.getId() ), actual ); - } - - @Test - public void testJoinOnSingleComponentAssociation() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .traverseRelation( "type", JoinType.INNER, "t" ) - .add( AuditEntity.property( "t", "name" ).eq( "T1" ) ) - .up() - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset2 to be returned", Collections.singletonList( asset2.getId() ), actual ); - } - - @Test - public void testJoinOnMultiComponentAssociation() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .traverseRelation( "type", JoinType.INNER, "t" ) - .add( AuditEntity.property( "t", "name" ).eq( "T2" ) ) - .up() - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset3 to be returned", Collections.singletonList( asset3.getId() ), actual ); - } - - @Test - public void testOrderingOnSingleComponent() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "singleSymbol", JoinType.LEFT, "s" ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .getResultList(); - List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId() ); - assertEquals( "Expected all assets in correct order", expected, actual ); - } - - @Test - public void testOrderingOnMultiComponent() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "multiSymbols", JoinType.LEFT, "s" ) - .traverseRelation( "type", JoinType.LEFT, "t" ) - .addOrder( AuditEntity.property( "t", "name" ).asc().nulls( NullPrecedence.FIRST ) ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .getResultList(); - List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId(), asset3.getId() ); - assertEquals( "Expected all assets in correct order", expected, actual ); - } - - @Test - public void testProjectionOnSingleComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .addProjection( AuditEntity.property( "s", "identifier" ) ) - .getResultList(); - assertEquals( "Expected the symbol identifier of asset2 to be returned", Collections.singletonList( "X1" ), actual ); - } - - @Test - public void testProjectionOnMultiComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .addProjection( AuditEntity.property( "s", "identifier" ) ) - .getResultList(); - assertEquals( "Expected the symbol identifier of asset2 to be returned", Collections.singletonList( "X" ), actual ); - } - - @Test - public void testFunctionOnSingleComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .addProjection( AuditEntity.function( "CONCAT", AuditEntity.property( "s", "identifier" ), "Z" ) ) - .getResultList(); - assertEquals( "Expecte the symbol identfier of asset2 concatenated with 'Z'", Collections.singletonList( "X1Z" ), actual ); - } - - @Test - public void testFunctionOnMultiComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .addProjection( AuditEntity.function( "CONCAT", AuditEntity.property( "s", "identifier" ), "Z" ) ) - .getResultList(); - assertEquals( "Expecte the symbol identfier of asset2 concatenated with 'Z'", Collections.singletonList( "XZ" ), actual ); - } - - @Test - @JiraKey(value = "HHH-11896") - public void testOnClauseOnSingleSymbol() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "singleSymbol", JoinType.LEFT, "s", AuditEntity.property( "s", "type" ).eq( type1 ) ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc() ) - .getResultList(); - final List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset3.getId(), asset2.getId() ); - assertEquals( "Expected the correct ordering. Assets which do not have a symbol of type1 should come first (null first)", expected, actual ); - } - - @Test - @JiraKey(value = "HHH-11896") - public void testOnClauseOnMultiSymbol() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "multiSymbols", JoinType.LEFT, "s", AuditEntity.property( "s", "type" ).eq( type1 ) ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc() ) - .getResultList(); - final List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId() ); - assertEquals( "Expected the correct ordering. Assets which do not have a symbol of type1 should come first (null first)", expected, actual ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java deleted file mode 100644 index 1ee31a7c8222..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomRevEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class CustomRevEntityQuery extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Long timestamp; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class, CustomRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); - - em.persist( site1 ); - em.persist( site2 ); - - id1 = site1.getId(); - id2 = site2.getId(); - - em.getTransaction().commit(); - - Thread.sleep( 100 ); - - timestamp = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - - site1.setStr1( "c" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsOfId1Query() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - assert result.get( 0 )[0].equals( new StrIntTestEntity( "a", 10, id1 ) ); - assert result.get( 0 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 1; - - assert result.get( 1 )[0].equals( new StrIntTestEntity( "c", 10, id1 ) ); - assert result.get( 1 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 1 )[1]).getCustomId() == 2; - } - - @Test - public void testRevisionsOfId2Query() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - assert result.get( 0 )[0].equals( new StrIntTestEntity( "b", 15, id2 ) ); - assert result.get( 0 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 1; - } - - @Test - public void testRevisionPropertyRestriction() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .add( AuditEntity.revisionProperty( "customTimestamp" ).ge( timestamp ) ) - .getResultList(); - - assert result.get( 0 )[0].equals( new StrIntTestEntity( "c", 10, id1 ) ); - assert result.get( 0 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 2; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomTimestamp() >= timestamp; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java deleted file mode 100644 index 9860224a938e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class DeletedEntities extends BaseEnversJPAFunctionalTestCase { - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 11 ); - - em.persist( site1 ); - em.persist( site2 ); - - id2 = site2.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - site2 = em.find( StrIntTestEntity.class, id2 ); - em.remove( site2 ); - - em.getTransaction().commit(); - } - - @Test - public void testProjectionsInEntitiesAtRevision() { - assert getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .getResultList().size() == 2; - assert getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .getResultList().size() == 1; - - assert (Long) getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .addProjection( AuditEntity.id().count() ).getResultList().get( 0 ) == 2; - assert (Long) getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .addProjection( AuditEntity.id().count() ).getResultList().get( 0 ) == 1; - } - - @Test - public void testRevisionsOfEntityWithoutDelete() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - assert result.size() == 1; - - assert ((Object[]) result.get( 0 ))[0].equals( new StrIntTestEntity( "b", 11, id2 ) ); - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() == 1; - assert ((Object[]) result.get( 0 ))[2].equals( RevisionType.ADD ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java deleted file mode 100644 index cc37683f4ee2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@JiraKey(value = "HHH-11573") -public class EntityTypeQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Entity(name = "EntityA") - @Audited - @Inheritance(strategy = InheritanceType.JOINED) - public static class EntityA { - - @Id - @GeneratedValue - private Long id; - private String name; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - } - - @Entity(name = "EntityB") - @Audited - public static class EntityB extends EntityA { - - } - - private EntityA a1; - private EntityA a2; - private EntityB b1; - private EntityB b2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - a1 = new EntityA(); - a1.setName( "a1" ); - entityManager.persist( a1 ); - - a2 = new EntityA(); - a2.setName( "a2" ); - entityManager.persist( a2 ); - - b1 = new EntityB(); - b1.setName( "b1" ); - entityManager.persist( b1 ); - - b2 = new EntityB(); - b2.setName( "b2" ); - entityManager.persist( b2 ); - } ); - } - - @Test - public void testRestrictToSubType() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .add( AuditEntity.entityType( EntityB.class ) ) - .addProjection( AuditEntity.property( "name" ) ) - .addOrder( AuditEntity.property( "name" ).asc() ) - .getResultList(); - assertEquals( "Expected only entities of type EntityB to be selected", list( "b1", "b2" ), list ); - } - - @Test - public void testRestrictToSuperType() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .add( AuditEntity.entityType( EntityA.class ) ) - .addProjection( AuditEntity.property( "name" ) ) - .addOrder( AuditEntity.property( "name" ).asc() ) - .getResultList(); - assertEquals( "Expected only entities of type EntityA to be selected", list( "a1", "a2" ), list ); - } - - private List list(final String... elements) { - final List result = new ArrayList<>(); - Collections.addAll( result, elements ); - return result; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java deleted file mode 100644 index 6b53edd8abe1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import org.hibernate.envers.exception.AuditException; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.fail; - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-8058" ) -public class EntityWithChangesQueryNoModifiedFlagTest extends AbstractEntityWithChangesQueryTest { - @Test - public void testEntityRevisionsWithChangesQueryNoDeletions() { - try { - super.testEntityRevisionsWithChangesQueryNoDeletions(); - fail( "This should have failed with AuditException since test case doesn't enable modifiedFlag" ); - } - catch ( Exception e ) { - assertTyping( AuditException.class, e ); - } - } - - @Test - public void testEntityRevisionsWithChangesQuery() { - try { - super.testEntityRevisionsWithChangesQuery(); - fail( "This should have failed with AuditException since test case doesn't enable modifiedFlag" ); - } - catch ( Exception e ) { - assertTyping( AuditException.class, e ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java deleted file mode 100644 index e398c895c30f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-8058" ) -public class EntityWithChangesQueryStoreDeletionDataTest extends AbstractEntityWithChangesQueryTest { - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, Boolean.TRUE ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, Boolean.TRUE ); - super.addConfigOptions( options ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java deleted file mode 100644 index ff7b198a149d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-8058" ) -public class EntityWithChangesQueryTest extends AbstractEntityWithChangesQueryTest { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, Boolean.TRUE ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java deleted file mode 100644 index 5d0f1b90b63c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.OneToOne; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11416") -public class JoinedInheritancePropertyJoinTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityA.class, EntityB.class, EntityC.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityC c1 = new EntityC(); - c1.setId( 1 ); - c1.setName( "c1" ); - c1.setFoo( "foo" ); - c1.setPropB( "propB" ); - c1.setPropC( "propC" ); - entityManager.persist( c1 ); - - final EntityA a1 = new EntityA(); - a1.setId( 1 ); - a1.setRelationToC( c1 ); - a1.setPropA( "propC" ); - entityManager.persist( a1 ); - } ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUnrelatedPropertyJoin() { - // The problem is that this query succeeds on DefaultAuditStrategy, fails on ValidityAuditStrategy - // - // ValidityAuditStrategy - // --------------------- - // select - // joinedinhe0_.id as id1_1_, - // joinedinhe0_.REV as REV2_1_, - // joinedinhe0_.REVTYPE as REVTYPE3_1_, - // joinedinhe0_.REVEND as REVEND4_1_, - // joinedinhe0_.relationToC_id as relation5_1_ - // from - // EntityA_AUD joinedinhe0_ - // inner join EntityC_AUD joinedinhe1_ - // on (joinedinhe0_.relationToC_id=joinedinhe1_.id or (joinedinhe0_.relationToC_id is null) - // and (joinedinhe1_.id is null)) - // where - // joinedinhe0_.REV<=? - // and - // joinedinhe0_.REVTYPE<>? - // and - // (joinedinhe0_.REVEND>? or joinedinhe0_.REVEND is null) - // and - // joinedinhe1_.REV<=? - // and - // (joinedinhe1_1_.REVEND>? or joinedinhe1_1_.REVEND is null) - // - // Error: SQL Error: 42122, SQLState: 42S22 - // Column "JOINEDINHE1_1_.REVEND" not found - // - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "relationToC", JoinType.INNER ) - .getResultList(); - assertEquals( 1, results.size() ); - } - - @Test - public void testHibernateUnrelatedPropertyQuery() { - final String queryString = "FROM EntityA a Inner Join EntityC c ON a.propA = c.propC Where c.propB = :propB"; - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = entityManager.createQuery( queryString ).setParameter( "propB", "propB" ).getResultList(); - assertEquals( 1, results.size() ); - } ); - } - - @Entity(name = "EntityA") - @Audited - public static class EntityA { - @Id - private Integer id; - private String propA; - @OneToOne - private EntityC relationToC; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getPropA() { - return propA; - } - - public void setPropA(String propA) { - this.propA = propA; - } - - public EntityC getRelationToC() { - return relationToC; - } - - public void setRelationToC(EntityC relationToC) { - this.relationToC = relationToC; - } - } - - @Entity(name = "EntityB") - @Audited - @Inheritance(strategy = InheritanceType.JOINED) - public static class EntityB { - @Id - private Integer id; - private String name; - private String propB; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPropB() { - return propB; - } - - public void setPropB(String propB) { - this.propB = propB; - } - } - - @Entity(name = "EntityC") - @Audited - public static class EntityC extends EntityB { - private String foo; - private String propC; - - public String getFoo() { - return foo; - } - - public void setFoo(String foo) { - this.foo = foo; - } - - public String getPropC() { - return propC; - } - - public void setPropC(String propC) { - this.propC = propC; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java deleted file mode 100644 index ab8dc3911346..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.criteria.AuditDisjunction; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@SuppressWarnings("unchecked") -public class MaximalizePropertyQuery extends BaseEnversJPAFunctionalTestCase { - Integer id1; - Integer id2; - Integer id3; - Integer id4; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); - StrIntTestEntity site3 = new StrIntTestEntity( "c", 42 ); - StrIntTestEntity site4 = new StrIntTestEntity( "d", 52 ); - - em.persist( site1 ); - em.persist( site2 ); - em.persist( site3 ); - em.persist( site4 ); - - id1 = site1.getId(); - id2 = site2.getId(); - id3 = site3.getId(); - id4 = site4.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setStr1( "d" ); - site2.setNumber( 20 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setNumber( 30 ); - site2.setStr1( "z" ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setNumber( 5 ); - site2.setStr1( "a" ); - - em.getTransaction().commit(); - - // Revision 5 - em.getTransaction().begin(); - site4 = em.find( StrIntTestEntity.class, id4 ); - em.remove( site4 ); - em.getTransaction().commit(); - } - - @Test - public void testMaximizeWithIdEq() { - List revs_id1 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( - AuditEntity.property( "number" ).maximize() - .add( AuditEntity.id().eq( id2 ) ) - ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - assert Arrays.asList( 2, 3, 4 ).equals( revs_id1 ); - } - - @Test - public void testMinimizeWithPropertyEq() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( - AuditEntity.property( "number" ).minimize() - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - ) - .getResultList(); - - assert Arrays.asList( 1 ).equals( result ); - } - - @Test - public void testMaximizeRevision() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( - AuditEntity.revisionNumber().maximize() - .add( AuditEntity.property( "number" ).eq( 10 ) ) - ) - .getResultList(); - - assert Arrays.asList( 2 ).equals( result ); - } - - @Test - @JiraKey(value = "HHH-7800") - public void testMaximizeInDisjunction() { - List idsToQuery = Arrays.asList( id1, id3 ); - - AuditDisjunction disjunction = AuditEntity.disjunction(); - - for ( Integer id : idsToQuery ) { - disjunction.add( AuditEntity.revisionNumber().maximize().add( AuditEntity.id().eq( id ) ) ); - } - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( disjunction ) - .getResultList(); - - Set idsSeen = new HashSet(); - for ( Object o : result ) { - StrIntTestEntity entity = (StrIntTestEntity) o; - Integer id = entity.getId(); - Assert.assertTrue( "Entity with ID " + id + " returned but not queried for.", idsToQuery.contains( id ) ); - if ( !idsSeen.add( id ) ) { - Assert.fail( "Multiple revisions returned with ID " + id + "; expected only one." ); - } - } - } - - @Test - @JiraKey(value = "HHH-7827") - public void testAllLatestRevisionsOfEntityType() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext() ) - .addOrder( AuditEntity.property( "id" ).asc() ) - .getResultList(); - - Assert.assertEquals( 4, result.size() ); - - Object[] result1 = (Object[]) result.get( 0 ); - Object[] result2 = (Object[]) result.get( 1 ); - Object[] result3 = (Object[]) result.get( 2 ); - Object[] result4 = (Object[]) result.get( 3 ); - - checkRevisionData( result1, 4, RevisionType.MOD, new StrIntTestEntity( "d", 5, id1 ) ); - checkRevisionData( result2, 4, RevisionType.MOD, new StrIntTestEntity( "a", 20, id2 ) ); - checkRevisionData( result3, 1, RevisionType.ADD, new StrIntTestEntity( "c", 42, id3 ) ); - checkRevisionData( result4, 5, RevisionType.DEL, new StrIntTestEntity( null, null, id4 ) ); - } - - private void checkRevisionData(Object[] result, int revision, RevisionType type, StrIntTestEntity entity) { - Assert.assertEquals( entity, result[0] ); - Assert.assertEquals( revision, ((SequenceIdRevisionEntity) result[1]).getId() ); - Assert.assertEquals( type, result[2] ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java deleted file mode 100644 index 61602674dbbb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import static org.junit.Assert.assertEquals; - -import java.util.Collections; -import java.util.List; - -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@JiraKey(value = "HHH-11895") -public class NestedComponentQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Embeddable - public static class Component1 { - - private String name1; - - @Embedded - private Component2 component2; - - public String getName1() { - return name1; - } - - public void setName1(String name1) { - this.name1 = name1; - } - - public Component2 getComponent2() { - return component2; - } - - public void setComponent2(Component2 component2) { - this.component2 = component2; - } - } - - @Embeddable - public static class Component2 { - - private String name2; - - public String getName2() { - return name2; - } - - public void setName2(String name2) { - this.name2 = name2; - } - } - - @Entity(name = "EntityOwner") - @Audited - public static class EntityOwner { - - @Id - @GeneratedValue - private Integer id; - - @Embedded - private Component1 component1; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public Component1 getComponent1() { - return component1; - } - - public void setComponent1(Component1 component1) { - this.component1 = component1; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityOwner.class, Component1.class, Component2.class }; - } - - private EntityOwner owner1; - private EntityOwner owner2; - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - owner1 = new EntityOwner(); - Component1 component1 = new Component1(); - component1.setName1( "X" ); - owner1.setComponent1( component1 ); - Component2 component2 = new Component2(); - component2.setName2( "Y" ); - component1.setComponent2( component2 ); - em.persist( owner1 ); - owner2 = new EntityOwner(); - Component1 component12 = new Component1(); - component12.setName1( "Z" ); - owner2.setComponent1( component12 ); - Component2 component22 = new Component2(); - component22.setName2( "Z" ); - component12.setComponent2( component22 ); - em.persist( owner2 ); - em.getTransaction().commit(); - } - - @Test - public void testQueryNestedComponent() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityOwner.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "component1", JoinType.INNER, "c1" ) - .traverseRelation( "component2", JoinType.INNER, "c2" ) - .add( AuditEntity.property( "c2", "name2" ).eq( "Y" ) ) - .getResultList(); - assertEquals( "Expected owner1 to be returned", Collections.singletonList( owner1.getId() ), actual ); - } - - @Test - public void testQueryNestedComponentWithPropertyEquals() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityOwner.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "component1", JoinType.INNER, "c1" ) - .traverseRelation( "component2", JoinType.INNER, "c2" ) - .add( AuditEntity.property( "c1", "name1" ).eqProperty( "c2", "name2" ) ) - .getResultList(); - assertEquals( "Expected owner2 to be returned", Collections.singletonList( owner2.getId() ), actual ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java deleted file mode 100644 index 330ba0bbefbb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.fail; - -/** - * @author Chris Cranford - */ -public class NotAuditedQueryTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { NonAuditedEntity.class }; - } - - @Test - @JiraKey(value = "HHH-11558") - public void testRevisionsOfEntityNotAuditedMultipleResults() { - try { - getAuditReader().createQuery() - .forRevisionsOfEntity( NonAuditedEntity.class, false, false ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } - } - - @Test - @JiraKey(value = "HHH-11558") - public void testRevisionsOfEntityNotAuditedSingleResult() { - try { - getAuditReader().createQuery() - .forRevisionsOfEntity( NonAuditedEntity.class, false, false ) - .setMaxResults( 1 ) - .getSingleResult(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } - } - - @Test - @JiraKey(value = "HHH-11558") - public void testForEntitiesAtRevisionNotAuditedMultipleResults() { - try { - getAuditReader().createQuery() - .forEntitiesAtRevision( NonAuditedEntity.class, 1 ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } - } - - @Test - @JiraKey(value = "HHH-11558") - public void testForEntitiesAtRevisionNotAuditedSingleResult() { - try { - getAuditReader().createQuery() - .forEntitiesAtRevision( NonAuditedEntity.class, 1 ) - .setMaxResults( 1 ) - .getSingleResult(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } - } - - @Test - @JiraKey(value = "HHH-11558") - public void testForEntitiesModifiedAtRevisionNotAuditedMultipleResults() { - try { - getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } - } - - @Test - @JiraKey(value = "HHH-11558") - public void testForEntitiesModifiedAtRevisionNotAuditedSingleResult() { - try { - getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) - .setMaxResults( 1 ) - .getSingleResult(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } - } - - @Entity(name = "NonAuditedEntity") - public static class NonAuditedEntity { - @Id - private Integer id; - private String data; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java deleted file mode 100644 index b5a83c0d44eb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.junit.Assert; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -/** - * Tests for the {@link NullPrecedence} query option on order-bys. - * - * @author Chris Cranford - */ -@JiraKey( value = "HHH-14981" ) -public class NullPrecedenceTest extends BaseEnversJPAFunctionalTestCase { - - Integer id1; - Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrIntTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - id1 = TransactionUtil.doInJPA(this::entityManagerFactory, entityManager -> { - StrIntTestEntity entity1 = new StrIntTestEntity( null, 1 ); - entityManager.persist( entity1 ); - return entity1.getId(); - } ); - // Revision 2 - id2 = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - StrIntTestEntity entity2 = new StrIntTestEntity( "two", 2 ); - entityManager.persist( entity2 ); - return entity2.getId(); - } ); - } - - @Test - public void testNullPrecedenceFirst() { - List results = getAuditReader().createQuery().forRevisionsOfEntity( StrIntTestEntity.class, true, false ) - .addProjection( AuditEntity.property( "number" ) ) - .addOrder( AuditEntity.property( "str1" ).asc().nulls( NullPrecedence.FIRST ) ) - .getResultList(); - List expected = new ArrayList<>(); - expected.addAll( Arrays.asList( 1, 2 ) ); - Assert.assertEquals( expected, results ); - } - - @Test - public void testNullPrecedenceLast() { - List results = getAuditReader().createQuery().forRevisionsOfEntity( StrIntTestEntity.class, true, false ) - .addProjection( AuditEntity.property( "number" ) ) - .addOrder( AuditEntity.property( "str1" ).asc().nulls( NullPrecedence.LAST ) ) - .getResultList(); - List expected = new ArrayList<>(); - expected.addAll( Arrays.asList( 2, 1 ) ); - Assert.assertEquals( expected, results ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java deleted file mode 100644 index 35e243d96bca..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdEmbIdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngEmbIdEntity; - -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class NullPropertyQuery extends BaseEnversJPAFunctionalTestCase { - private Integer idSimplePropertyNull = null; - private Integer idSimplePropertyNotNull = null; - private EmbId idMulticolumnReferenceToParentNull = new EmbId( 0, 1 ); - private Integer idReferenceToParentNotNull = 1; - private Integer idParent = 1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - StrIntTestEntity.class, - SetRefEdEmbIdEntity.class, - SetRefIngEmbIdEntity.class, - CollectionRefEdEntity.class, - CollectionRefIngEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrIntTestEntity nullSite = new StrIntTestEntity( null, 1 ); - StrIntTestEntity notNullSite = new StrIntTestEntity( "data", 2 ); - em.persist( nullSite ); - em.persist( notNullSite ); - idSimplePropertyNull = nullSite.getId(); - idSimplePropertyNotNull = notNullSite.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - SetRefIngEmbIdEntity nullParentSrieie = new SetRefIngEmbIdEntity( - idMulticolumnReferenceToParentNull, - "data", - null - ); - em.persist( nullParentSrieie ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - CollectionRefEdEntity parent = new CollectionRefEdEntity( idParent, "data" ); - CollectionRefIngEntity notNullParentCrie = new CollectionRefIngEntity( - idReferenceToParentNotNull, - "data", - parent - ); - em.persist( parent ); - em.persist( notNullParentCrie ); - em.getTransaction().commit(); - } - - @Test - public void testSimplePropertyIsNullQuery() { - StrIntTestEntity ver = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "str1" ).isNull() ) - .getSingleResult(); - - assert ver.equals( new StrIntTestEntity( null, 1, idSimplePropertyNull ) ); - } - - @Test - public void testSimplePropertyIsNotNullQuery() { - StrIntTestEntity ver = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "str1" ).isNotNull() ) - .getSingleResult(); - - assert ver.equals( new StrIntTestEntity( "data", 2, idSimplePropertyNotNull ) ); - } - - @Test - public void testReferenceMulticolumnPropertyIsNullQuery() { - SetRefIngEmbIdEntity ver = (SetRefIngEmbIdEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.property( "reference" ).isNull() ) - .getSingleResult(); - - assert ver.getId().equals( idMulticolumnReferenceToParentNull ); - } - - @Test - public void testReferencePropertyIsNotNullQuery() { - CollectionRefIngEntity ver = (CollectionRefIngEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( CollectionRefIngEntity.class, 3 ) - .add( AuditEntity.property( "reference" ).isNotNull() ) - .getSingleResult(); - - assert ver.getId().equals( idReferenceToParentNotNull ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java deleted file mode 100644 index 190600df8697..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class RevisionConstraintQuery extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); - - em.persist( site1 ); - em.persist( site2 ); - - id1 = site1.getId(); - Integer id2 = site2.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setStr1( "d" ); - site2.setNumber( 20 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setNumber( 1 ); - site2.setStr1( "z" ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setNumber( 5 ); - site2.setStr1( "a" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsLtQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().distinct() ) - .add( AuditEntity.revisionNumber().lt( 3 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - Assert.assertEquals( Arrays.asList( 1, 2 ), result ); - } - - @Test - public void testRevisionsGeQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().distinct() ) - .add( AuditEntity.revisionNumber().ge( 2 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - Assert.assertEquals( TestTools.makeSet( 2, 3, 4 ), new HashSet( result ) ); - } - - @Test - public void testRevisionsLeWithPropertyQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.revisionNumber().le( 3 ) ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - Assert.assertEquals( Arrays.asList( 1 ), result ); - } - - @Test - public void testRevisionsGtWithPropertyQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.revisionNumber().gt( 1 ) ) - .add( AuditEntity.property( "number" ).lt( 10 ) ) - .getResultList(); - - Assert.assertEquals( TestTools.makeSet( 3, 4 ), new HashSet<>( result ) ); - } - - @Test - public void testRevisionProjectionQuery() { - Object[] result = (Object[]) getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().max() ) - .addProjection( AuditEntity.revisionNumber().count() ) - .addProjection( AuditEntity.revisionNumber().countDistinct() ) - .addProjection( AuditEntity.revisionNumber().min() ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertEquals( Integer.valueOf( 4 ), result[0] ); - Assert.assertEquals( Long.valueOf( 4 ), result[1] ); - Assert.assertEquals( Long.valueOf( 4 ), result[2] ); - Assert.assertEquals( Integer.valueOf( 1 ), result[3] ); - } - - @Test - public void testRevisionOrderQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.id().eq( id1 ) ) - .addOrder( AuditEntity.revisionNumber().desc() ) - .getResultList(); - - Assert.assertEquals( Arrays.asList( 4, 3, 2, 1 ), result ); - } - - @Test - public void testRevisionCountQuery() { - // The query shouldn't be ordered as always, otherwise - we get an exception. - Object result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().count() ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertEquals( Long.valueOf( 4 ), result ); - } - - @Test - public void testRevisionTypeEqQuery() { - // The query shouldn't be ordered as always, otherwise - we get an exception. - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.id().eq( id1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.MOD ) ) - .getResultList(); - - Assert.assertEquals( 3, results.size() ); - Assert.assertEquals( new StrIntTestEntity( "d", 10, id1 ), results.get( 0 ) ); - Assert.assertEquals( new StrIntTestEntity( "d", 1, id1 ), results.get( 1 ) ); - Assert.assertEquals( new StrIntTestEntity( "d", 5, id1 ), results.get( 2 ) ); - } - - @Test - public void testRevisionTypeNeQuery() { - // The query shouldn't be ordered as always, otherwise - we get an exception. - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.id().eq( id1 ) ) - .add( AuditEntity.revisionType().ne( RevisionType.MOD ) ) - .getResultList(); - - Assert.assertEquals( 1, results.size() ); - Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), results.get( 0 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java deleted file mode 100644 index 220edd9c6096..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.CriteriaQuery; -import jakarta.persistence.criteria.Root; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; -import org.junit.Test; -import org.junit.jupiter.api.Assertions; - -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Marco Belladelli - */ -public class RevisionEntityQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class, MulIdTestEntity.class, EmbIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site3 = new StrIntTestEntity( "b", 5 ); - - em.persist( site1 ); - em.persist( site2 ); - em.persist( site3 ); - - final Integer id1 = site1.getId(); - final Integer id2 = site2.getId(); - final Integer id3 = site3.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - final MulId mulId1 = new MulId( 1, 2 ); - em.persist( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ) ); - - final EmbId embId1 = new EmbId( 3, 4 ); - em.persist( new EmbIdTestEntity( embId1, "something" ) ); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setStr1( "aBc" ); - site2.setNumber( 20 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - site3 = em.find( StrIntTestEntity.class, id3 ); - - site3.setStr1( "a" ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - - em.remove( site1 ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionEntityHqlQuery() { - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final List resultList = em.createQuery( - "select e from SequenceIdRevisionEntity e", - SequenceIdRevisionEntity.class - ).getResultList(); - - assertThat( resultList ).hasSize( 4 ); - - assertThat( em.createQuery( - String.format( "select e from %s e", SequenceIdRevisionEntity.class.getName() ), - SequenceIdRevisionEntity.class - ).getResultList() ).containsAll( resultList ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionEntityCriteriaQuery() { - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); - final CriteriaQuery query = criteriaBuilder.createQuery( Integer.class ); - final Root from = query.from( SequenceIdRevisionEntity.class ); - final List resultList = em.createQuery( query.select( from.get( "id" ) ) ).getResultList(); - - assertThat( resultList ).hasSize( 4 ).allSatisfy( Assertions::assertNotNull ); - - em.getTransaction().commit(); - } - - @Test - public void testQueryForRevisionsOfEntity() { - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - //noinspection unchecked - final List resultList = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionNumber().between( 1, 3 ) ) - .getResultList(); - - assertThat( resultList ).hasSize( 2 ).allMatch( r -> r instanceof SequenceIdRevisionEntity ); - - em.getTransaction().commit(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java deleted file mode 100644 index a71c136af90e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java +++ /dev/null @@ -1,444 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.criteria.MatchMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@SuppressWarnings("unchecked") -public class SimpleQuery extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - private MulId mulId1; - private EmbId embId1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrIntTestEntity.class, MulIdTestEntity.class, EmbIdTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site3 = new StrIntTestEntity( "b", 5 ); - - em.persist( site1 ); - em.persist( site2 ); - em.persist( site3 ); - - id1 = site1.getId(); - id2 = site2.getId(); - id3 = site3.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - mulId1 = new MulId( 1, 2 ); - em.persist( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ) ); - - embId1 = new EmbId( 3, 4 ); - em.persist( new EmbIdTestEntity( embId1, "something" ) ); - - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); - - site1.setStr1( "aBc" ); - site2.setNumber( 20 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - site3 = em.find( StrIntTestEntity.class, id3 ); - - site3.setStr1( "a" ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - - em.remove( site1 ); - - em.getTransaction().commit(); - } - - @Test - public void testEntitiesIdQuery() { - StrIntTestEntity ver2 = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.id().eq( id2 ) ) - .getSingleResult(); - - assert ver2.equals( new StrIntTestEntity( "a", 20, id2 ) ); - } - - @Test - public void testEntitiesPropertyEqualsQuery() { - List ver1 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - List ver2 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - List ver3 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 3 ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - assert new HashSet( ver1 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "a", 10, id1 ), - new StrIntTestEntity( "a", 10, id2 ) - ) - ); - assert new HashSet( ver2 ).equals( TestTools.makeSet( new StrIntTestEntity( "a", 20, id2 ) ) ); - assert new HashSet( ver3 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "a", 20, id2 ), - new StrIntTestEntity( "a", 5, id3 ) - ) - ); - } - - @Test - public void testEntitiesPropertyLeQuery() { - List ver1 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "number" ).le( 10 ) ) - .getResultList(); - - List ver2 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.property( "number" ).le( 10 ) ) - .getResultList(); - - List ver3 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 3 ) - .add( AuditEntity.property( "number" ).le( 10 ) ) - .getResultList(); - - assert new HashSet( ver1 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "a", 10, id1 ), - new StrIntTestEntity( "a", 10, id2 ), new StrIntTestEntity( "b", 5, id3 ) - ) - ); - assert new HashSet( ver2 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "aBc", 10, id1 ), - new StrIntTestEntity( "b", 5, id3 ) - ) - ); - assert new HashSet( ver3 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "aBc", 10, id1 ), - new StrIntTestEntity( "a", 5, id3 ) - ) - ); - } - - @Test - public void testRevisionsPropertyEqQuery() { - List revs_id1 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.property( "str1" ).le( "a" ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - List revs_id2 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.property( "str1" ).le( "a" ) ) - .add( AuditEntity.id().eq( id2 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - List revs_id3 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.property( "str1" ).le( "a" ) ) - .add( AuditEntity.id().eq( id3 ) ) - .getResultList(); - - assert Arrays.asList( 1 ).equals( revs_id1 ); - assert Arrays.asList( 1, 2 ).equals( revs_id2 ); - assert Arrays.asList( 3 ).equals( revs_id3 ); - } - - @Test - public void testSelectEntitiesQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, false ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - assert result.size() == 2; - - assert result.get( 0 ).equals( new StrIntTestEntity( "a", 10, id1 ) ); - assert result.get( 1 ).equals( new StrIntTestEntity( "aBc", 10, id1 ) ); - } - - @Test - public void testSelectEntitiesAndRevisionsQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - assert result.size() == 3; - - assert ((Object[]) result.get( 0 ))[0].equals( new StrIntTestEntity( "a", 10, id1 ) ); - assert ((Object[]) result.get( 1 ))[0].equals( new StrIntTestEntity( "aBc", 10, id1 ) ); - assert ((Object[]) result.get( 2 ))[0].equals( new StrIntTestEntity( null, null, id1 ) ); - - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() == 1; - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 1 ))[1]).getId() == 2; - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 2 ))[1]).getId() == 4; - - assert ((Object[]) result.get( 0 ))[2].equals( RevisionType.ADD ); - assert ((Object[]) result.get( 1 ))[2].equals( RevisionType.MOD ); - assert ((Object[]) result.get( 2 ))[2].equals( RevisionType.DEL ); - } - - @Test - public void testSelectRevisionTypeQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionType() ) - .add( AuditEntity.id().eq( id1 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - assert result.size() == 3; - - assert result.get( 0 ).equals( RevisionType.ADD ); - assert result.get( 1 ).equals( RevisionType.MOD ); - assert result.get( 2 ).equals( RevisionType.DEL ); - } - - @Test - public void testEmptyRevisionOfEntityQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .getResultList(); - - assert result.size() == 7; - } - - @Test - public void testEmptyConjunctionRevisionOfEntityQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.conjunction() ) - .getResultList(); - - assert result.size() == 7; - } - - @Test - public void testEmptyDisjunctionRevisionOfEntityQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.disjunction() ) - .getResultList(); - - assert result.size() == 0; - } - - @Test - public void testEntitiesAddedAtRevision() { - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10, id1 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 10, id2 ); - StrIntTestEntity site3 = new StrIntTestEntity( "b", 5, id3 ); - - List result = getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - StrIntTestEntity.class.getName(), - 1 - ).getResultList(); - RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - 1 - ) - .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertTrue( TestTools.checkCollection( result, site1, site2, site3 ) ); - Assert.assertEquals( revisionType, RevisionType.ADD ); - } - - @Test - public void testEntitiesChangedAtRevision() { - StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 20, id2 ); - - List result = getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 2 ) - .getResultList(); - RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - 2 - ) - .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertTrue( TestTools.checkCollection( result, site1, site2 ) ); - Assert.assertEquals( revisionType, RevisionType.MOD ); - } - - @Test - public void testEntitiesRemovedAtRevision() { - StrIntTestEntity site1 = new StrIntTestEntity( null, null, id1 ); - - List result = getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 4 ) - .getResultList(); - RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - 4 - ) - .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertTrue( TestTools.checkCollection( result, site1 ) ); - Assert.assertEquals( revisionType, RevisionType.DEL ); - } - - @Test - public void testEntityNotModifiedAtRevision() { - List result = getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 3 ) - .add( AuditEntity.id().eq( id1 ) ).getResultList(); - Assert.assertTrue( result.isEmpty() ); - } - - @Test - public void testNoEntitiesModifiedAtRevision() { - List result = getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 5 ) - .getResultList(); - Assert.assertTrue( result.isEmpty() ); - } - - @Test - @JiraKey(value = "HHH-7800") - public void testBetweenInsideDisjunction() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( - AuditEntity.disjunction() - .add( AuditEntity.property( "number" ).between( 0, 5 ) ) - .add( AuditEntity.property( "number" ).between( 20, 100 ) ) - ) - .getResultList(); - - for ( Object o : result ) { - StrIntTestEntity entity = (StrIntTestEntity) o; - int number = entity.getNumber(); - Assert.assertTrue( (number >= 0 && number <= 5) || (number >= 20 && number <= 100) ); - } - } - - @Test - @JiraKey(value = "HHH-8495") - public void testIlike() { - StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); - - StrIntTestEntity result = (StrIntTestEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).ilike( "abc" ) ) - .getSingleResult(); - - Assert.assertEquals( site1, result ); - } - - @Test - @JiraKey(value = "HHH-8495") - public void testIlikeWithMatchMode() { - StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); - - StrIntTestEntity result = (StrIntTestEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).ilike( "BC", MatchMode.ANYWHERE ) ) - .getSingleResult(); - - Assert.assertEquals( site1, result ); - } - - @Test - @JiraKey(value = "HHH-8567") - public void testIdPropertyRestriction() { - StrIntTestEntity ver2 = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.property( "id" ).eq( id2 ) ) - .getSingleResult(); - - Assert.assertEquals( new StrIntTestEntity( "a", 20, id2 ), ver2 ); - } - - @Test - @JiraKey(value = "HHH-8567") - public void testMultipleIdPropertyRestriction() { - MulIdTestEntity ver2 = (MulIdTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( MulIdTestEntity.class, 2 ) - .add( AuditEntity.property( "id1" ).eq( mulId1.getId1() ) ) - .add( AuditEntity.property( "id2" ).eq( mulId1.getId2() ) ) - .getSingleResult(); - - Assert.assertEquals( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ), ver2 ); - } - - @Test - @JiraKey(value = "HHH-8567") - public void testEmbeddedIdPropertyRestriction() { - EmbIdTestEntity ver2 = (EmbIdTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( EmbIdTestEntity.class, 2 ) - .add( AuditEntity.property( "id.x" ).eq( embId1.getX() ) ) - .add( AuditEntity.property( "id.y" ).eq( embId1.getY() ) ) - .getSingleResult(); - - Assert.assertEquals( new EmbIdTestEntity( embId1, "something" ), ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java deleted file mode 100644 index 941f49d8ae9b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StoreDeletedData.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.criteria.AuditCriterion; -import org.hibernate.envers.query.criteria.AuditDisjunction; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -/** - * A test which checks if the data of a deleted entity is stored when the setting is on. - * - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class StoreDeletedData extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - em.persist( site1 ); - id1 = site1.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - em.remove( site1 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 20 ); - em.persist( site2 ); - id2 = site2.getId(); - StrIntTestEntity site3 = new StrIntTestEntity( "c", 30 ); - em.persist( site3 ); - id3 = site3.getId(); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - em.remove( site2 ); - em.remove( site3 ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionsPropertyEqQuery() { - List revs_id1 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - Assert.assertEquals( 2, revs_id1.size() ); - Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 0 ))[0] ); - Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) revs_id1.get( 1 ))[0] ); - } - - @Test - @JiraKey(value = "HHH-7800") - public void testMaximizeInDisjunction() { - List queryIds = Arrays.asList( id2, id3 ); - - AuditDisjunction disjunction = AuditEntity.disjunction(); - for ( Integer id : queryIds ) { - AuditCriterion crit = AuditEntity.revisionNumber().maximize() - .add( AuditEntity.id().eq( id ) ) - .add( AuditEntity.revisionType().ne( RevisionType.DEL ) ); - disjunction.add( crit ); - // Workaround: using this line instead works correctly: - // disjunction.add(AuditEntity.conjunction().add(crit)); - } - - List beforeDeletionRevisions = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) - .add( disjunction ) - .addOrder( AuditEntity.property( "id" ).asc() ) - .getResultList(); - - Assert.assertEquals( 2, beforeDeletionRevisions.size() ); - - Object[] result1 = (Object[]) beforeDeletionRevisions.get( 0 ); - Object[] result2 = (Object[]) beforeDeletionRevisions.get( 1 ); - - Assert.assertEquals( new StrIntTestEntity( "b", 20, id2 ), result1[0] ); - // Making sure that we have received an entity added at revision 3. - Assert.assertEquals( 3, ((SequenceIdRevisionEntity) result1[1]).getId() ); - Assert.assertEquals( RevisionType.ADD, result1[2] ); - Assert.assertEquals( new StrIntTestEntity( "c", 30, id3 ), result2[0] ); - // Making sure that we have received an entity added at revision 3. - Assert.assertEquals( 3, ((SequenceIdRevisionEntity) result2[1]).getId() ); - Assert.assertEquals( RevisionType.ADD, result2[2] ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java deleted file mode 100644 index c1aba8713432..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.embeddables; - -import java.util.List; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.AuditException; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; - -/** - * Test which supports using {@link AuditEntity} to test equality/inequality - * between embeddable components. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-9178") -public class EmbeddableQuery extends BaseEnversJPAFunctionalTestCase { - private Integer personId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, NameInfo.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // Revision 1 - em.getTransaction().begin(); - NameInfo ni = new NameInfo( "John", "Doe" ); - Person person1 = new Person( "JDOE", ni ); - em.persist( person1 ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - person1 = em.find( Person.class, person1.getId() ); - person1.getNameInfo().setFirstName( "Jane" ); - em.merge( person1 ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - person1 = em.find( Person.class, person1.getId() ); - person1.setName( "JDOE2" ); - em.merge( person1 ); - em.getTransaction().commit(); - - personId = person1.getId(); - } - finally { - em.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( 3, getAuditReader().getRevisions( Person.class, personId ).size() ); - } - - @Test - public void testAuditQueryUsingEmbeddableEquals() { - final NameInfo nameInfo = new NameInfo( "John", "Doe" ); - final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); - query.add( AuditEntity.property( "nameInfo" ).eq( nameInfo ) ); - List results = query.getResultList(); - assertEquals( 1, results.size() ); - final Person person = (Person) results.get( 0 ); - assertEquals( nameInfo, person.getNameInfo() ); - } - - @Test - public void testAuditQueryUsingEmbeddableNotEquals() { - final NameInfo nameInfo = new NameInfo( "Jane", "Doe" ); - final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); - query.add( AuditEntity.property( "nameInfo" ).ne( nameInfo ) ); - assertEquals( 0, query.getResultList().size() ); - } - - @Test - public void testAuditQueryUsingEmbeddableNonEqualityCheck() { - try { - final NameInfo nameInfo = new NameInfo( "John", "Doe" ); - final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); - query.add( AuditEntity.property( "nameInfo" ).le( nameInfo ) ); - } - catch ( Exception ex ) { - assertTyping( AuditException.class, ex ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/NameInfo.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/NameInfo.java deleted file mode 100644 index 498ef676a93f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/NameInfo.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.embeddables; - -import jakarta.persistence.Embeddable; - -/** - * @author Chris Cranford - */ -@Embeddable -public class NameInfo { - private String firstName; - private String lastName; - - NameInfo() { - - } - - public NameInfo(String firstName, String lastName) { - this.firstName = firstName; - this.lastName = lastName; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - @Override - public int hashCode() { - int result; - result = ( firstName != null ? firstName.hashCode() : 0 ); - result = result * 31 + ( lastName != null ? lastName.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( obj == this ) { - return true; - } - if ( !( obj instanceof NameInfo ) ) { - return false; - } - NameInfo that = (NameInfo) obj; - if ( firstName != null ? !firstName.equals( that.firstName) : that.firstName != null ) { - return false; - } - if ( lastName != null ? !lastName.equals( that.lastName) : that.lastName != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "NameInfo{" + - "firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/Person.java deleted file mode 100644 index a368410d8fac..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/Person.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.embeddables; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Chris Cranford - */ -@Entity -@Audited -public class Person { - @Id - @GeneratedValue - private Integer id; - private String name; - private NameInfo nameInfo; - - Person() { - - } - - public Person(String name, NameInfo nameInfo) { - this.name = name; - this.nameInfo = nameInfo; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public NameInfo getNameInfo() { - return nameInfo; - } - - public void setNameInfo(NameInfo nameInfo) { - this.nameInfo = nameInfo; - } - - @Override - public int hashCode() { - int result; - result = ( id != null ? id.hashCode() : 0 ); - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( nameInfo != null ? nameInfo.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object obj) { - if ( this == obj ) { - return true; - } - if ( !( obj instanceof Person ) ) { - return false; - } - Person that = (Person) obj; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( name != null ? !name.equals( that.name) : that.name != null ) { - return false; - } - if ( nameInfo != null ? !nameInfo.equals( that.nameInfo ) : that.nameInfo != null ) { - return false; - } - return true; - } - - @Override - public String toString() { - return "Person{" + - "id=" + id + - ", name='" + name + '\'' + - ", nameInfo=" + nameInfo + - '}'; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Address.java deleted file mode 100644 index 363472692f87..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Address.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.entities; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@Entity -public class Address { - - @Id - @GeneratedValue - private Long id; - - private String street; - - @Column(name = "`number`") - private int number; - - public Address() { - - } - - public Address(String street, int number) { - this.street = street; - this.number = number; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public int getNumber() { - return number; - } - - public void setNumber(int number) { - this.number = number; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Car.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Car.java deleted file mode 100644 index 8970c814c783..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Car.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.entities; - -import java.util.HashSet; -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToMany; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@Entity -@Audited -public class Car { - - @Id - @GeneratedValue - private Long id; - - private String make; - @ManyToOne - private Person owner; - @ManyToMany - private Set drivers = new HashSet(); - - public Car() { - - } - - public Car(final String make) { - this.make = make; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMake() { - return make; - } - - public void setMake(String make) { - this.make = make; - } - - public Person getOwner() { - return owner; - } - - public void setOwner(Person owner) { - this.owner = owner; - } - - public Set getDrivers() { - return drivers; - } - - public void setDrivers(Set drivers) { - this.drivers = drivers; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Person.java deleted file mode 100644 index d3e97d2af8af..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/entities/Person.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.entities; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.RelationTargetAuditMode; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@Entity -@Audited -public class Person { - - @Id - @GeneratedValue - private Long id; - - private String name; - private int age; - @ManyToOne - @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) - private Address address; - - public Person() { - - } - - public Person(final String name, final int age, final Address address) { - this.name = name; - this.age = age; - this.address = address; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java deleted file mode 100644 index 98fea1dd7625..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.ids; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.EmbId; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdEmbIdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngEmbIdEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class EmbIdOneToManyQuery extends BaseEnversJPAFunctionalTestCase { - private EmbId id1; - private EmbId id2; - - private EmbId id3; - private EmbId id4; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEmbIdEntity.class, SetRefIngEmbIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - id1 = new EmbId( 0, 1 ); - id2 = new EmbId( 10, 11 ); - id3 = new EmbId( 20, 21 ); - id4 = new EmbId( 30, 31 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - SetRefIngEmbIdEntity refIng1 = new SetRefIngEmbIdEntity( id1, "x", null ); - SetRefIngEmbIdEntity refIng2 = new SetRefIngEmbIdEntity( id2, "y", null ); - - em.persist( refIng1 ); - em.persist( refIng2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - SetRefEdEmbIdEntity refEd3 = new SetRefEdEmbIdEntity( id3, "a" ); - SetRefEdEmbIdEntity refEd4 = new SetRefEdEmbIdEntity( id4, "a" ); - - em.persist( refEd3 ); - em.persist( refEd4 ); - - refIng1 = em.find( SetRefIngEmbIdEntity.class, id1 ); - refIng2 = em.find( SetRefIngEmbIdEntity.class, id2 ); - - refIng1.setReference( refEd3 ); - refIng2.setReference( refEd4 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - refEd3 = em.find( SetRefEdEmbIdEntity.class, id3 ); - refIng2 = em.find( SetRefIngEmbIdEntity.class, id2 ); - refIng2.setReference( refEd3 ); - - em.getTransaction().commit(); - } - - @Test - public void testEntitiesReferencedToId3() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev1 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev2 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev3 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) - .getResultList() - ); - - assert rev1.equals( rev1_related ); - assert rev2.equals( rev2_related ); - assert rev3.equals( rev3_related ); - - assert rev1.equals( TestTools.makeSet() ); - assert rev2.equals( TestTools.makeSet( new SetRefIngEmbIdEntity( id1, "x", null ) ) ); - assert rev3.equals( - TestTools.makeSet( - new SetRefIngEmbIdEntity( id1, "x", null ), - new SetRefIngEmbIdEntity( id2, "y", null ) - ) - ); - } - - @Test - public void testEntitiesReferencedToId4() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - assert rev1_related.equals( TestTools.makeSet() ); - assert rev2_related.equals( TestTools.makeSet( new SetRefIngEmbIdEntity( id2, "y", null ) ) ); - assert rev3_related.equals( TestTools.makeSet() ); - } - - @Test - public void testEntitiesReferencedByIng1ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - Object rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - assert rev1_related.size() == 0; - assert rev2_related.equals( new SetRefIngEmbIdEntity( id1, "x", null ) ); - assert rev3_related.equals( new SetRefIngEmbIdEntity( id1, "x", null ) ); - } - - @Test - public void testEntitiesReferencedByIng2ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - List rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getSingleResult(); - - assert rev1_related.size() == 0; - assert rev2_related.size() == 0; - assert rev3_related.equals( new SetRefIngEmbIdEntity( id2, "y", null ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java deleted file mode 100644 index 136eac46e1dc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.query.ids; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.MulId; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdMulIdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngMulIdEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@SuppressWarnings("unchecked") -public class MulIdOneToManyQuery extends BaseEnversJPAFunctionalTestCase { - private MulId id1; - private MulId id2; - - private MulId id3; - private MulId id4; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdMulIdEntity.class, SetRefIngMulIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - id1 = new MulId( 0, 1 ); - id2 = new MulId( 10, 11 ); - id3 = new MulId( 20, 21 ); - id4 = new MulId( 30, 31 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - SetRefIngMulIdEntity refIng1 = new SetRefIngMulIdEntity( id1, "x", null ); - SetRefIngMulIdEntity refIng2 = new SetRefIngMulIdEntity( id2, "y", null ); - - em.persist( refIng1 ); - em.persist( refIng2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - SetRefEdMulIdEntity refEd3 = new SetRefEdMulIdEntity( id3, "a" ); - SetRefEdMulIdEntity refEd4 = new SetRefEdMulIdEntity( id4, "a" ); - - em.persist( refEd3 ); - em.persist( refEd4 ); - - refIng1 = em.find( SetRefIngMulIdEntity.class, id1 ); - refIng2 = em.find( SetRefIngMulIdEntity.class, id2 ); - - refIng1.setReference( refEd3 ); - refIng2.setReference( refEd4 ); - - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - - refEd3 = em.find( SetRefEdMulIdEntity.class, id3 ); - refIng2 = em.find( SetRefIngMulIdEntity.class, id2 ); - refIng2.setReference( refEd3 ); - - em.getTransaction().commit(); - } - - @Test - public void testEntitiesReferencedToId3() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev1 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev2 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev3 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) - .getResultList() - ); - assertEquals( rev1, rev1_related ); - assertEquals( rev2, rev2_related ); - assertEquals( rev3, rev3_related ); - assertEquals( rev1, TestTools.makeSet() ); - assertEquals( rev2, TestTools.makeSet( new SetRefIngMulIdEntity( id1, "x", null ) ) ); - assertEquals( - rev3, TestTools.makeSet( - new SetRefIngMulIdEntity( id1, "x", null ), - new SetRefIngMulIdEntity( id2, "y", null ) - ) - ); - } - - @Test - public void testEntitiesReferencedToId4() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - assertEquals( rev1_related, TestTools.makeSet() ); - assertEquals( rev2_related, TestTools.makeSet( new SetRefIngMulIdEntity( id2, "y", null ) ) ); - assertEquals( rev3_related, TestTools.makeSet() ); - } - - @Test - public void testEntitiesReferencedByIng1ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - Object rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - assertEquals( 0, rev1_related.size() ); - assertEquals( rev2_related, new SetRefIngMulIdEntity( id1, "x", null ) ); - assertEquals( rev3_related, new SetRefIngMulIdEntity( id1, "x", null ) ); - } - - @Test - public void testEntitiesReferencedByIng2ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - List rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getSingleResult(); - assertEquals( 0, rev1_related.size() ); - assertEquals( 0, rev2_related.size() ); - assertEquals( new SetRefIngMulIdEntity( id2, "y", null ), rev3_related ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java deleted file mode 100644 index 3f2287430ea2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reference; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BidirectionalReference extends BaseEnversJPAFunctionalTestCase { - private Long set1_id; - private Long set2_id; - - private Long g1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {GreetingPO.class, GreetingSetPO.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - GreetingSetPO set1 = new GreetingSetPO(); - set1.setName( "a1" ); - - GreetingSetPO set2 = new GreetingSetPO(); - set2.setName( "a2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( set1 ); - em.persist( set2 ); - - set1_id = set1.getId(); - set2_id = set2.getId(); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 - em.getTransaction().begin(); - - GreetingPO g1 = new GreetingPO(); - g1.setGreeting( "g1" ); - g1.setGreetingSet( em.getReference( GreetingSetPO.class, set1_id ) ); - - em.persist( g1 ); - g1_id = g1.getId(); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 - em.getTransaction().begin(); - - g1 = em.find( GreetingPO.class, g1_id ); - - g1.setGreetingSet( em.getReference( GreetingSetPO.class, set2_id ) ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( GreetingPO.class, g1_id ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( GreetingSetPO.class, set1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( GreetingSetPO.class, set2_id ) ); - } - - @Test - public void testHistoryOfG1() { - GreetingPO rev1 = getAuditReader().find( GreetingPO.class, g1_id, 1 ); - GreetingPO rev2 = getAuditReader().find( GreetingPO.class, g1_id, 2 ); - GreetingPO rev3 = getAuditReader().find( GreetingPO.class, g1_id, 3 ); - - assert rev1 == null; - assert rev2.getGreetingSet().getName().equals( "a1" ); - assert rev3.getGreetingSet().getName().equals( "a2" ); - } - - @Test - public void testHistoryOfSet1() { - GreetingSetPO rev1 = getAuditReader().find( GreetingSetPO.class, set1_id, 1 ); - GreetingSetPO rev2 = getAuditReader().find( GreetingSetPO.class, set1_id, 2 ); - GreetingSetPO rev3 = getAuditReader().find( GreetingSetPO.class, set1_id, 3 ); - - assert rev1.getName().equals( "a1" ); - assert rev2.getName().equals( "a1" ); - assert rev3.getName().equals( "a1" ); - - GreetingPO g1 = new GreetingPO(); - g1.setId( g1_id ); - g1.setGreeting( "g1" ); - - assert rev1.getGreetings().size() == 0; - assert rev2.getGreetings().equals( TestTools.makeSet( g1 ) ); - assert rev3.getGreetings().size() == 0; - } - - @Test - public void testHistoryOfSet2() { - GreetingSetPO rev1 = getAuditReader().find( GreetingSetPO.class, set2_id, 1 ); - GreetingSetPO rev2 = getAuditReader().find( GreetingSetPO.class, set2_id, 2 ); - GreetingSetPO rev3 = getAuditReader().find( GreetingSetPO.class, set2_id, 3 ); - - assert rev1.getName().equals( "a2" ); - assert rev2.getName().equals( "a2" ); - assert rev3.getName().equals( "a2" ); - - GreetingPO g1 = new GreetingPO(); - g1.setId( g1_id ); - g1.setGreeting( "g1" ); - - assert rev1.getGreetings().size() == 0; - assert rev2.getGreetings().size() == 0; - assert rev3.getGreetings().equals( TestTools.makeSet( g1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/GreetingPO.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/GreetingPO.java deleted file mode 100644 index 8d1639e50237..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/GreetingPO.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reference; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class GreetingPO { - @Id - @GeneratedValue - private Long id; - - private String theGreeting; - - @ManyToOne - private GreetingSetPO greetingSet; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getGreeting() { - return theGreeting; - } - - public void setGreeting(String greeting) { - this.theGreeting = greeting; - } - - public GreetingSetPO getGreetingSet() { - return greetingSet; - } - - public void setGreetingSet(GreetingSetPO greetingSet) { - this.greetingSet = greetingSet; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof GreetingPO) ) { - return false; - } - - GreetingPO that = (GreetingPO) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( theGreeting != null ? !theGreeting.equals( that.theGreeting ) : that.theGreeting != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (theGreeting != null ? theGreeting.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/GreetingSetPO.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/GreetingSetPO.java deleted file mode 100644 index 4c9b9d7d63dd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/GreetingSetPO.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reference; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -@Entity -@Audited -public class GreetingSetPO { - @Id - @GeneratedValue - private Long id; - - private String name; - - @OneToMany(mappedBy = "greetingSet") - private Set greetings; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Set getGreetings() { - return greetings; - } - - public void setGreetings(Set greetings) { - this.greetings = greetings; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof GreetingSetPO) ) { - return false; - } - - GreetingSetPO that = (GreetingSetPO) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + (name != null ? name.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CountingRevisionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CountingRevisionListener.java deleted file mode 100644 index f7cc51fc7660..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CountingRevisionListener.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import org.hibernate.envers.RevisionListener; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class CountingRevisionListener implements RevisionListener { - public static int revisionCount = 0; - - @Override - public void newRevision(Object revisionEntity) { - ++revisionCount; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java deleted file mode 100644 index 7ddcfa2c8ee0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomRevEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Custom extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - public void testTimestamps() { - final Date date1 = new Date( timestamp2 ); - final Date date2 = new Date( timestamp3 ); - - assert getAuditReader().getRevisionNumberForDate( date1 ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( date2 ).intValue() == 2; - - final LocalDateTime localDateTime1 = LocalDateTime.ofInstant( date1.toInstant(), ZoneId.systemDefault() ); - final LocalDateTime localDateTime2 = LocalDateTime.ofInstant( date2.toInstant(), ZoneId.systemDefault() ); - assert getAuditReader().getRevisionNumberForDate( localDateTime1 ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( localDateTime2 ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomRevEntity.class, 1 ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomRevEntity.class, 2 ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - } - - @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( CustomRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( CustomRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( CustomRevEntity.class, 2 ) )); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java deleted file mode 100644 index b4c5006ed9d8..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class CustomBoxed extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomBoxedRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomBoxedRevEntity.class, 1 ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomBoxedRevEntity.class, 2 ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - } - - @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( CustomBoxedRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( CustomBoxedRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( CustomBoxedRevEntity.class, 2 ) )); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxedRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxedRevEntity.java deleted file mode 100644 index f6ce418c9b29..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxedRevEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class CustomBoxedRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private Integer customId; - - @RevisionTimestamp - private Long customTimestamp; - - public Integer getCustomId() { - return customId; - } - - public void setCustomId(Integer customId) { - this.customId = customId; - } - - public Long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(Long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof CustomBoxedRevEntity) ) { - return false; - } - - CustomBoxedRevEntity that = (CustomBoxedRevEntity) o; - - if ( customId != null ? !customId.equals( that.customId ) : that.customId != null ) { - return false; - } - if ( customTimestamp != null ? - !customTimestamp.equals( that.customTimestamp ) : - that.customTimestamp != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (customId != null ? customId.hashCode() : 0); - result = 31 * result + (customTimestamp != null ? customTimestamp.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java deleted file mode 100644 index c4a87a2a86a7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomRevEntityColumnMapping; - -import org.junit.Test; - -/** - * Test which checks if auditing when the revision number in the revision entity has a @Column annotation with - * a columnDefinition specified works. - * - * @author Adam Warski (adam at warski dot org) - */ -public class CustomColumnMapping extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomRevEntityColumnMapping.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1l ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2l ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).longValue() + 1l ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomRevEntityColumnMapping.class, 1l ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomRevEntityColumnMapping.class, 2l ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1l, 2l ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1l ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2l ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java deleted file mode 100644 index 1aedcf9195ee..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomDateRevEntity; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class CustomDate extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomDateRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 1100 ); // CustomDateRevEntity.dateTimestamp field maps to date type which on some RDBMSs gets - // truncated to seconds (for example MySQL 5.1). - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 1100 ); // CustomDateRevEntity.dateTimestamp field maps to date type which on some RDBMSs gets - // truncated to seconds (for example MySQL 5.1). - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomDateRevEntity.class, 1 ).getDateTimestamp().getTime(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomDateRevEntity.class, 2 ).getDateTimestamp().getTime(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java deleted file mode 100644 index f3e47990e7bb..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.time.Instant; -import java.util.Arrays; -import java.util.Date; - -import jakarta.persistence.EntityManager; -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomInstantRevEntity; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * @author Chris Cranford - */ -public class CustomInstantRevEntityTest extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private Instant instant1; - private Instant instant2; - private Instant instant3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomInstantRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - instant1 = getCurrentInstant(); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "x" ); - em.persist( entity ); - id = entity.getId(); - em.getTransaction().commit(); - - instant2 = getCurrentInstant(); - - // Revision 2 - em.getTransaction().begin(); - entity = em.find( StrTestEntity.class, id ); - entity.setStr( "y" ); - em.getTransaction().commit(); - - instant3 = getCurrentInstant(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testInstant1() { - getAuditReader().getRevisionNumberForDate( new Date( instant1.toEpochMilli() ) ); - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testInstants() { - assertThat( getAuditReader().getRevisionNumberForDate( new Date( instant2.toEpochMilli() ) ).intValue() ).isEqualTo( 1 ); - assertThat( getAuditReader().getRevisionNumberForDate( new Date( instant3.toEpochMilli() ) ).intValue() ).isEqualTo( 2 ); - - assertThat( getAuditReader().getRevisionNumberForDate( instant2 ).intValue() ).isEqualTo( 1 ); - assertThat( getAuditReader().getRevisionNumberForDate( instant3 ).intValue() ).isEqualTo( 2 ); - } - - @Test - public void testInstantsForRevisions() { - final AuditReader reader = getAuditReader(); - assertThat( reader.getRevisionNumberForDate( reader.getRevisionDate( 1 ) ).intValue() ).isEqualTo( 1 ); - assertThat( reader.getRevisionNumberForDate( reader.getRevisionDate( 2 ) ).intValue() ).isEqualTo( 2 ); - } - - @Test - public void testRevisionsForInstants() { - final Instant revInstant1 = getAuditReader().findRevision( CustomInstantRevEntity.class, 1 ).getInstantTimestamp(); - assertThat( revInstant1.toEpochMilli() ).isGreaterThan( instant1.toEpochMilli() ); - assertThat( revInstant1.toEpochMilli() ).isLessThanOrEqualTo( instant2.toEpochMilli() ); - - final Instant revInstant2 = getAuditReader().findRevision( CustomInstantRevEntity.class, 2 ).getInstantTimestamp(); - assertThat( revInstant2.toEpochMilli() ).isGreaterThan( instant2.toEpochMilli() ); - assertThat( revInstant2.toEpochMilli() ).isLessThanOrEqualTo( instant3.toEpochMilli() ); - } - - @Test - public void testRevisionsCounts() { - assertThat( getAuditReader().getRevisions( StrTestEntity.class, id ) ).isEqualTo( Arrays.asList( 1, 2 ) ); - } - - @Test - public void testHistoryOfId1() { - assertThat( getAuditReader().find( StrTestEntity.class, id, 1 ) ).isEqualTo( new StrTestEntity( "x", id ) ); - assertThat( getAuditReader().find( StrTestEntity.class, id, 2 ) ).isEqualTo( new StrTestEntity( "y", id ) ); - } - - private Instant getCurrentInstant() throws InterruptedException { - Instant now = Instant.now(); - // Some databases default to second-based precision, sleep - Thread.sleep( 1100 ); - return now; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java deleted file mode 100644 index d25dddc68c6b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.AuditReader; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomDataRevEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class CustomNoListener extends BaseEnversJPAFunctionalTestCase { - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomDataRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - - // Setting the data on the revision entity - CustomDataRevEntity custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data1" ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data2" ); - - em.getTransaction().commit(); - - // Revision 3 - no changes, but rev entity should be persisted - em.getTransaction().begin(); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, true ); - custom.setData( "data3" ); - - em.getTransaction().commit(); - - // No changes, rev entity won't be persisted - em.getTransaction().begin(); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data4" ); - - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "z" ); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data5" ); - - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data5bis" ); - - em.getTransaction().commit(); - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - assert "data1".equals( vr.findRevision( CustomDataRevEntity.class, 1 ).getData() ); - assert "data2".equals( vr.findRevision( CustomDataRevEntity.class, 2 ).getData() ); - assert "data3".equals( vr.findRevision( CustomDataRevEntity.class, 3 ).getData() ); - assert "data5bis".equals( vr.findRevision( CustomDataRevEntity.class, 4 ).getData() ); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - StrTestEntity ver3 = new StrTestEntity( "z", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - assert getAuditReader().find( StrTestEntity.class, id, 3 ).equals( ver2 ); - assert getAuditReader().find( StrTestEntity.class, id, 4 ).equals( ver3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java deleted file mode 100644 index 736f40ebca01..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomPropertyAccessRevEntity; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class CustomPropertyAccess extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomPropertyAccessRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomPropertyAccessRevEntity.class, 1 ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomPropertyAccessRevEntity.class, 2 ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java deleted file mode 100644 index 812c0b2cbb47..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.cfg.Environment; -import org.hibernate.dialect.H2Dialect; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.mapping.Table; - -import org.hibernate.testing.RequiresDialect; -import org.junit.Test; - -/** - * Tests simple auditing process (read and write operations) when REVINFO and audit tables - * exist in a different database schema. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@RequiresDialect(H2Dialect.class) -public class DifferentDBSchemaTest extends BaseEnversJPAFunctionalTestCase { - private static final String SCHEMA_NAME = "ENVERS_AUDIT"; - private Integer steId = null; - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - // Creates new schema after establishing connection - options.putAll( Environment.getProperties() ); - options.put( EnversSettings.DEFAULT_SCHEMA, SCHEMA_NAME ); - } - - @Override - protected String createSecondSchema() { - return SCHEMA_NAME; - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "x" ); - em.persist( ste ); - steId = ste.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - ste = em.find( StrTestEntity.class, steId ); - ste.setStr( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testRevinfoSchemaName() { - Table revisionTable = metadata().getEntityBinding( "org.hibernate.envers.enhanced.SequenceIdRevisionEntity" ) - .getTable(); - assert SCHEMA_NAME.equals( revisionTable.getSchema() ); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, steId ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", steId ); - StrTestEntity ver2 = new StrTestEntity( "y", steId ); - - assert getAuditReader().find( StrTestEntity.class, steId, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, steId, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java deleted file mode 100644 index 5d966d0441af..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ExceptionListener extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ExceptionListenerRevEntity.class}; - } - - @Test(expected = RuntimeException.class) - public void testTransactionRollback() throws InterruptedException { - // Trying to persist an entity - however the listener should throw an exception, so the entity - // shouldn't be persisted - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - em.getTransaction().commit(); - } - - @Test - public void testDataNotPersisted() { - // Checking if the entity became persisted - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - Long count = (Long) em.createQuery( "select count(s) from StrTestEntity s where s.str = 'x'" ) - .getSingleResult(); - assert count == 0l; - em.getTransaction().commit(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListenerRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListenerRevEntity.java deleted file mode 100644 index 539c72a4fd72..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListenerRevEntity.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity(TestExceptionRevisionListener.class) -public class ExceptionListenerRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int id; - - @RevisionTimestamp - private long timestamp; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ExceptionListenerRevEntity) ) { - return false; - } - - ExceptionListenerRevEntity revEntity = (ExceptionListenerRevEntity) o; - - if ( id != revEntity.id ) { - return false; - } - if ( timestamp != revEntity.timestamp ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = id; - result = 31 * result + (int) (timestamp ^ (timestamp >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java deleted file mode 100644 index 6390dc301967..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6696") -public class GloballyConfiguredRevListenerTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.REVISION_LISTENER, CountingRevisionListener.class.getName() ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - CountingRevisionListener.revisionCount = 0; - - // Revision 1 - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "data" ); - em.persist( te ); - em.getTransaction().commit(); - - Assert.assertEquals( 1, CountingRevisionListener.revisionCount ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java deleted file mode 100644 index 3a6ef8957a65..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Inherited extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, InheritedRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( InheritedRevEntity.class, 1 ).getTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( InheritedRevEntity.class, 2 ).getTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - } - - @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( InheritedRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( InheritedRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( InheritedRevEntity.class, 2 ) )); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/InheritedRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/InheritedRevEntity.java deleted file mode 100644 index 23c57d946f90..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/InheritedRevEntity.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.enhanced.SequenceIdRevisionMapping; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@RevisionEntity -public class InheritedRevEntity extends SequenceIdRevisionMapping { -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java deleted file mode 100644 index 47756fdb0414..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class Listener extends BaseEnversJPAFunctionalTestCase { - private Integer id; - private long timestamp1; - private long timestamp2; - private long timestamp3; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ListenerRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - TestRevisionListener.data = "data1"; - - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - - TestRevisionListener.data = "data2"; - - te.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - } - - @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - ListenerRevEntity rev1Data = vr.findRevision( ListenerRevEntity.class, 1 ); - ListenerRevEntity rev2Data = vr.findRevision( ListenerRevEntity.class, 2 ); - - long rev1Timestamp = rev1Data.getTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - assert "data1".equals( rev1Data.getData() ); - - long rev2Timestamp = rev2Data.getTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; - - assert "data2".equals( rev2Data.getData() ); - } - - @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( ListenerRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( ListenerRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( ListenerRevEntity.class, 2 ) )); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ListenerRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ListenerRevEntity.java deleted file mode 100644 index 2acb196d07d2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ListenerRevEntity.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity(TestRevisionListener.class) -public class ListenerRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - private int id; - - @RevisionTimestamp - private long timestamp; - - private String data; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ListenerRevEntity) ) { - return false; - } - - ListenerRevEntity revEntity = (ListenerRevEntity) o; - - if ( id != revEntity.id ) { - return false; - } - if ( timestamp != revEntity.timestamp ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = id; - result = 31 * result + (int) (timestamp ^ (timestamp >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java deleted file mode 100644 index 0d85a3c07497..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.time.Instant; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.temporal.ChronoUnit; -import java.util.Date; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.test.entities.reventity.CustomLocalDateTimeRevEntity; -import org.hibernate.testing.orm.junit.JiraKey; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-10496" ) -public class LocalDateTimeTest extends BaseEnversJPAFunctionalTestCase { - private Instant timestampStart; - private Instant timestampEnd; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - StrTestEntity.class, - CustomLocalDateTimeRevEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - try { - timestampStart = Instant.now(); - - // some DBMs truncate time to seconds. - Thread.sleep( 1100 ); - - StrTestEntity entity = new StrTestEntity( "x" ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( entity ); - em.getTransaction().commit(); - - timestampEnd = Instant.now().plus( 1L, ChronoUnit.SECONDS ); - } - catch( InterruptedException x ) { - fail( "Unexpected interrupted exception" ); - } - finally { - em.close(); - } - } - - @Test - public void testTimestampsUsingDate() { - // expect just one revision prior to this timestamp. - assertEquals( 1, getAuditReader().getRevisionNumberForDate( Date.from( timestampEnd ) ) ); - } - - @Test - public void testRevisionEntityLocalDateTime() { - // get revision - CustomLocalDateTimeRevEntity revInfo = getAuditReader().findRevision( CustomLocalDateTimeRevEntity.class, 1 ); - assertNotNull( revInfo ); - // verify started before revision timestamp - final LocalDateTime started = LocalDateTime.ofInstant( timestampStart, ZoneId.systemDefault() ); - assertTrue( started.isBefore( revInfo.getLocalDateTimestamp() ) ); - // verify ended after revision timestamp - final LocalDateTime ended = LocalDateTime.ofInstant( timestampEnd, ZoneId.systemDefault() ); - assertTrue( ended.isAfter( revInfo.getLocalDateTimestamp() ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java deleted file mode 100644 index 3fa8590f84ed..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.AuditReader; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class LongRevNumber extends BaseEnversJPAFunctionalTestCase { - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, LongRevNumberRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); - } - - @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - assert vr.findRevision( LongRevNumberRevEntity.class, 1l ).getCustomId() == 1l; - assert vr.findRevision( LongRevNumberRevEntity.class, 2l ).getCustomId() == 2l; - } - - @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1l ); - revNumbers.add( 2l ); - - Map revisionMap = vr.findRevisions( LongRevNumberRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1l ).equals( vr.findRevision( LongRevNumberRevEntity.class, 1l ) )); - assert (revisionMap.get( 2l ).equals( vr.findRevision( LongRevNumberRevEntity.class, 2l ) )); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1l, 2l ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1l ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2l ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumberRevEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumberRevEntity.java deleted file mode 100644 index 7db288f54272..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumberRevEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@GenericGenerator(name = "EnversTestingRevisionGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = "table_name", value = "REVISION_GENERATOR"), - @Parameter(name = "initial_value", value = "1"), - @Parameter(name = "increment_size", value = "1"), - @Parameter(name = "prefer_entity_table_as_segment_value", value = "true") - } -) -@RevisionEntity -public class LongRevNumberRevEntity { - @Id - @GeneratedValue(generator = "EnversTestingRevisionGenerator") - @RevisionNumber - @Column(columnDefinition = "int") - private long customId; - - @RevisionTimestamp - private long customTimestamp; - - public long getCustomId() { - return customId; - } - - public void setCustomId(long customId) { - this.customId = customId; - } - - public long getCustomTimestamp() { - return customTimestamp; - } - - public void setCustomTimestamp(long customTimestamp) { - this.customTimestamp = customTimestamp; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof LongRevNumberRevEntity) ) { - return false; - } - - LongRevNumberRevEntity that = (LongRevNumberRevEntity) o; - - if ( customId != that.customId ) { - return false; - } - if ( customTimestamp != that.customTimestamp ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (int) (customId ^ (customId >>> 32)); - result = 31 * result + (int) (customTimestamp ^ (customTimestamp >>> 32)); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java deleted file mode 100644 index 2d64c0761cce..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Optional; - -import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject; -import org.hibernate.boot.model.relational.Database; -import org.hibernate.boot.model.relational.SqlStringGenerationContext; -import org.hibernate.boot.model.relational.internal.SqlStringGenerationContextImpl; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.envers.enhanced.OrderedSequenceGenerator; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.id.IdentifierGenerator; -import org.hibernate.persister.entity.EntityPersister; - -import org.hibernate.testing.RequiresDialect; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7669") -@RequiresDialect(OracleDialect.class) -public class MonotonicRevisionNumberTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; // Otherwise revision entity is not generated. - } - - @Test - public void testOracleSequenceOrder() { - EntityPersister persister = sessionFactory().getMappingMetamodel().getEntityDescriptor(SequenceIdRevisionEntity.class.getName()); - IdentifierGenerator generator = persister.getIdentifierGenerator(); - Assert.assertTrue( OrderedSequenceGenerator.class.isInstance( generator ) ); - - Database database = metadata().getDatabase(); - SqlStringGenerationContext sqlStringGenerationContext = - SqlStringGenerationContextImpl.forTests( database.getJdbcEnvironment() ); - Optional sequenceOptional = database.getAuxiliaryDatabaseObjects().stream() - .filter( o -> "REVISION_GENERATOR".equals( o.getExportIdentifier() ) ) - .findFirst(); - assertThat( sequenceOptional ).isPresent(); - String[] sqlCreateStrings = sequenceOptional.get().sqlCreateStrings( sqlStringGenerationContext ); - Assert.assertTrue( - "Oracle sequence needs to be ordered in RAC environment.", - sqlCreateStrings[0].toLowerCase().endsWith( " order" ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java deleted file mode 100644 index 49cd5924f2ee..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import org.hibernate.internal.util.collections.ArrayHelper; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6696") -public class OverrideCustomRevListenerTest extends GloballyConfiguredRevListenerTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), ListenerRevEntity.class ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java deleted file mode 100644 index 4e1288305e6b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import org.hibernate.internal.util.collections.ArrayHelper; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-6696") -public class OverrideDefaultRevListenerTest extends GloballyConfiguredRevListenerTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), LongRevNumberRevEntity.class ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java deleted file mode 100644 index 28f8149469fc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import java.util.List; -import java.util.Objects; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.Parameter; -import org.hibernate.envers.RevisionEntity; -import org.hibernate.envers.RevisionNumber; -import org.hibernate.envers.RevisionTimestamp; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.id.enhanced.TableGenerator; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; - -/** - * This test checks that when revision number overflow occurs an {@link AuditException} is thrown. - * - * In order to test this use case, the {@code REVISION_GENERATOR} is explicitly initialized at - * {@link Integer.MAX_VALUE} and we attempt to persist two entities that are audited. The - * expectation is that the test should persist the first entity but the second should throw the - * desired exception. - * - * Revision numbers should always be positive values and always increasing, this is due to the - * nature of how the {@link org.hibernate.envers.AuditReader} builds audit queries. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-6615") -public class RevisionNumberOverflowTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class, CustomCappedRevEntity.class }; - } - - @Priority(10) - @Test - public void initData() { - // Save entity with maximum possible revision number - doInJPA( this::entityManagerFactory, entityManager -> { - final StrTestEntity entity = new StrTestEntity( "test1" ); - entityManager.persist( entity ); - } ); - - // Save entity with overflow revision number - try { - doInJPA( this::entityManagerFactory, entityManager -> { - final StrTestEntity entity = new StrTestEntity( "test2" ); - entityManager.persist( entity ); - } ); - } catch ( Exception e ) { - assertRootCause( e, AuditException.class, "Negative revision numbers are not allowed" ); - } - } - - @Test - public void testRevisionExpectations() { - final StrTestEntity expected = new StrTestEntity( "test1", 1 ); - - // Verify there was only one entity instance saved - List results = getAuditReader().createQuery().forRevisionsOfEntity( StrTestEntity.class, true, true ).getResultList(); - assertEquals( 1, results.size() ); - assertEquals( expected, results.get( 0 ) ); - - // Verify entity instance saved has revision Integer.MAX_VALUE - assertEquals( expected, getAuditReader().find( StrTestEntity.class, 1, Integer.MAX_VALUE ) ); - } - - private static void assertRootCause(Exception exception, Class type, String message) { - Throwable root = exception; - while ( root.getCause() != null ) { - root = root.getCause(); - } - assertTyping( type, root ); - assertEquals( message, root.getMessage() ); - } - - // We create a custom revision entity here with an explicit configuration for the revision - // number generation that is explicitly initialized at Integer.MAX_VALUE. This allows the - // test to attempt to persist two entities where the first will not trigger a revision - // number overflow; however the second attempt to persist an entity will. - - @Entity(name = "CustomCappedRevEntity") - @GenericGenerator(name = "EnversCappedRevisionNumberGenerator", - strategy = "org.hibernate.id.enhanced.TableGenerator", - parameters = { - @Parameter(name = TableGenerator.TABLE_PARAM, value = "REVISION_GENERATOR"), - @Parameter(name = TableGenerator.INITIAL_PARAM, value = "2147483647"), - @Parameter(name = TableGenerator.INCREMENT_PARAM, value = "1"), - @Parameter(name = TableGenerator.CONFIG_PREFER_SEGMENT_PER_ENTITY, value = "true") - }) - @RevisionEntity - public static class CustomCappedRevEntity { - @Id - @GeneratedValue(generator = "EnversCappedRevisionNumberGenerator") - @RevisionNumber - private int rev; - - @RevisionTimestamp - private long timestamp; - - public int getRev() { - return rev; - } - - public void setRev(int rev) { - this.rev = rev; - } - - public long getTimestamp() { - return timestamp; - } - - public void setTimestamp(long timestamp) { - this.timestamp = timestamp; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( o == null || getClass() != o.getClass() ) { - return false; - } - CustomCappedRevEntity that = (CustomCappedRevEntity) o; - return rev == that.rev && - timestamp == that.timestamp; - } - - @Override - public int hashCode() { - return Objects.hash( rev, timestamp ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/TestExceptionRevisionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/TestExceptionRevisionListener.java deleted file mode 100644 index 4d0918f124fd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/TestExceptionRevisionListener.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import org.hibernate.envers.RevisionListener; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class TestExceptionRevisionListener implements RevisionListener { - public void newRevision(Object revisionEntity) { - throw new RuntimeException( "forcing transaction failure!" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/TestRevisionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/TestRevisionListener.java deleted file mode 100644 index a1f2de582249..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/TestRevisionListener.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity; - -import org.hibernate.envers.RevisionListener; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class TestRevisionListener implements RevisionListener { - public static String data = "data0"; - - public void newRevision(Object revisionEntity) { - ((ListenerRevEntity) revisionEntity).setData( data ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java deleted file mode 100644 index 6aa24f12644e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.removal; - -import java.util.ArrayList; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey( value = "HHH-7807" ) -@RequiresDialectFeature(DialectChecks.SupportsCascadeDeleteCheck.class) -public abstract class AbstractRevisionEntityRemovalTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - options.put( "org.hibernate.envers.cascade_delete_revision", "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - StrTestEntity.class, ListOwnedEntity.class, ListOwningEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - simple entity - em.getTransaction().begin(); - em.persist( new StrTestEntity( "data" ) ); - em.getTransaction().commit(); - - // Revision 2 - many-to-many relation - em.getTransaction().begin(); - ListOwnedEntity owned = new ListOwnedEntity( 1, "data" ); - ListOwningEntity owning = new ListOwningEntity( 1, "data" ); - owned.setReferencing( new ArrayList() ); - owning.setReferences( new ArrayList() ); - owned.getReferencing().add( owning ); - owning.getReferences().add( owned ); - em.persist( owned ); - em.persist( owning ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - Assert.assertEquals( 1, countRecords( em, "STR_TEST_AUD" ) ); - Assert.assertEquals( 1, countRecords( em, "ListOwned_AUD" ) ); - Assert.assertEquals( 1, countRecords( em, "ListOwning_AUD" ) ); - Assert.assertEquals( 1, countRecords( em, "ListOwning_ListOwned_AUD" ) ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - @Priority(9) - public void testRemoveExistingRevisions() { - EntityManager em = getEntityManager(); - removeRevision( em, 1 ); - removeRevision( em, 2 ); - em.close(); - } - - @Test - @Priority(8) - public void testEmptyAuditTables() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - Assert.assertEquals( 0, countRecords( em, "STR_TEST_AUD" ) ); - Assert.assertEquals( 0, countRecords( em, "ListOwned_AUD" ) ); - Assert.assertEquals( 0, countRecords( em, "ListOwning_AUD" ) ); - Assert.assertEquals( 0, countRecords( em, "ListOwning_ListOwned_AUD" ) ); - - em.getTransaction().commit(); - em.close(); - } - - private int countRecords(EntityManager em, String tableName) { - return ( (Number) em.createNativeQuery( "SELECT COUNT(*) FROM " + tableName ).getSingleResult() ).intValue(); - } - - private void removeRevision(EntityManager em, Number number) { - em.getTransaction().begin(); - Object entity = em.find( getRevisionEntityClass(), number ); - Assert.assertNotNull( entity ); - em.remove( entity ); - em.getTransaction().commit(); - Assert.assertNull( em.find( getRevisionEntityClass(), number ) ); - } - - protected abstract Class getRevisionEntityClass(); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java deleted file mode 100644 index 8bf9949ba394..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.removal; - -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@RequiresDialectFeature(DialectChecks.SupportsCascadeDeleteCheck.class) -public class RemoveDefaultRevisionEntity extends AbstractRevisionEntityRemovalTest { - @Override - protected Class getRevisionEntityClass() { - return SequenceIdRevisionEntity.class; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java deleted file mode 100644 index 53114eca1cba..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.removal; - -import java.util.Map; - -import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@RequiresDialectFeature(DialectChecks.SupportsCascadeDeleteCheck.class) -public class RemoveTrackingRevisionEntity extends AbstractRevisionEntityRemovalTest { - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put("org.hibernate.envers.track_entities_changed_in_revision", "true"); - } - - @Override - protected Class getRevisionEntityClass() { - return SequenceIdTrackingModifiedEntitiesRevisionEntity.class; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java deleted file mode 100644 index b584cd28410a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; - -import java.util.Map; - -import org.hibernate.envers.ModifiedEntityNames; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.AnnotatedTrackingRevisionEntity; -import org.hibernate.internal.util.collections.ArrayHelper; - -/** - * Tests proper behavior of revision entity that utilizes {@link ModifiedEntityNames} annotation. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class AnnotatedTrackingEntitiesTest extends DefaultTrackingEntitiesTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), AnnotatedTrackingRevisionEntity.class ); - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "false" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java deleted file mode 100644 index 14bfe1b7bcd7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; - -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.EntityTrackingRevisionListener; -import org.hibernate.envers.exception.AuditException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.CustomTrackingRevisionEntity; -import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.CustomTrackingRevisionListener; -import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.ModifiedEntityTypeEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - - -/** - * Tests proper behavior of entity listener that implements {@link EntityTrackingRevisionListener} - * interface. {@link CustomTrackingRevisionListener} shall be notified whenever an entity instance has been - * added, modified or removed, so that changed entity name can be persisted. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class CustomTrackingEntitiesTest extends BaseEnversJPAFunctionalTestCase { - private Integer steId = null; - private Integer siteId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ModifiedEntityTypeEntity.class, - StrTestEntity.class, - StrIntTestEntity.class, - CustomTrackingRevisionEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - Adding two entities - em.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "x" ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1 ); - em.persist( ste ); - em.persist( site ); - steId = ste.getId(); - siteId = site.getId(); - em.getTransaction().commit(); - - // Revision 2 - Modifying one entity - em.getTransaction().begin(); - site = em.find( StrIntTestEntity.class, siteId ); - site.setNumber( 2 ); - em.getTransaction().commit(); - - // Revision 3 - Deleting both entities - em.getTransaction().begin(); - ste = em.find( StrTestEntity.class, steId ); - site = em.find( StrIntTestEntity.class, siteId ); - em.remove( ste ); - em.remove( site ); - em.getTransaction().commit(); - } - - @Test - public void testTrackAddedEntities() { - ModifiedEntityTypeEntity steDescriptor = new ModifiedEntityTypeEntity( StrTestEntity.class.getName() ); - ModifiedEntityTypeEntity siteDescriptor = new ModifiedEntityTypeEntity( StrIntTestEntity.class.getName() ); - - CustomTrackingRevisionEntity ctre = getAuditReader().findRevision( CustomTrackingRevisionEntity.class, 1 ); - - assert ctre.getModifiedEntityTypes() != null; - assert ctre.getModifiedEntityTypes().size() == 2; - assert TestTools.makeSet( steDescriptor, siteDescriptor ).equals( ctre.getModifiedEntityTypes() ); - } - - @Test - public void testTrackModifiedEntities() { - ModifiedEntityTypeEntity siteDescriptor = new ModifiedEntityTypeEntity( StrIntTestEntity.class.getName() ); - - CustomTrackingRevisionEntity ctre = getAuditReader().findRevision( CustomTrackingRevisionEntity.class, 2 ); - - assert ctre.getModifiedEntityTypes() != null; - assert ctre.getModifiedEntityTypes().size() == 1; - assert TestTools.makeSet( siteDescriptor ).equals( ctre.getModifiedEntityTypes() ); - } - - @Test - public void testTrackDeletedEntities() { - ModifiedEntityTypeEntity steDescriptor = new ModifiedEntityTypeEntity( StrTestEntity.class.getName() ); - ModifiedEntityTypeEntity siteDescriptor = new ModifiedEntityTypeEntity( StrIntTestEntity.class.getName() ); - - CustomTrackingRevisionEntity ctre = getAuditReader().findRevision( CustomTrackingRevisionEntity.class, 3 ); - - assert ctre.getModifiedEntityTypes() != null; - assert ctre.getModifiedEntityTypes().size() == 2; - assert TestTools.makeSet( steDescriptor, siteDescriptor ).equals( ctre.getModifiedEntityTypes() ); - } - - @Test(expected = AuditException.class) - public void testFindEntitiesChangedInRevisionException() { - getAuditReader().getCrossTypeRevisionChangesReader(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java deleted file mode 100644 index a21491aac5ae..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; - -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.CrossTypeRevisionChangesReader; -import org.hibernate.envers.RevisionType; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.envers.tools.Pair; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.junit.Test; - -/** - * Tests proper behavior of tracking modified entity names when {@code org.hibernate.envers.track_entities_changed_in_revision} - * parameter is set to {@code true}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@SuppressWarnings("unchecked") -public class DefaultTrackingEntitiesTest extends BaseEnversJPAFunctionalTestCase { - private Integer steId = null; - private Integer siteId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, StrIntTestEntity.class}; - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - Adding two entities - em.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "x" ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1 ); - em.persist( ste ); - em.persist( site ); - steId = ste.getId(); - siteId = site.getId(); - em.getTransaction().commit(); - - // Revision 2 - Modifying one entity - em.getTransaction().begin(); - site = em.find( StrIntTestEntity.class, siteId ); - site.setNumber( 2 ); - em.getTransaction().commit(); - - // Revision 3 - Deleting both entities - em.getTransaction().begin(); - ste = em.find( StrTestEntity.class, steId ); - site = em.find( StrIntTestEntity.class, siteId ); - em.remove( ste ); - em.remove( site ); - em.getTransaction().commit(); - } - - @Test - public void testRevEntityTableCreation() { - for ( Table table : metadata().collectTableMappings() ) { - if ( "REVCHANGES".equals( table.getName() ) ) { - assert table.getColumnSpan() == 2; - assert table.getColumn( new Column( "REV" ) ) != null; - assert table.getColumn( new Column( "ENTITYNAME" ) ) != null; - return; - } - } - assert false; - } - - @Test - public void testTrackAddedEntities() { - StrTestEntity ste = new StrTestEntity( "x", steId ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1, siteId ); - - assert TestTools.checkCollection( getCrossTypeRevisionChangesReader().findEntities( 1 ), ste, site ); - } - - @Test - public void testTrackModifiedEntities() { - StrIntTestEntity site = new StrIntTestEntity( "y", 2, siteId ); - - assert TestTools.checkCollection( getCrossTypeRevisionChangesReader().findEntities( 2 ), site ); - } - - @Test - public void testTrackDeletedEntities() { - StrTestEntity ste = new StrTestEntity( null, steId ); - StrIntTestEntity site = new StrIntTestEntity( null, null, siteId ); - - assert TestTools.checkCollection( getCrossTypeRevisionChangesReader().findEntities( 3 ), site, ste ); - } - - @Test - public void testFindChangesInInvalidRevision() { - assert getCrossTypeRevisionChangesReader().findEntities( 4 ).isEmpty(); - } - - @Test - public void testTrackAddedEntitiesGroupByRevisionType() { - StrTestEntity ste = new StrTestEntity( "x", steId ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1, siteId ); - - Map> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType( 1 ); - assert TestTools.checkCollection( result.get( RevisionType.ADD ), site, ste ); - assert TestTools.checkCollection( result.get( RevisionType.MOD ) ); - assert TestTools.checkCollection( result.get( RevisionType.DEL ) ); - } - - @Test - public void testTrackModifiedEntitiesGroupByRevisionType() { - StrIntTestEntity site = new StrIntTestEntity( "y", 2, siteId ); - - Map> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType( 2 ); - assert TestTools.checkCollection( result.get( RevisionType.ADD ) ); - assert TestTools.checkCollection( result.get( RevisionType.MOD ), site ); - assert TestTools.checkCollection( result.get( RevisionType.DEL ) ); - } - - @Test - public void testTrackDeletedEntitiesGroupByRevisionType() { - StrTestEntity ste = new StrTestEntity( null, steId ); - StrIntTestEntity site = new StrIntTestEntity( null, null, siteId ); - - Map> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType( 3 ); - assert TestTools.checkCollection( result.get( RevisionType.ADD ) ); - assert TestTools.checkCollection( result.get( RevisionType.MOD ) ); - assert TestTools.checkCollection( result.get( RevisionType.DEL ), site, ste ); - } - - @Test - public void testFindChangedEntitiesByRevisionTypeADD() { - StrTestEntity ste = new StrTestEntity( "x", steId ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1, siteId ); - - assert TestTools.checkCollection( - getCrossTypeRevisionChangesReader().findEntities( 1, RevisionType.ADD ), - ste, - site - ); - } - - @Test - public void testFindChangedEntitiesByRevisionTypeMOD() { - StrIntTestEntity site = new StrIntTestEntity( "y", 2, siteId ); - - assert TestTools.checkCollection( - getCrossTypeRevisionChangesReader().findEntities( 2, RevisionType.MOD ), - site - ); - } - - @Test - public void testFindChangedEntitiesByRevisionTypeDEL() { - StrTestEntity ste = new StrTestEntity( null, steId ); - StrIntTestEntity site = new StrIntTestEntity( null, null, siteId ); - - assert TestTools.checkCollection( - getCrossTypeRevisionChangesReader().findEntities( 3, RevisionType.DEL ), - ste, - site - ); - } - - @Test - public void testFindEntityTypesChangedInRevision() { - assert TestTools.makeSet( - Pair.make( StrTestEntity.class.getName(), StrTestEntity.class ), - Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) - ) - .equals( getCrossTypeRevisionChangesReader().findEntityTypes( 1 ) ); - - assert TestTools.makeSet( Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) ) - .equals( getCrossTypeRevisionChangesReader().findEntityTypes( 2 ) ); - - assert TestTools.makeSet( - Pair.make( StrTestEntity.class.getName(), StrTestEntity.class ), - Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) - ) - .equals( getCrossTypeRevisionChangesReader().findEntityTypes( 3 ) ); - } - - private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() { - return getAuditReader().getCrossTypeRevisionChangesReader(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java deleted file mode 100644 index 64065d25bf78..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Car; -import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Person; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.envers.tools.Pair; - -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class EntityNamesTest extends BaseEnversFunctionalTestCase { - @Override - protected String[] getMappings() { - return new String[] {"mappings/entityNames/manyToManyAudited/mappings.hbm.xml"}; - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "true" ); - } - - @Test - @Priority(10) - public void initData() { - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 32 ); - Person pers4 = new Person( "Camomo", 15 ); - - // Revision 1 - getSession().getTransaction().begin(); - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - owners.add( pers3 ); - Car car1 = new Car( 5, owners ); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - long person1Id = pers1.getId(); - - // Revision 2 - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers3 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", person1Id ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - } - - @Test - @SuppressWarnings("unchecked") - public void testModifiedEntityTypes() { - assert TestTools.makeSet( - Pair.make( Car.class.getName(), Car.class ), - Pair.make( "Personaje", Person.class ) - ) - .equals( getAuditReader().getCrossTypeRevisionChangesReader().findEntityTypes( 1 ) ); - assert TestTools.makeSet( - Pair.make( Car.class.getName(), Car.class ), - Pair.make( "Personaje", Person.class ) - ) - .equals( getAuditReader().getCrossTypeRevisionChangesReader().findEntityTypes( 2 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java deleted file mode 100644 index c5bef32946c4..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; - -import java.util.Map; - -import org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.ExtendedRevisionEntity; -import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.ExtendedRevisionListener; -import org.hibernate.internal.util.collections.ArrayHelper; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests proper behavior of revision entity that extends {@link DefaultTrackingModifiedEntitiesRevisionEntity}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class ExtendedRevisionEntityTest extends DefaultTrackingEntitiesTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), ExtendedRevisionEntity.class ); - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "false" ); - } - - @Test - public void testCommentPropertyValue() { - ExtendedRevisionEntity ere = getAuditReader().findRevision( ExtendedRevisionEntity.class, 1 ); - - Assert.assertEquals( ExtendedRevisionListener.COMMENT_VALUE, ere.getComment() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java deleted file mode 100644 index 4148ffdc3be7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; - -import java.util.HashSet; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.CrossTypeRevisionChangesReader; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class TrackingEntitiesMultipleChangesTest extends BaseEnversJPAFunctionalTestCase { - private Integer steId1 = null; - private Integer steId2 = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - Adding two entities - em.getTransaction().begin(); - StrTestEntity ste1 = new StrTestEntity( "x" ); - StrTestEntity ste2 = new StrTestEntity( "y" ); - em.persist( ste1 ); - em.persist( ste2 ); - steId1 = ste1.getId(); - steId2 = ste2.getId(); - em.getTransaction().commit(); - - // Revision 2 - Adding first and removing second entity - em.getTransaction().begin(); - ste1 = em.find( StrTestEntity.class, steId1 ); - ste2 = em.find( StrTestEntity.class, steId2 ); - ste1.setStr( "z" ); - em.remove( ste2 ); - em.getTransaction().commit(); - - // Revision 3 - Modifying and removing the same entity. - em.getTransaction().begin(); - ste1 = em.find( StrTestEntity.class, steId1 ); - ste1.setStr( "a" ); - em.merge( ste1 ); - em.remove( ste1 ); - em.getTransaction().commit(); - } - - @Test - public void testTrackAddedTwoEntities() { - StrTestEntity ste1 = new StrTestEntity( "x", steId1 ); - StrTestEntity ste2 = new StrTestEntity( "y", steId2 ); - - Assert.assertEquals( - TestTools.makeSet( ste1, ste2 ), - new HashSet( getCrossTypeRevisionChangesReader().findEntities( 1 ) ) - ); - } - - @Test - public void testTrackUpdateAndRemoveDifferentEntities() { - StrTestEntity ste1 = new StrTestEntity( "z", steId1 ); - StrTestEntity ste2 = new StrTestEntity( null, steId2 ); - - Assert.assertEquals( - TestTools.makeSet( ste1, ste2 ), - new HashSet( getCrossTypeRevisionChangesReader().findEntities( 2 ) ) - ); - } - - @Test - public void testTrackUpdateAndRemoveTheSameEntity() { - StrTestEntity ste1 = new StrTestEntity( null, steId1 ); - - Assert.assertEquals( - TestTools.makeSet( ste1 ), - new HashSet( getCrossTypeRevisionChangesReader().findEntities( 3 ) ) - ); - } - - private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() { - return getAuditReader().getCrossTypeRevisionChangesReader(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java deleted file mode 100644 index 7a3920137877..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.revfordate; - -import java.util.Date; -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class RevisionForDate extends BaseEnversJPAFunctionalTestCase { - private long timestamp1; - private long timestamp2; - private long timestamp3; - private long timestamp4; - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - timestamp1 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity rfd = new StrTestEntity( "x" ); - em.persist( rfd ); - id = rfd.getId(); - em.getTransaction().commit(); - - timestamp2 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 2 - em.getTransaction().begin(); - rfd = em.find( StrTestEntity.class, id ); - rfd.setStr( "y" ); - em.getTransaction().commit(); - - timestamp3 = System.currentTimeMillis(); - - Thread.sleep( 100 ); - - // Revision 3 - em.getTransaction().begin(); - rfd = em.find( StrTestEntity.class, id ); - rfd.setStr( "z" ); - em.getTransaction().commit(); - - timestamp4 = System.currentTimeMillis(); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); - } - - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestampslWithFind() { - getAuditReader().find( StrTestEntity.class, id, new Date( timestamp1 ) ); - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp4 ) ).intValue() == 3; - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testEntitiesForTimestamps() { - assert "x".equals( getAuditReader().find( StrTestEntity.class, id, new Date( timestamp2 ) ).getStr() ); - assert "y".equals( getAuditReader().find( StrTestEntity.class, id, new Date( timestamp3 ) ).getStr() ); - assert "z".equals( getAuditReader().find( StrTestEntity.class, id, new Date( timestamp4 ) ).getStr() ); - } - - @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 3 ) ).intValue() == 3; - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() + 1 ) - .getTime() > timestamp3; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp4 ) ) ).getTime() <= timestamp4; - } - - @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testRevisionsForInstant() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ).toInstant() ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ).toInstant() ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ).toInstant() ) ).getTime() <= timestamp3; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ).toInstant() ).intValue() + 1 ) - .getTime() > timestamp3; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp4 ).toInstant() ) ).getTime() <= timestamp4; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIdTestEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIdTestEntity1.java deleted file mode 100644 index c6c6d2d8fbba..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIdTestEntity1.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.sameids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SameIdTestEntity1 { - @Id - private Integer id; - - @Audited - private String str1; - - public SameIdTestEntity1() { - } - - public SameIdTestEntity1(String str1) { - this.str1 = str1; - } - - public SameIdTestEntity1(Integer id, String str1) { - this.id = id; - this.str1 = str1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SameIdTestEntity1) ) { - return false; - } - - SameIdTestEntity1 that = (SameIdTestEntity1) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIdTestEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIdTestEntity2.java deleted file mode 100644 index c11a3dcaad7b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIdTestEntity2.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.sameids; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class SameIdTestEntity2 { - @Id - private Integer id; - - @Audited - private String str1; - - public SameIdTestEntity2() { - } - - public SameIdTestEntity2(String str1) { - this.str1 = str1; - } - - public SameIdTestEntity2(Integer id, String str1) { - this.id = id; - this.str1 = str1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SameIdTestEntity2) ) { - return false; - } - - SameIdTestEntity2 that = (SameIdTestEntity2) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java deleted file mode 100644 index 3effe423029b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.sameids; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; - -/** - * A test which checks that if we add two different entities with the same ids in one revision, they - * will both be stored. - * - * @author Adam Warski (adam at warski dot org) - */ -public class SameIds extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SameIdTestEntity1.class, SameIdTestEntity2.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - SameIdTestEntity1 site1 = new SameIdTestEntity1( 1, "str1" ); - SameIdTestEntity2 site2 = new SameIdTestEntity2( 1, "str1" ); - - em.persist( site1 ); - em.persist( site2 ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - site1 = em.find( SameIdTestEntity1.class, 1 ); - site2 = em.find( SameIdTestEntity2.class, 1 ); - site1.setStr1( "str2" ); - site2.setStr1( "str2" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SameIdTestEntity1.class, 1 ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SameIdTestEntity2.class, 1 ) ); - } - - @Test - public void testHistoryOfSite1() { - SameIdTestEntity1 ver1 = new SameIdTestEntity1( 1, "str1" ); - SameIdTestEntity1 ver2 = new SameIdTestEntity1( 1, "str2" ); - - assert getAuditReader().find( SameIdTestEntity1.class, 1, 1 ).equals( ver1 ); - assert getAuditReader().find( SameIdTestEntity1.class, 1, 2 ).equals( ver2 ); - } - - @Test - public void testHistoryOfSite2() { - SameIdTestEntity2 ver1 = new SameIdTestEntity2( 1, "str1" ); - SameIdTestEntity2 ver2 = new SameIdTestEntity2( 1, "str2" ); - - assert getAuditReader().find( SameIdTestEntity2.class, 1, 1 ).equals( ver1 ); - assert getAuditReader().find( SameIdTestEntity2.class, 1, 2 ).equals( ver2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java deleted file mode 100644 index e9986d4dd889..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicSecondary extends BaseEnversJPAFunctionalTestCase { - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SecondaryTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - SecondaryTestEntity ste = new SecondaryTestEntity( "a", "1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryTestEntity.class, ste.getId() ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); - - // - - id = ste.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - SecondaryTestEntity ver1 = new SecondaryTestEntity( id, "a", "1" ); - SecondaryTestEntity ver2 = new SecondaryTestEntity( id, "b", "2" ); - - assert getAuditReader().find( SecondaryTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryTestEntity.class, id, 2 ).equals( ver2 ); - } - - @SuppressWarnings("unchecked") - @Test - public void testTableNames() { - Assert.assertEquals("secondary_AUD", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.SecondaryTestEntity_AUD" - ) - .getJoins().get( 0 ).getTable().getName() - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java deleted file mode 100644 index 07d101341cc9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class NamingSecondary extends BaseEnversJPAFunctionalTestCase { - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SecondaryNamingTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - SecondaryNamingTestEntity ste = new SecondaryNamingTestEntity( "a", "1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryNamingTestEntity.class, ste.getId() ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); - - // - - id = ste.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryNamingTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - SecondaryNamingTestEntity ver1 = new SecondaryNamingTestEntity( id, "a", "1" ); - SecondaryNamingTestEntity ver2 = new SecondaryNamingTestEntity( id, "b", "2" ); - - assert getAuditReader().find( SecondaryNamingTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryNamingTestEntity.class, id, 2 ).equals( ver2 ); - } - - @SuppressWarnings("unchecked") - @Test - public void testTableNames() { - Assert.assertEquals( "sec_versions", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.SecondaryNamingTestEntity_AUD" - ) - .getJoins().get( 0 ).getTable().getName() - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/SecondaryNamingTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/SecondaryNamingTestEntity.java deleted file mode 100644 index e03f83121cf5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/SecondaryNamingTestEntity.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.SecondaryTable; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.SecondaryAuditTable; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@SecondaryTable(name = "secondary") -@SecondaryAuditTable(secondaryTableName = "secondary", secondaryAuditTableName = "sec_versions") -@Audited -public class SecondaryNamingTestEntity { - @Id - @GeneratedValue - private Integer id; - - private String s1; - - @Column(table = "secondary") - private String s2; - - public SecondaryNamingTestEntity(Integer id, String s1, String s2) { - this.id = id; - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryNamingTestEntity(String s1, String s2) { - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryNamingTestEntity() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getS1() { - return s1; - } - - public void setS1(String s1) { - this.s1 = s1; - } - - public String getS2() { - return s2; - } - - public void setS2(String s2) { - this.s2 = s2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SecondaryNamingTestEntity) ) { - return false; - } - - SecondaryNamingTestEntity that = (SecondaryNamingTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( s1 != null ? !s1.equals( that.s1 ) : that.s1 != null ) { - return false; - } - if ( s2 != null ? !s2.equals( that.s2 ) : that.s2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (s1 != null ? s1.hashCode() : 0); - result = 31 * result + (s2 != null ? s2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/SecondaryTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/SecondaryTestEntity.java deleted file mode 100644 index 9aa7e7c074f6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/SecondaryTestEntity.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.SecondaryTable; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@SecondaryTable(name = "secondary") -@Audited -public class SecondaryTestEntity { - @Id - @GeneratedValue - private Integer id; - - private String s1; - - @Column(table = "secondary") - private String s2; - - public SecondaryTestEntity(Integer id, String s1, String s2) { - this.id = id; - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryTestEntity(String s1, String s2) { - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryTestEntity() { - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getS1() { - return s1; - } - - public void setS1(String s1) { - this.s1 = s1; - } - - public String getS2() { - return s2; - } - - public void setS2(String s2) { - this.s2 = s2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SecondaryTestEntity) ) { - return false; - } - - SecondaryTestEntity that = (SecondaryTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( s1 != null ? !s1.equals( that.s1 ) : that.s1 != null ) { - return false; - } - if ( s2 != null ? !s2.equals( that.s2 ) : that.s2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (s1 != null ? s1.hashCode() : 0); - result = 31 * result + (s2 != null ? s2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java deleted file mode 100644 index c2c7d28442f6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary.ids; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class EmbIdSecondary extends BaseEnversJPAFunctionalTestCase { - private EmbId id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SecondaryEmbIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - id = new EmbId( 1, 2 ); - - SecondaryEmbIdTestEntity ste = new SecondaryEmbIdTestEntity( id, "a", "1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryEmbIdTestEntity.class, ste.getId() ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryEmbIdTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - SecondaryEmbIdTestEntity ver1 = new SecondaryEmbIdTestEntity( id, "a", "1" ); - SecondaryEmbIdTestEntity ver2 = new SecondaryEmbIdTestEntity( id, "b", "2" ); - - assert getAuditReader().find( SecondaryEmbIdTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryEmbIdTestEntity.class, id, 2 ).equals( ver2 ); - } - - @SuppressWarnings("unchecked") - @Test - public void testTableNames() { - Assert.assertEquals( "sec_embid_versions", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.ids.SecondaryEmbIdTestEntity_AUD" - ).getJoins().get( 0 ).getTable().getName() - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java deleted file mode 100644 index baf459f001d9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary.ids; - -import java.util.Arrays; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class MulIdSecondary extends BaseEnversJPAFunctionalTestCase { - private MulId id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SecondaryMulIdTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - id = new MulId( 1, 2 ); - - SecondaryMulIdTestEntity ste = new SecondaryMulIdTestEntity( id, "a", "1" ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryMulIdTestEntity.class, id ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryMulIdTestEntity.class, id ) ); - } - - @Test - public void testHistoryOfId() { - SecondaryMulIdTestEntity ver1 = new SecondaryMulIdTestEntity( id, "a", "1" ); - SecondaryMulIdTestEntity ver2 = new SecondaryMulIdTestEntity( id, "b", "2" ); - - assert getAuditReader().find( SecondaryMulIdTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryMulIdTestEntity.class, id, 2 ).equals( ver2 ); - } - - @SuppressWarnings("unchecked") - @Test - public void testTableNames() { - Assert.assertEquals( - "sec_mulid_versions", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.ids.SecondaryMulIdTestEntity_AUD" - ).getJoins().get( 0 ).getTable().getName() - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/SecondaryEmbIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/SecondaryEmbIdTestEntity.java deleted file mode 100644 index 717519daa9fa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/SecondaryEmbIdTestEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary.ids; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.SecondaryTable; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.SecondaryAuditTable; -import org.hibernate.orm.test.envers.entities.ids.EmbId; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@SecondaryTable(name = "secondary") -@SecondaryAuditTable(secondaryTableName = "secondary", secondaryAuditTableName = "sec_embid_versions") -@Audited -public class SecondaryEmbIdTestEntity { - @Id - private EmbId id; - - private String s1; - - @Column(table = "secondary") - private String s2; - - public SecondaryEmbIdTestEntity(EmbId id, String s1, String s2) { - this.id = id; - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryEmbIdTestEntity(String s1, String s2) { - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryEmbIdTestEntity() { - } - - public EmbId getId() { - return id; - } - - public void setId(EmbId id) { - this.id = id; - } - - public String getS1() { - return s1; - } - - public void setS1(String s1) { - this.s1 = s1; - } - - public String getS2() { - return s2; - } - - public void setS2(String s2) { - this.s2 = s2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SecondaryEmbIdTestEntity) ) { - return false; - } - - SecondaryEmbIdTestEntity that = (SecondaryEmbIdTestEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( s1 != null ? !s1.equals( that.s1 ) : that.s1 != null ) { - return false; - } - if ( s2 != null ? !s2.equals( that.s2 ) : that.s2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (s1 != null ? s1.hashCode() : 0); - result = 31 * result + (s2 != null ? s2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/SecondaryMulIdTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/SecondaryMulIdTestEntity.java deleted file mode 100644 index 1c48f0bc5ee1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/SecondaryMulIdTestEntity.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.secondary.ids; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.IdClass; -import jakarta.persistence.SecondaryTable; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.SecondaryAuditTable; -import org.hibernate.orm.test.envers.entities.ids.MulId; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@SecondaryTable(name = "secondary") -@SecondaryAuditTable(secondaryTableName = "secondary", secondaryAuditTableName = "sec_mulid_versions") -@Audited -@IdClass(MulId.class) -public class SecondaryMulIdTestEntity { - @Id - private Integer id1; - - @Id - private Integer id2; - - private String s1; - - @Column(table = "secondary") - private String s2; - - public SecondaryMulIdTestEntity(MulId id, String s1, String s2) { - this.id1 = id.getId1(); - this.id2 = id.getId2(); - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryMulIdTestEntity(String s1, String s2) { - this.s1 = s1; - this.s2 = s2; - } - - public SecondaryMulIdTestEntity() { - } - - public Integer getId1() { - return id1; - } - - public void setId1(Integer id1) { - this.id1 = id1; - } - - public Integer getId2() { - return id2; - } - - public void setId2(Integer id2) { - this.id2 = id2; - } - - public String getS1() { - return s1; - } - - public void setS1(String s1) { - this.s1 = s1; - } - - public String getS2() { - return s2; - } - - public void setS2(String s2) { - this.s2 = s2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof SecondaryMulIdTestEntity) ) { - return false; - } - - SecondaryMulIdTestEntity that = (SecondaryMulIdTestEntity) o; - - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { - return false; - } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { - return false; - } - if ( s1 != null ? !s1.equals( that.s1 ) : that.s1 != null ) { - return false; - } - if ( s2 != null ? !s2.equals( that.s2 ) : that.s2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id1 != null ? id1.hashCode() : 0); - result = 31 * result + (id2 != null ? id2.hashCode() : 0); - result = 31 * result + (s1 != null ? s1.hashCode() : 0); - result = 31 * result + (s2 != null ? s2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java deleted file mode 100644 index a00de4dd0dfd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.serialization; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class SerializingCollection extends BaseEnversJPAFunctionalTestCase { - private Integer ed1_id; - private Integer ing1_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {CollectionRefEdEntity.class, CollectionRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - CollectionRefEdEntity ed1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - - CollectionRefIngEntity ing1 = new CollectionRefIngEntity( 3, "data_ing_1", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ing1 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ing1_id = ing1.getId(); - } - - @Test - public void testDetach() throws Exception { - CollectionRefIngEntity ing1 = getEntityManager().find( CollectionRefIngEntity.class, ing1_id ); - CollectionRefEdEntity rev1 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 1 ); - - // First forcing loading of the collection - assert rev1.getReffering().size() == 1; - - // Now serializing and de-serializing the - rev1 = serializeDeserialize( rev1 ); - - // And checking the colleciton again - assert rev1.getReffering().contains( ing1 ); - assert rev1.getReffering().size() == 1; - - } - - @SuppressWarnings("unchecked") - public static T serializeDeserialize(T o) throws Exception { - if ( o == null ) { - return null; - } - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream( baos ); - oos.writeObject( o ); - byte[] buffer = baos.toByteArray(); - baos.close(); - - ByteArrayInputStream bais = new ByteArrayInputStream( buffer ); - ObjectInputStream ois = new ObjectInputStream( bais ); - return (T) ois.readObject(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java deleted file mode 100644 index cdf688c577fd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.util.Date; -import java.util.List; -import java.util.Map; - -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.SybaseDialect; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; - -/** - * @author Chris Cranford - */ -public abstract class AbstractRevisionEndTimestampTest extends BaseEnversJPAFunctionalTestCase { - - private static final String TIMESTAMP_FIELD = "REVEND_TSTMP"; - - @Override - @SuppressWarnings("unchecked") - public void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_TABLE_SUFFIX, "_AUD" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, TIMESTAMP_FIELD ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_LEGACY_PLACEMENT, "false" ); - } - - @SuppressWarnings("unchecked") - protected List> getRevisions(Class clazz, Integer id) { - String sql = String.format( "SELECT e FROM %s_AUD e WHERE e.originalId.id = :id", clazz.getName() ); - return getEntityManager().createQuery( sql ).setParameter( "id", id ).getResultList(); - } - - protected void verifyRevisionEndTimestampsInSubclass(Class clazz, Integer id) { - final List> entities = getRevisions( clazz, id ); - for ( Map entity : entities ) { - Object timestampParentClass = entity.get( TIMESTAMP_FIELD ); - Object timestampSubclass = entity.get( TIMESTAMP_FIELD + "_" + clazz.getSimpleName() + "_AUD" ); - SequenceIdRevisionEntity revisionEnd = (SequenceIdRevisionEntity) entity.get( "REVEND" ); - if ( timestampParentClass == null ) { - // if the parent class has no revision end timestamp, verify that the child does not have a value - // as well as that the revision end field is also null. - assertNull( timestampSubclass ); - assertNull( revisionEnd ); - } - else { - // Verify that the timestamp in the revision entity matches that in the parent entity's - // revision end timestamp field as well. - final Date timestamp = (Date) timestampParentClass; - final Dialect dialect = getDialect(); - if ( dialect instanceof SybaseDialect ) { - // Sybase DATETIME are accurate to 1/300 second on platforms that support that level of - // granularity. - assertEquals( timestamp.getTime() / 1000.0, revisionEnd.getTimestamp() / 1000.0, 1.0 / 300.0 ); - } - else { - assertEquals( timestamp.getTime(), revisionEnd.getTimestamp() ); - } - - // make sure both parent and child have the same values. - assertEquals( timestampParentClass, timestampSubclass ); - } - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java deleted file mode 100644 index b9022c16bc8c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; - -import java.util.Map; - -import org.hibernate.boot.MetadataSources; -import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.envers.configuration.Configuration; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.strategy.AuditStrategy; -import org.hibernate.envers.strategy.DefaultAuditStrategy; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.service.ServiceRegistry; -import org.junit.Test; - -import org.hibernate.testing.ServiceRegistryBuilder; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.util.ServiceRegistryUtil; - -/** - * A set of unit tests that verify that the audit strategy selector appropriately selects and - * creators the correct strategy class. - * - * @author Chris Cranford - */ -@JiraKey( value = "HHH-12077" ) -public class AuditStraegySelectorTest { - - @Test - public void testAuditStrategySelectorNoneSpecified() { - testAuditStrategySelector( null, DefaultAuditStrategy.class ); - } - - @Test - public void testAuditStrategySelectorDefaultSpecified() { - // test old implementations - testAuditStrategySelector( "default", DefaultAuditStrategy.class ); - testAuditStrategySelector( DefaultAuditStrategy.class.getSimpleName(), DefaultAuditStrategy.class ); - testAuditStrategySelector( DefaultAuditStrategy.class.getName(), DefaultAuditStrategy.class ); - - // test new implementation - testAuditStrategySelector( - org.hibernate.envers.strategy.internal.DefaultAuditStrategy.class.getName(), - org.hibernate.envers.strategy.internal.DefaultAuditStrategy.class - ); - } - - @Test - public void testAuditStrategySelectorValiditySpecified() { - // test old implementations - testAuditStrategySelector( "validity", ValidityAuditStrategy.class ); - testAuditStrategySelector( ValidityAuditStrategy.class.getSimpleName(), ValidityAuditStrategy.class ); - testAuditStrategySelector( ValidityAuditStrategy.class.getName(), ValidityAuditStrategy.class ); - - // test new implementation - testAuditStrategySelector( - org.hibernate.envers.strategy.internal.ValidityAuditStrategy.class.getName(), - org.hibernate.envers.strategy.internal.ValidityAuditStrategy.class - ); - } - - private void testAuditStrategySelector(String propertyValue, Class expectedStrategyClass) { - final Map properties = ServiceRegistryUtil.createBaseSettings(); - if ( propertyValue != null ) { - properties.put( EnversSettings.AUDIT_STRATEGY, propertyValue ); - } - - final ServiceRegistry sr = ServiceRegistryBuilder.buildServiceRegistry( properties ); - try { - final MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( sr ).buildMetadata(); - final Configuration configuration = sr.getService( EnversService.class ).getConfig(); - assertTyping( expectedStrategyClass, configuration.getAuditStrategy() ); - } - finally { - ServiceRegistryBuilder.destroy( sr ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java deleted file mode 100644 index 318339cb0795..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * Tests that reusing identifiers doesn't cause auditing misbehavior. - * - * @author adar - */ -@JiraKey(value = "HHH-8280") -public class IdentifierReuseTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.ALLOW_IDENTIFIER_REUSE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntNoAutoIdTestEntity.class }; - } - - @Test - public void testIdentifierReuse() { - final Integer reusedId = 1; - - EntityManager entityManager = getEntityManager(); - saveUpdateAndRemoveEntity( entityManager, reusedId ); - saveUpdateAndRemoveEntity( entityManager, reusedId ); - entityManager.close(); - - assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 6 ), - getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, reusedId ) - ); - } - - private void saveUpdateAndRemoveEntity(EntityManager entityManager, Integer id) { - EntityTransaction transaction = entityManager.getTransaction(); - - transaction.begin(); - IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 0, id ); - entityManager.persist( entity ); - assertEquals( id, entity.getId() ); - transaction.commit(); - - transaction.begin(); - entity = entityManager.find( IntNoAutoIdTestEntity.class, id ); - entity.setNumVal( 1 ); - entity = entityManager.merge( entity ); - assertEquals( id, entity.getId() ); - transaction.commit(); - - transaction.begin(); - entity = entityManager.find( IntNoAutoIdTestEntity.class, id ); - assertNotNull( entity ); - entityManager.remove( entity ); - transaction.commit(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java deleted file mode 100644 index 5591ce392048..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; - -import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.type.BasicType; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; - -/** - * Tests the {@code REVEND} functionality using a {@code LONG} data type. - * This is only applicable with the ValidityAuditStrategy. - * - * @author Chris Cranford - */ -@JiraKey( value = "HHH-6210" ) -@RequiresAuditStrategy( value = ValidityAuditStrategy.class, jiraKey = "HHH-6210" ) -public class RevisionEndNumericTypeTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_NUMERIC, "true" ); - } - - - @Test - public void testRevisionEndTimestampIsTimestampType() { - // get the entity and verify the revision end timestamp property exists - final PersistentClass clazz = metadata().getEntityBinding( StrTestEntity.class.getName() + "_AUD" ); - assertTrue( clazz.hasProperty( "REVEND_TSTMP" ) ); - - final Property property = clazz.getProperty( "REVEND_TSTMP" ); - assertTyping( BasicType.class, clazz.getProperty( "REVEND_TSTMP" ).getType() ); - assertEquals( Long.class, ( (BasicType) property.getType() ).getJavaType() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java deleted file mode 100644 index 5835eff54a1f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java +++ /dev/null @@ -1,280 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; - -import jakarta.persistence.DiscriminatorColumn; -import jakarta.persistence.DiscriminatorValue; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; - -/** - * @author Chris Cranford - */ -@JiraKey( value = "HHH-9092" ) -@RequiresAuditStrategy( ValidityAuditStrategy.class ) -public class RevisionEndTimestampJoinedInheritanceTest extends AbstractRevisionEndTimestampTest { - - private Integer fullTimeEmployeeId; - private Integer contractorId; - private Integer executiveId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Employee.class, FullTimeEmployee.class, Contractor.class, Executive.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - FullTimeEmployee fullTimeEmployee = new FullTimeEmployee( "Employee", 50000 ); - Contractor contractor = new Contractor( "Contractor", 45 ); - Executive executive = new Executive( "Executive", 100000, "CEO" ); - - // Revision 1 - entityManager.getTransaction().begin(); - entityManager.persist( fullTimeEmployee ); - entityManager.persist( contractor ); - entityManager.persist( executive ); - entityManager.getTransaction().commit(); - - // Revision 2 - raises for everyone! - entityManager.getTransaction().begin(); - fullTimeEmployee.setSalary( 60000 ); - contractor.setHourlyRate( 47 ); - executive.setSalary( 125000 ); - entityManager.getTransaction().commit(); - - fullTimeEmployeeId = fullTimeEmployee.getId(); - contractorId = contractor.getId(); - executiveId = executive.getId(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionEndTimestamps() { - verifyRevisionEndTimestampsInSubclass(FullTimeEmployee.class, fullTimeEmployeeId ); - verifyRevisionEndTimestampsInSubclass(Contractor.class, contractorId ); - verifyRevisionEndTimestampsInSubclass(Executive.class, executiveId ); - } - - @Audited - @Entity(name = "Employee") - @Inheritance(strategy = InheritanceType.JOINED) - @DiscriminatorColumn(length = 255) - @DiscriminatorValue("EMP") - public static class Employee { - @Id - @GeneratedValue - private Integer id; - private String name; - - Employee() { - - } - - Employee(String name) { - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public int hashCode() { - int result = ( id != null ? id.hashCode() : 0 ); - result = result * 31 + ( name != null ? name.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || !( object instanceof Employee ) ) { - return false; - } - Employee that = (Employee) object; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - return !( name != null ? !name.equals( that.name ) : that.name != null ); - } - } - - @Audited - @Entity(name = "FullTimeEmployee") - @DiscriminatorValue("FT") - public static class FullTimeEmployee extends Employee { - private Integer salary; - - FullTimeEmployee() { - - } - - FullTimeEmployee(String name, Integer salary) { - super( name ); - this.salary = salary; - } - - public Integer getSalary() { - return salary; - } - - public void setSalary(Integer salary) { - this.salary = salary; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = result * 31 + ( salary != null ? salary.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || !( object instanceof FullTimeEmployee ) ) { - return false; - } - if ( !super.equals( object ) ) { - return false; - } - FullTimeEmployee that = (FullTimeEmployee) object; - return !( salary != null ? !salary.equals( that.salary ) : that.salary != null ); - } - } - - @Audited - @Entity(name = "Contractor") - @DiscriminatorValue("CONTRACT") - public static class Contractor extends Employee { - private Integer hourlyRate; - - Contractor() { - - } - - Contractor(String name, Integer hourlyRate) { - super( name ); - this.hourlyRate = hourlyRate; - } - - public Integer getHourlyRate() { - return hourlyRate; - } - - public void setHourlyRate(Integer hourlyRate) { - this.hourlyRate = hourlyRate; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = result * 31 + ( hourlyRate != null ? hourlyRate.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || !( object instanceof Contractor ) ) { - return false; - } - if ( !super.equals( object ) ) { - return false; - } - Contractor that = (Contractor) object; - return !( hourlyRate != null ? !hourlyRate.equals( that.hourlyRate ) : that.hourlyRate != null ); - } - } - - @Audited - @Entity(name = "Executive") - @DiscriminatorValue("EXEC") - public class Executive extends FullTimeEmployee { - private String title; - - Executive() { - - } - - Executive(String name, Integer salary, String title) { - super( name, salary ); - this.title = title; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = result * 31 + ( title != null ? title.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || !( object instanceof Executive ) ) { - return false; - } - if ( !super.equals( object ) ) { - return false; - } - Executive that = (Executive) object; - return !( title != null ? !title.equals( that.title ) : that.title != null ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java deleted file mode 100644 index 1bb23e692cae..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; - -import java.sql.Timestamp; -import java.util.Map; - -import org.hibernate.envers.configuration.EnversSettings; - -import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.type.BasicType; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; - -/** - * Tests the {@code REVEND} functionality using a {@code LONG} data type. - * This is only applicable with the ValidityAuditStrategy. - * - * @author Chris Cranford - */ -@JiraKey( value = "HHH-6210" ) -@RequiresAuditStrategy( value = ValidityAuditStrategy.class, jiraKey = "HHH-6210" ) -public class RevisionEndTimestampTypeTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - } - - @Test - public void testRevisionEndTimestampIsLongType() { - // get the entity and verify the revision end timestamp property exists - final PersistentClass clazz = metadata().getEntityBinding( StrTestEntity.class.getName() + "_AUD" ); - - final Property property = clazz.getProperty( "REVEND_TSTMP" ); - assertTyping( BasicType.class, property.getType() ); - assertEquals( Timestamp.class, ( (BasicType) property.getType() ).getJavaType() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java deleted file mode 100644 index d11f8590138a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import jakarta.persistence.CollectionTable; -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.OrderColumn; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * A {@link ValidityAuditStrategy} test that verifies that the {@code REVEND} field - * for embedded component collection entries is updated when the component contains - * {@code null} properties and is removed from the component collection. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11214") -public class ValidityAuditStrategyComponentCollectionRevEndTest extends BaseEnversJPAFunctionalTestCase { - private Integer productId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Product.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, ValidityAuditStrategy.class.getName() ); - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - this.productId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = new Product( 1 , "Test" ); - product.getItems().add( new Item( "bread", null ) ); - entityManager.persist( product ); - return product.getId(); - } ); - - // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = entityManager.find( Product.class, productId ); - product.getItems().add( new Item( "bread2", 2 ) ); - entityManager.merge( product ); - } ); - - // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = entityManager.find( Product.class, productId ); - product.getItems().remove( 0 ); - entityManager.merge( product ); - } ); - } - - @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( Product.class, productId ) ); - } - - @Test - public void testRevision1() { - final Product product = getAuditReader().find( Product.class, productId, 1 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); - } - - @Test - public void testRevision2() { - final Product product = getAuditReader().find( Product.class, productId, 2 ); - assertEquals( 2, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); - assertEquals( "bread2", product.getItems().get( 1 ).getName() ); - } - - @Test - public void testRevision3() { - final Product product = getAuditReader().find( Product.class, productId, 3 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread2", product.getItems().get( 0 ).getName() ); - } - - @Entity(name = "Product") - @Audited - public static class Product { - @Id - private Integer id; - - private String name; - - @ElementCollection - @CollectionTable(name = "items", joinColumns = @JoinColumn(name = "productId")) - @OrderColumn(name = "position") - private List items = new ArrayList(); - - Product() { - - } - - Product(Integer id, String name) { - this.id = id; - this.name = name; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - @Override - public int hashCode() { - int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( items != null ? items.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null | getClass() != object.getClass() ) { - return false; - } - - Product that = (Product) object; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - return !( items != null ? !items.equals( that.items ) : that.items != null ); - } - } - - @Embeddable - @Audited - public static class Item { - private String name; - @Column(name = "val") - private Integer value; - - Item() { - - } - - Item(String name, Integer value) { - this.name = name; - this.value = value; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getValue() { - return value; - } - - public void setValue(Integer value) { - this.value = value; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + ( value != null ? value.hashCode() : 0 ); - return result; - } - - @Override - public boolean equals(Object object) { - if ( this == object ) { - return true; - } - if ( object == null || getClass() != object.getClass() ) { - return false; - } - - Item that = (Item) object; - if ( name != null ? !name.equals( that.name ) : that.name != null ) { - return false; - } - return !( value != null ? !value.equals( that.value ) : that.value != null ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java deleted file mode 100644 index a295fbee4d4c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.SetOwnedEntity; -import org.hibernate.orm.test.envers.entities.manytomany.SetOwningEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * Tests the ValidityAuditStrategy on many-to-many Sets. - * It was first introduced because of a bug when adding and removing the same element - * from the set multiple times between database persists. - * Created on: 24.05.11 - * - * @author Oliver Lorenz - * @since 3.6.5 - */ -public class ValidityAuditStrategyManyToManyTest extends BaseEnversJPAFunctionalTestCase { - - private Integer ing_id; - - private Integer ed_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetOwningEntity.class, SetOwnedEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - } - - @Test - @Priority(10) - public void initData() { - final EntityManager em = getEntityManager(); - - final SetOwningEntity setOwningEntity = new SetOwningEntity( 1, "parent" ); - final SetOwnedEntity setOwnedEntity = new SetOwnedEntity( 2, "child" ); - - // Revision 1: Initial persist - em.getTransaction().begin(); - - em.persist( setOwningEntity ); - em.persist( setOwnedEntity ); - - em.getTransaction().commit(); - em.clear(); - - ing_id = setOwningEntity.getId(); - ed_id = setOwnedEntity.getId(); - } - - @Test - @Priority(5) - public void testMultipleAddAndRemove() { - final EntityManager em = getEntityManager(); - - // Revision 2: add child for first time - em.getTransaction().begin(); - - SetOwningEntity owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - SetOwnedEntity ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.setReferences( new HashSet() ); - owningEntity.getReferences().add( ownedEntity ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3: remove child - em.getTransaction().begin(); - - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.getReferences().remove( ownedEntity ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4: add child again - em.getTransaction().begin(); - - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.getReferences().add( ownedEntity ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 5: remove child again - em.getTransaction().begin(); - - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.getReferences().remove( ownedEntity ); - - em.getTransaction().commit(); - em.clear(); - - // now the set owning entity list should be empty again - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - assertEquals( owningEntity.getReferences().size(), 0 ); - } - - @Test - public void testRevisionsCounts() { - assertEquals( getAuditReader().getRevisions( SetOwningEntity.class, ing_id ), Arrays.asList( 1, 2, 3, 4, 5 ) ); - assertEquals( getAuditReader().getRevisions( SetOwnedEntity.class, ed_id ), Arrays.asList( 1, 2, 3, 4, 5 ) ); - } - - @Test - public void testHistoryOfIng1() { - SetOwningEntity ver_empty = createOwningEntity(); - SetOwningEntity ver_child = createOwningEntity( new SetOwnedEntity( ed_id, "child" ) ); - - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 1 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 2 ), ver_child ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 3 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 4 ), ver_child ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 5 ), ver_empty ); - } - - @Test - public void testHistoryOfEd1() { - SetOwnedEntity ver_empty = createOwnedEntity(); - SetOwnedEntity ver_child = createOwnedEntity( new SetOwningEntity( ing_id, "parent" ) ); - - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 1 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 2 ), ver_child ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 3 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 4 ), ver_child ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 5 ), ver_empty ); - } - - private SetOwningEntity createOwningEntity(SetOwnedEntity... owned) { - SetOwningEntity result = new SetOwningEntity( ing_id, "parent" ); - result.setReferences( new HashSet() ); - for ( SetOwnedEntity setOwnedEntity : owned ) { - result.getReferences().add( setOwnedEntity ); - } - - return result; - } - - private SetOwnedEntity createOwnedEntity(SetOwningEntity... owning) { - SetOwnedEntity result = new SetOwnedEntity( ed_id, "child" ); - result.setReferencing( new HashSet() ); - for ( SetOwningEntity setOwningEntity : owning ) { - result.getReferencing().add( setOwningEntity ); - } - - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java deleted file mode 100644 index 38c8e43ebfc2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import jakarta.persistence.EntityManager; -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.engine.internal.StatisticalLoggingSessionEventListener; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1; -import org.hibernate.orm.test.envers.entities.components.Component3; -import org.hibernate.orm.test.envers.entities.components.Component4; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests that the ValidityAuditStrategy does not trigger partial flushes when inserting an entity owning - * an ElementCollection and when FlushMode is AUTO. - * - * @author Vincent Stradiot - */ -@JiraKey("HHH-17442") -public class ValidityAuditStrategyPartialFlushCountTest extends BaseEnversJPAFunctionalTestCase { - - private final AtomicInteger partialFlushEntityCount = new AtomicInteger(); - private final AtomicInteger partialFlushCollectionCount = new AtomicInteger(); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity1.class}; - } - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - } - - @Test - public void testPartialFlushCount() { - TransactionUtil.doInJPA(this::entityManagerFactory, entityManager -> { - - givenHibernateFlushModeAuto(entityManager); - recordPartialFlushCount(entityManager); - - final Component3 c3_1 = new Component3( - "str1_1", - new Component4("key_1", "value_1", "descr_1"), - new Component4("key_2", "value_2", "descr_2")); - final Component3 c3_2 = new Component3( - "str1_2", - new Component4("key_3", "value_3", "descr_3"), - new Component4("key_4", "value_4", "descr_4")); - - final EmbeddableListEntity1 el = new EmbeddableListEntity1(); - el.setOtherData("other_data"); - el.setComponentList(List.of(c3_1, c3_2)); - - entityManager.persist(el); - }); - - assertThat(partialFlushEntityCount.get()).isZero(); - assertThat(partialFlushCollectionCount.get()).isZero(); - } - - private void givenHibernateFlushModeAuto(final EntityManager entityManager) { - entityManager.unwrap(Session.class).setHibernateFlushMode(FlushMode.AUTO); - } - - private void recordPartialFlushCount(final EntityManager entityManager) { - entityManager.unwrap(SessionImplementor.class).getEventListenerManager().addListener(new StatisticalLoggingSessionEventListener() { - - @Override - public void partialFlushEnd(final int numberOfEntities, final int numberOfCollections) { - super.partialFlushEnd(numberOfEntities, numberOfCollections); - partialFlushEntityCount.getAndAdd(numberOfEntities); - partialFlushCollectionCount.getAndAdd(numberOfCollections); - } - - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java deleted file mode 100644 index 44fac39926cf..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java +++ /dev/null @@ -1,493 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import java.sql.Types; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Query; - -import org.hibernate.Session; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child1Entity; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child2Entity; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity; -import org.hibernate.orm.test.envers.entities.reventity.CustomDateRevEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; - -import org.junit.Test; - -/** - * Test which checks that the revision end timestamp is correctly set for - * {@link ValidityAuditStrategy}. - * - * @author Erik-Berndt Scheper - */ -public class ValidityAuditStrategyRevEndTestCustomRevEnt extends BaseEnversJPAFunctionalTestCase { - private final String revendTimestampColumName = "REVEND_TIMESTAMP"; - - private Integer p1_id; - private Integer p2_id; - private Integer c1_1_id; - private Integer c1_2_id; - private Integer c2_1_id; - private Integer c2_2_id; - private Map revisions; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ParentEntity.class, - Child1Entity.class, - Child2Entity.class, - CustomDateRevEntity.class - }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, revendTimestampColumName ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() - .getDdlTypeRegistry(); - - // We need first to modify the columns in the middle (join table) to - // allow null values. Hbm2ddl doesn't seem - // to allow this. - em.getTransaction().begin(); - Session session = (Session) em.getDelegate(); - session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); - session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); - em.getTransaction().commit(); - em.clear(); - - em.getTransaction().begin(); - session = (Session) em.getDelegate(); - session.createNativeQuery( - "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ) - .executeUpdate(); - session.createNativeQuery( - "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + " NOT NULL" + - ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", " + revendTimestampColumName + " " + ddlTypeRegistry.getTypeName( Types.TIMESTAMP, getDialect() ) + - ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, getDialect() ) + - ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ) - .executeUpdate(); - em.getTransaction().commit(); - em.clear(); - - ParentEntity p1 = new ParentEntity( "parent_1" ); - ParentEntity p2 = new ParentEntity( "parent_2" ); - - Child1Entity c1_1 = new Child1Entity( "child1_1" ); - Child1Entity c1_2 = new Child1Entity( "child1_2" ); - - Child2Entity c2_1 = new Child2Entity( "child2_1" ); - Child2Entity c2_2 = new Child2Entity( "child2_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( p1 ); - em.persist( p2 ); - em.persist( c1_1 ); - em.persist( c1_2 ); - em.persist( c2_1 ); - em.persist( c2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 - (p1: c1_1, p2: c2_1) - - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_1 = em.find( Child2Entity.class, c2_1.getId() ); - - p1.getChildren1().add( c1_1 ); - p2.getChildren2().add( c2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 - (p1: c1_1, c1_2, c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - p1.getChildren1().add( c1_2 ); - p1.getChildren2().add( c2_2 ); - - p2.getChildren1().add( c1_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 - (p1: c1_2, c2_2, p2: c1_1, c2_1, c2_2) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - p1.getChildren1().remove( c1_1 ); - p2.getChildren2().add( c2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 5 - (p1: c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - c2_2.getParents().remove( p2 ); - c1_2.getParents().remove( p1 ); - - em.getTransaction().commit(); - em.clear(); - - // - - p1_id = p1.getId(); - p2_id = p2.getId(); - c1_1_id = c1_1.getId(); - c1_2_id = c1_2.getId(); - c2_1_id = c2_1.getId(); - c2_2_id = c2_2.getId(); - - Set revisionNumbers = new HashSet(); - revisionNumbers.addAll( Arrays.asList( 1, 2, 3, 4, 5 ) ); - revisions = getAuditReader().findRevisions( - CustomDateRevEntity.class, - revisionNumbers - ); - - assert revisions.size() == 5; - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p1_id ) - ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_2_id ) - ); - } - - @Test - public void testAllRevEndTimeStamps() { - List> p1RevList = getRevisions( - ParentEntity.class, - p1_id - ); - List> p2RevList = getRevisions( - ParentEntity.class, - p2_id - ); - List> c1_1_List = getRevisions( - Child1Entity.class, - c1_1_id - ); - List> c1_2_List = getRevisions( - Child1Entity.class, - c1_2_id - ); - List> c2_1_List = getRevisions( - Child2Entity.class, - c2_1_id - ); - List> c2_2_List = getRevisions( - Child2Entity.class, - c2_2_id - ); - - verifyRevEndTimeStamps( "ParentEntity: " + p1_id, p1RevList ); - verifyRevEndTimeStamps( "ParentEntity: " + p2_id, p2RevList ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_1_id, c1_1_List ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_2_id, c1_2_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_1_id, c2_1_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_2_id, c2_2_List ); - - } - - @Test - public void testHistoryOfParent1() { - - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child1Entity c1_2 = getEntityManager() - .find( Child1Entity.class, c1_2_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p1_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p1_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p1_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p1_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p1_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); - assert TestTools.checkCollection( rev5.getChildren1() ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2() ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); - } - - @Test - public void testHistoryOfParent2() { - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child2Entity c2_1 = getEntityManager() - .find( Child2Entity.class, c2_1_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p2_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p2_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p2_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p2_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p2_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1() ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); - } - - @Test - public void testHistoryOfChild1_1() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p1 ); - assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); - } - - // TODO: this was disabled? - @Test - public void testHistoryOfChild1_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1 ); - assert TestTools.checkCollection( rev5.getParents() ); - } - - @Test - public void testHistoryOfChild2_1() { - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p2 ); - assert TestTools.checkCollection( rev3.getParents(), p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); - } - - @Test - public void testHistoryOfChild2_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev5.getParents(), p1 ); - } - - private List> getRevisions( - Class originalEntityClazz, Integer originalEntityId) { - // Build the query: - // select auditEntity from - // org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity_AUD - // auditEntity where auditEntity.originalId.id = :originalEntityId - - StringBuilder builder = new StringBuilder( "select auditEntity from " ); - builder.append( originalEntityClazz.getName() ) - .append( "_AUD auditEntity" ); - builder.append( " where auditEntity.originalId.id = :originalEntityId" ); - - Query qry = getEntityManager().createQuery( builder.toString() ); - qry.setParameter( "originalEntityId", originalEntityId ); - - @SuppressWarnings("unchecked") - List> resultList = qry.getResultList(); - return resultList; - } - - private void verifyRevEndTimeStamps( - String debugInfo, - List> revisionEntities) { - for ( Map revisionEntity : revisionEntities ) { - - Date revendTimestamp = (Date) revisionEntity - .get( revendTimestampColumName ); - CustomDateRevEntity revEnd = (CustomDateRevEntity) revisionEntity - .get( "REVEND" ); - - if ( revendTimestamp == null ) { - assert revEnd == null; - } - else { - assert revendTimestamp.getTime() == revEnd.getDateTimestamp().getTime(); - } - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java deleted file mode 100644 index 5f1aa8c0223f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java +++ /dev/null @@ -1,507 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.strategy; - -import java.sql.Types; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Query; - -import org.hibernate.Session; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.MariaDBDialect; -import org.hibernate.dialect.MySQLDialect; -import org.hibernate.dialect.SybaseASEDialect; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child1Entity; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child2Entity; -import org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Test which checks that the revision end timestamp is correctly set for - * {@link ValidityAuditStrategy}. - * - * @author Erik-Berndt Scheper - */ -public class ValidityAuditStrategyRevEndTsTest extends BaseEnversJPAFunctionalTestCase { - private final String revendTimestampColumName = "REVEND_TIMESTAMP"; - - private Integer p1_id; - private Integer p2_id; - private Integer c1_1_id; - private Integer c1_2_id; - private Integer c2_1_id; - private Integer c2_2_id; - private Map revisions; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ParentEntity.class, Child1Entity.class, Child2Entity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, revendTimestampColumName ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() - .getDdlTypeRegistry(); - - // We need first to modify the columns in the middle (join table) to - // allow null values. Hbm2ddl doesn't seem - // to allow this. - em.getTransaction().begin(); - Session session = (Session) em.getDelegate(); - session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); - session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); - em.getTransaction().commit(); - em.clear(); - - em.getTransaction().begin(); - session = (Session) em.getDelegate(); - session.createNativeQuery( - "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ) - .executeUpdate(); - session.createNativeQuery( - "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + " NOT NULL" + - ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", " + revendTimestampColumName + " " + ddlTypeRegistry.getTypeName( Types.TIMESTAMP, getDialect() ) + - ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, getDialect() ) + - ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ) - .executeUpdate(); - em.getTransaction().commit(); - em.clear(); - - ParentEntity p1 = new ParentEntity( "parent_1" ); - ParentEntity p2 = new ParentEntity( "parent_2" ); - - Child1Entity c1_1 = new Child1Entity( "child1_1" ); - Child1Entity c1_2 = new Child1Entity( "child1_2" ); - - Child2Entity c2_1 = new Child2Entity( "child2_1" ); - Child2Entity c2_2 = new Child2Entity( "child2_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( p1 ); - em.persist( p2 ); - em.persist( c1_1 ); - em.persist( c1_2 ); - em.persist( c2_1 ); - em.persist( c2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 - (p1: c1_1, p2: c2_1) - - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_1 = em.find( Child2Entity.class, c2_1.getId() ); - - p1.getChildren1().add( c1_1 ); - p2.getChildren2().add( c2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 - (p1: c1_1, c1_2, c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - p1.getChildren1().add( c1_2 ); - p1.getChildren2().add( c2_2 ); - - p2.getChildren1().add( c1_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 - (p1: c1_2, c2_2, p2: c1_1, c2_1, c2_2) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - p1.getChildren1().remove( c1_1 ); - p2.getChildren2().add( c2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 5 - (p1: c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); - - c2_2.getParents().remove( p2 ); - c1_2.getParents().remove( p1 ); - - em.getTransaction().commit(); - em.clear(); - - // - - p1_id = p1.getId(); - p2_id = p2.getId(); - c1_1_id = c1_1.getId(); - c1_2_id = c1_2.getId(); - c2_1_id = c2_1.getId(); - c2_2_id = c2_2.getId(); - - Set revisionNumbers = new HashSet(); - revisionNumbers.addAll( Arrays.asList( 1, 2, 3, 4, 5 ) ); - revisions = getAuditReader().findRevisions( - SequenceIdRevisionEntity.class, - revisionNumbers - ); - - assert revisions.size() == 5; - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p1_id ) - ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_2_id ) - ); - } - - @Test - public void testAllRevEndTimeStamps() { - List> p1RevList = getRevisions( - ParentEntity.class, - p1_id - ); - List> p2RevList = getRevisions( - ParentEntity.class, - p2_id - ); - List> c1_1_List = getRevisions( - Child1Entity.class, - c1_1_id - ); - List> c1_2_List = getRevisions( - Child1Entity.class, - c1_2_id - ); - List> c2_1_List = getRevisions( - Child2Entity.class, - c2_1_id - ); - List> c2_2_List = getRevisions( - Child2Entity.class, - c2_2_id - ); - - verifyRevEndTimeStamps( "ParentEntity: " + p1_id, p1RevList ); - verifyRevEndTimeStamps( "ParentEntity: " + p2_id, p2RevList ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_1_id, c1_1_List ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_2_id, c1_2_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_1_id, c2_1_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_2_id, c2_2_List ); - - } - - @Test - public void testHistoryOfParent1() { - - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child1Entity c1_2 = getEntityManager() - .find( Child1Entity.class, c1_2_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p1_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p1_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p1_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p1_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p1_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); - assert TestTools.checkCollection( rev5.getChildren1() ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2() ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); - } - - @Test - public void testHistoryOfParent2() { - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child2Entity c2_1 = getEntityManager() - .find( Child2Entity.class, c2_1_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p2_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p2_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p2_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p2_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p2_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1() ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); - } - - @Test - public void testHistoryOfChild1_1() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p1 ); - assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); - } - - // TODO: this was disabled? - @Test - public void testHistoryOfChild1_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1 ); - assert TestTools.checkCollection( rev5.getParents() ); - } - - @Test - public void testHistoryOfChild2_1() { - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p2 ); - assert TestTools.checkCollection( rev3.getParents(), p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); - } - - @Test - public void testHistoryOfChild2_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev5.getParents(), p1 ); - } - - private List> getRevisions( - Class originalEntityClazz, Integer originalEntityId) { - // Build the query: - // select auditEntity from - // org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity_AUD - // auditEntity where auditEntity.originalId.id = :originalEntityId - - StringBuilder builder = new StringBuilder( "select auditEntity from " ); - builder.append( originalEntityClazz.getName() ) - .append( "_AUD auditEntity" ); - builder.append( " where auditEntity.originalId.id = :originalEntityId" ); - - Query qry = getEntityManager().createQuery( builder.toString() ); - qry.setParameter( "originalEntityId", originalEntityId ); - - @SuppressWarnings("unchecked") - List> resultList = qry.getResultList(); - return resultList; - } - - private void verifyRevEndTimeStamps(String debugInfo, List> revisionEntities) { - for ( Map revisionEntity : revisionEntities ) { - Date revendTimestamp = (Date) revisionEntity.get( revendTimestampColumName ); - SequenceIdRevisionEntity revEnd = (SequenceIdRevisionEntity) revisionEntity.get( "REVEND" ); - - if ( revendTimestamp == null ) { - Assert.assertNull( revEnd ); - } - else { - final Dialect dialect = getDialect(); - if ( dialect instanceof MySQLDialect - && dialect.getVersion().isBefore( 5, 7 ) - && !( dialect instanceof MariaDBDialect ) ) { - // MySQL5 DATETIME column type does not contain milliseconds. - // MySQL 5.7 supports milliseconds and when MySQL57InnoDBDialect is used, it is assumed that - // the column is defined as DATETIME(6). - Assert.assertEquals( - revendTimestamp.getTime(), - (revEnd.getTimestamp() - (revEnd.getTimestamp() % 1000)) - ); - } - else if ( dialect instanceof SybaseASEDialect ) { - // Sybase "DATETIME values are accurate to 1/300 second on platforms that support this level of granularity". - Assert.assertEquals( - revendTimestamp.getTime() / 1000.0, revEnd.getTimestamp() / 1000.0, 1.0 / 300.0 - ); - } - else { - Assert.assertEquals( revendTimestamp.getTime(), revEnd.getTimestamp() ); - } - } - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/AuditedMethodMappedSuperclass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/AuditedMethodMappedSuperclass.java deleted file mode 100644 index c4b30a9104e5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/AuditedMethodMappedSuperclass.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel; - -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -@MappedSuperclass -public class AuditedMethodMappedSuperclass { - - @Audited - private String str; - - private String otherStr; - - public AuditedMethodMappedSuperclass() { - } - - public AuditedMethodMappedSuperclass(String str, String otherStr) { - this.str = str; - this.otherStr = otherStr; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public String getOtherStr() { - return otherStr; - } - - public void setOtherStr(String otherStr) { - this.otherStr = otherStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedMethodMappedSuperclass) ) { - return false; - } - - AuditedMethodMappedSuperclass that = (AuditedMethodMappedSuperclass) o; - - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (str != null ? str.hashCode() : 0); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/NotAuditedSubclassEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/NotAuditedSubclassEntity.java deleted file mode 100644 index 411afd3c9022..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/NotAuditedSubclassEntity.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - */ -@Entity -@Table(name = "NotAuditedSubclass") -public class NotAuditedSubclassEntity extends AuditedMethodMappedSuperclass { - @Id - @GeneratedValue - private Integer id; - - private String notAuditedStr; - - public NotAuditedSubclassEntity() { - } - - public NotAuditedSubclassEntity(Integer id, String str, String otherStr, String notAuditedStr) { - super( str, otherStr ); - this.notAuditedStr = notAuditedStr; - this.id = id; - } - - public NotAuditedSubclassEntity(String str, String otherStr, String notAuditedStr) { - super( str, otherStr ); - this.notAuditedStr = notAuditedStr; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getNotAuditedStr() { - return notAuditedStr; - } - - public void setNotAuditedStr(String notAuditedStr) { - this.notAuditedStr = notAuditedStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotAuditedSubclassEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - NotAuditedSubclassEntity that = (NotAuditedSubclassEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/AuditedAllSubclassEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/AuditedAllSubclassEntity.java deleted file mode 100644 index 85eb4f184767..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/AuditedAllSubclassEntity.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.auditAllSubclass; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.AuditedMethodMappedSuperclass; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -@Entity -@Audited -public class AuditedAllSubclassEntity extends AuditedMethodMappedSuperclass { - @Id - @GeneratedValue - private Integer id; - - private String subAuditedStr; - - - public AuditedAllSubclassEntity() { - } - - public AuditedAllSubclassEntity(Integer id, String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - this.id = id; - } - - public AuditedAllSubclassEntity(String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getSubAuditedStr() { - return subAuditedStr; - } - - public void setSubAuditedStr(String subAuditedStr) { - this.subAuditedStr = subAuditedStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedAllSubclassEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - AuditedAllSubclassEntity that = (AuditedAllSubclassEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java deleted file mode 100644 index 2f25001e7917..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.auditAllSubclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.AuditedMethodMappedSuperclass; -import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.NotAuditedSubclassEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -public class MappedSubclassingAllAuditedTest extends BaseEnversJPAFunctionalTestCase { - private Integer id2_1; - private Integer id1_1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedMethodMappedSuperclass.class, - AuditedAllSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedAllSubclassEntity ae = new AuditedAllSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedAllSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedAllSubclassEntity.class, id1_1 ) - ); - } - - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - - - @Test - public void testHistoryOfAudited() { - AuditedAllSubclassEntity ver1 = new AuditedAllSubclassEntity( id1_1, "ae", "super str", "audited str" ); - AuditedAllSubclassEntity ver2 = new AuditedAllSubclassEntity( id1_1, "ae new", "super str", "audited str new" ); - - AuditedAllSubclassEntity rev1 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 1 ); - AuditedAllSubclassEntity rev2 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 2 ); - - //this property is not audited on superclass - assert (rev1.getOtherStr() == null); - assert (rev2.getOtherStr() == null); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } - - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/AuditedMethodSubclassEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/AuditedMethodSubclassEntity.java deleted file mode 100644 index fbf455044e2e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/AuditedMethodSubclassEntity.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.auditMethodSubclass; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.AuditedMethodMappedSuperclass; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -@Entity -@Table(name = "AuditedMethodSubclass") -public class AuditedMethodSubclassEntity extends AuditedMethodMappedSuperclass { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String subAuditedStr; - - - public AuditedMethodSubclassEntity() { - } - - public AuditedMethodSubclassEntity(Integer id, String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - this.id = id; - } - - public AuditedMethodSubclassEntity(String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getSubAuditedStr() { - return subAuditedStr; - } - - public void setSubAuditedStr(String subAuditedStr) { - this.subAuditedStr = subAuditedStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedMethodSubclassEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - AuditedMethodSubclassEntity that = (AuditedMethodSubclassEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java deleted file mode 100644 index 660f6b0d355c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.auditMethodSubclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.AuditedMethodMappedSuperclass; -import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.NotAuditedSubclassEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -public class MappedSubclassingMethodAuditedTest extends BaseEnversJPAFunctionalTestCase { - private Integer id2_1; - private Integer id1_1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedMethodMappedSuperclass.class, - AuditedMethodSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedMethodSubclassEntity ae = new AuditedMethodSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedMethodSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedMethodSubclassEntity.class, id1_1 ) - ); - } - - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - - - @Test - public void testHistoryOfAudited() { - AuditedMethodSubclassEntity ver1 = new AuditedMethodSubclassEntity( id1_1, "ae", "super str", "audited str" ); - AuditedMethodSubclassEntity ver2 = new AuditedMethodSubclassEntity( - id1_1, - "ae new", - "super str", - "audited str new" - ); - - AuditedMethodSubclassEntity rev1 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 1 ); - AuditedMethodSubclassEntity rev2 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 2 ); - - //this property is not audited on superclass - assert (rev1.getOtherStr() == null); - assert (rev2.getOtherStr() == null); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } - - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/AuditedAllMappedSuperclass.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/AuditedAllMappedSuperclass.java deleted file mode 100644 index c224d28062b6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/AuditedAllMappedSuperclass.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel; - -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -@MappedSuperclass -@Audited -public class AuditedAllMappedSuperclass { - - private String str; - - private String otherStr; - - public AuditedAllMappedSuperclass() { - } - - public AuditedAllMappedSuperclass(String str, String otherStr) { - this.str = str; - this.otherStr = otherStr; - } - - public String getStr() { - return str; - } - - public void setStr(String str) { - this.str = str; - } - - public String getOtherStr() { - return otherStr; - } - - public void setOtherStr(String otherStr) { - this.otherStr = otherStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedAllMappedSuperclass) ) { - return false; - } - - AuditedAllMappedSuperclass that = (AuditedAllMappedSuperclass) o; - - if ( str != null ? !str.equals( that.str ) : that.str != null ) { - return false; - } - - return true; - } - - public int hashCode() { - return (str != null ? str.hashCode() : 0); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/NotAuditedSubclassEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/NotAuditedSubclassEntity.java deleted file mode 100644 index 097b9f6d3d2c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/NotAuditedSubclassEntity.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hernán Chanfreau - */ -@Entity -@Table(name = "NotAuditedSubclass") -public class NotAuditedSubclassEntity extends AuditedAllMappedSuperclass { - @Id - @GeneratedValue - private Integer id; - - private String notAuditedStr; - - public NotAuditedSubclassEntity() { - } - - public NotAuditedSubclassEntity(Integer id, String str, String otherStr, String notAuditedStr) { - super( str, otherStr ); - this.notAuditedStr = notAuditedStr; - this.id = id; - } - - public NotAuditedSubclassEntity(String str, String otherStr, String notAuditedStr) { - super( str, otherStr ); - this.notAuditedStr = notAuditedStr; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getNotAuditedStr() { - return notAuditedStr; - } - - public void setNotAuditedStr(String notAuditedStr) { - this.notAuditedStr = notAuditedStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotAuditedSubclassEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - NotAuditedSubclassEntity that = (NotAuditedSubclassEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/AuditedAllSubclassEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/AuditedAllSubclassEntity.java deleted file mode 100644 index 629ecb3df36c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/AuditedAllSubclassEntity.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.auditAllSubclass; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.AuditedAllMappedSuperclass; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -@Entity -@Audited -public class AuditedAllSubclassEntity extends AuditedAllMappedSuperclass { - @Id - @GeneratedValue - private Integer id; - - private String subAuditedStr; - - - public AuditedAllSubclassEntity() { - } - - public AuditedAllSubclassEntity(Integer id, String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - this.id = id; - } - - public AuditedAllSubclassEntity(String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getSubAuditedStr() { - return subAuditedStr; - } - - public void setSubAuditedStr(String subAuditedStr) { - this.subAuditedStr = subAuditedStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedAllSubclassEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - AuditedAllSubclassEntity that = (AuditedAllSubclassEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java deleted file mode 100644 index 917c48710146..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.auditAllSubclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.AuditedAllMappedSuperclass; -import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.NotAuditedSubclassEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -public class MappedSubclassingAllAuditedTest extends BaseEnversJPAFunctionalTestCase { - private Integer id2_1; - private Integer id1_1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedAllMappedSuperclass.class, - AuditedAllSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedAllSubclassEntity ae = new AuditedAllSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedAllSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedAllSubclassEntity.class, id1_1 ) - ); - } - - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - - - @Test - public void testHistoryOfAudited() { - AuditedAllSubclassEntity ver1 = new AuditedAllSubclassEntity( id1_1, "ae", "super str", "audited str" ); - AuditedAllSubclassEntity ver2 = new AuditedAllSubclassEntity( id1_1, "ae new", "super str", "audited str new" ); - - AuditedAllSubclassEntity rev1 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 1 ); - AuditedAllSubclassEntity rev2 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 2 ); - - assert (rev1.getOtherStr() != null); - assert (rev2.getOtherStr() != null); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } - - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/AuditedMethodSubclassEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/AuditedMethodSubclassEntity.java deleted file mode 100644 index 781759e229c6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/AuditedMethodSubclassEntity.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.auditMethodSubclass; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.AuditedAllMappedSuperclass; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -@Entity -@Table(name = "AuditedMethodSubclass") -public class AuditedMethodSubclassEntity extends AuditedAllMappedSuperclass { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String subAuditedStr; - - - public AuditedMethodSubclassEntity() { - } - - public AuditedMethodSubclassEntity(Integer id, String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - this.id = id; - } - - public AuditedMethodSubclassEntity(String str, String otherString, String subAuditedStr) { - super( str, otherString ); - this.subAuditedStr = subAuditedStr; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getSubAuditedStr() { - return subAuditedStr; - } - - public void setSubAuditedStr(String subAuditedStr) { - this.subAuditedStr = subAuditedStr; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedMethodSubclassEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - AuditedMethodSubclassEntity that = (AuditedMethodSubclassEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (id != null ? id.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java deleted file mode 100644 index 5b979fc2212f..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.auditMethodSubclass; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.AuditedAllMappedSuperclass; -import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.NotAuditedSubclassEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Hern&aacut;n Chanfreau - */ -public class MappedSubclassingMethodAuditedTest extends BaseEnversJPAFunctionalTestCase { - private Integer id2_1; - private Integer id1_1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedAllMappedSuperclass.class, - AuditedMethodSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedMethodSubclassEntity ae = new AuditedMethodSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedMethodSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedMethodSubclassEntity.class, id1_1 ) - ); - } - - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - - - @Test - public void testHistoryOfAudited() { - AuditedMethodSubclassEntity ver1 = new AuditedMethodSubclassEntity( id1_1, "ae", "super str", "audited str" ); - AuditedMethodSubclassEntity ver2 = new AuditedMethodSubclassEntity( - id1_1, - "ae new", - "super str", - "audited str new" - ); - - AuditedMethodSubclassEntity rev1 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 1 ); - AuditedMethodSubclassEntity rev2 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 2 ); - - assert (rev1.getOtherStr() != null); - assert (rev2.getOtherStr() != null); - - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); - } - - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java deleted file mode 100644 index 5e5a2ddbb1fa..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-4439") -public class AuditClassOverrideTest extends BaseEnversJPAFunctionalTestCase { - private Integer classAuditedEntityId = null; - private Integer classNotAuditedEntityId = null; - private Table classAuditedTable = null; - private Table classNotAuditedTable = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ClassOverrideAuditedEntity.class, ClassOverrideNotAuditedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - ClassOverrideAuditedEntity classOverrideAuditedEntity = new ClassOverrideAuditedEntity( "data 1", 1, "data 2" ); - em.persist( classOverrideAuditedEntity ); - em.getTransaction().commit(); - classAuditedEntityId = classOverrideAuditedEntity.getId(); - - // Revision 2 - em.getTransaction().begin(); - ClassOverrideNotAuditedEntity classOverrideNotAuditedEntity = new ClassOverrideNotAuditedEntity( - "data 1", - 1, - "data 2" - ); - em.persist( classOverrideNotAuditedEntity ); - em.getTransaction().commit(); - classNotAuditedEntityId = classOverrideNotAuditedEntity.getId(); - - classAuditedTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditoverride.ClassOverrideAuditedEntity_AUD" - ).getTable(); - classNotAuditedTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditoverride.ClassOverrideNotAuditedEntity_AUD" - ).getTable(); - } - - @Test - public void testAuditedProperty() { - Assert.assertNotNull( classAuditedTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( classAuditedTable.getColumn( new Column( "str1" ) ) ); - Assert.assertNotNull( classAuditedTable.getColumn( new Column( "str2" ) ) ); - Assert.assertNotNull( classNotAuditedTable.getColumn( new Column( "str2" ) ) ); - } - - @Test - public void testNotAuditedProperty() { - Assert.assertNull( classNotAuditedTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNull( classNotAuditedTable.getColumn( new Column( "str1" ) ) ); - } - - @Test - public void testHistoryOfClassOverrideAuditedEntity() { - ClassOverrideAuditedEntity ver1 = new ClassOverrideAuditedEntity( "data 1", 1, classAuditedEntityId, "data 2" ); - Assert.assertEquals( ver1, getAuditReader().find( ClassOverrideAuditedEntity.class, classAuditedEntityId, 1 ) ); - } - - @Test - public void testHistoryOfClassOverrideNotAuditedEntity() { - ClassOverrideNotAuditedEntity ver1 = new ClassOverrideNotAuditedEntity( - null, - null, - classNotAuditedEntityId, - "data 2" - ); - Assert.assertEquals( - ver1, getAuditReader().find( - ClassOverrideNotAuditedEntity.class, - classNotAuditedEntityId, - 2 - ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java deleted file mode 100644 index 2fbbef4ac704..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java +++ /dev/null @@ -1,358 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import java.sql.Timestamp; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.Column; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.UnknownEntityTypeException; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-12913") -public class AuditOverrideAuditJoinTableTest extends BaseEnversJPAFunctionalTestCase { - private Long entityId; - private Long overrideEntityId; - private Long auditParentsEntityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - OtherAuditedEntity.class, - OtherOverrideAuditedEntity.class, - OtherAuditParentsAuditEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - Persist audited subclass with non-audited super-type - entityId = doInJPA( this::entityManagerFactory, entityManager -> { - final OtherAuditedEntity entity = new OtherAuditedEntity(); - entity.setId( 1 ); - entity.setVersion( Timestamp.valueOf( LocalDateTime.now() ) ); - entity.setSuperValue( "SuperValue" ); - entity.setValue( "Value" ); - entity.setNotAuditedValue( "NotAuditedValue" ); - - List list = new ArrayList<>(); - list.add( "Entry1" ); - list.add( "Entry2" ); - entity.setSuperStringList( list ); - - entityManager.persist( entity ); - - return entity.getId(); - } ); - - // Revision 2 - Persist audited subclass with audit-override non-audited super-type - overrideEntityId = doInJPA( this::entityManagerFactory, entityManager -> { - final OtherOverrideAuditedEntity entity = new OtherOverrideAuditedEntity(); - entity.setId( 1 ); - entity.setVersion( Timestamp.valueOf( LocalDateTime.now() ) ); - entity.setSuperValue( "SuperValue" ); - entity.setValue( "Value" ); - entity.setNotAuditedValue( "NotAuditedValue" ); - - List list = new ArrayList<>(); - list.add( "Entry1" ); - list.add( "Entry2" ); - entity.setSuperStringList( list ); - - entityManager.persist( entity ); - - return entity.getId(); - } ); - - // Revision 3 - Persist audited subclass with audit-parents on non-audited super-type - auditParentsEntityId = doInJPA( this::entityManagerFactory, entityManager -> { - final OtherAuditParentsAuditEntity entity = new OtherAuditParentsAuditEntity(); - entity.setId( 1 ); - entity.setVersion( Timestamp.valueOf( LocalDateTime.now() ) ); - entity.setSuperValue( "SuperValue" ); - entity.setValue( "Value" ); - entity.setNotAuditedValue( "NotAuditedValue" ); - - List list = new ArrayList<>(); - list.add( "Entry1" ); - list.add( "Entry2" ); - entity.setSuperStringList( list ); - - entityManager.persist( entity ); - - return entity.getId(); - } ); - } - - @Test - public void testMetadataAuditSuperClassWithAuditJoinTable() { - try { - entityManagerFactory().unwrap( SessionFactoryImplementor.class ) - .getMappingMetamodel() - .getEntityDescriptor( "SuperClass_StringList" ); - } - catch ( UnknownEntityTypeException e ) { - fail( "Expected to find an entity-persister for the string-list in the super audit type" ); - } - } - - @Test - public void testMetadataNonAuditedSuperClassWithOverrideAuditJoinTable() { - try { - entityManagerFactory().unwrap( SessionFactoryImplementor.class ) - .getMappingMetamodel() - .getEntityDescriptor( "OOAE_StringList" ); - } - catch ( UnknownEntityTypeException e ) { - fail( "Expected to find an entity-persister for the string-list in the super audit type" ); - } - } - - @Test - public void testMetadataNonAuditedSuperClassWithAuditParentsOverrideAuditJoinTable() { - try { - entityManagerFactory().unwrap( SessionFactoryImplementor.class ) - .getMappingMetamodel() - .getEntityDescriptor( "OAPAE_StringList" ); - } - catch ( UnknownEntityTypeException e ) { - fail( "Expected to find an entity-persister for the string-list in the super audit type" ); - } - } - - @Test - public void testNonAuditedSuperclassAuditJoinTableHistory() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( OtherAuditedEntity.class, entityId ) ); - - OtherAuditedEntity rev = getAuditReader().find( OtherAuditedEntity.class, entityId, 1 ); - assertNotNull( rev ); - assertEquals( 2, rev.getSuperStringList().size() ); - checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); - } - - @Test - public void testNonAuditedSuperclassWithOverrideAuditJoinTableHistory() { - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( OtherOverrideAuditedEntity.class, overrideEntityId ) ); - - OtherOverrideAuditedEntity rev = getAuditReader().find( OtherOverrideAuditedEntity.class, overrideEntityId, 2 ); - assertNotNull( rev ); - assertEquals( 2, rev.getSuperStringList().size() ); - checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); - } - - @Test - public void testNonAuditedSuperclassWithAuditParentsOverrideAuditJoinTableHistory() { - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( OtherAuditParentsAuditEntity.class, auditParentsEntityId ) ); - - OtherAuditParentsAuditEntity rev = getAuditReader().find( OtherAuditParentsAuditEntity.class, auditParentsEntityId, 3 ); - assertNotNull( rev ); - assertEquals( 2, rev.getSuperStringList().size() ); - checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); - } - - @MappedSuperclass - @Audited - public static class SuperClass { - @Id - private long id; - private Timestamp version; - private String superValue; - @ElementCollection - @AuditJoinTable(name = "SuperClass_StringList") - private List superStringList; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public Timestamp getVersion() { - return version; - } - - public void setVersion(Timestamp version) { - this.version = version; - } - - public String getSuperValue() { - return superValue; - } - - public void setSuperValue(String superValue) { - this.superValue = superValue; - } - - public List getSuperStringList() { - return superStringList; - } - - public void setSuperStringList(List superStringList) { - this.superStringList = superStringList; - } - } - - @Entity(name = "OOE") - @Audited - public static class OtherAuditedEntity extends SuperClass { - @Column(name = "val") - private String value; - @NotAudited - private String notAuditedValue; - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getNotAuditedValue() { - return notAuditedValue; - } - - public void setNotAuditedValue(String notAuditedValue) { - this.notAuditedValue = notAuditedValue; - } - } - - @MappedSuperclass - public static class NonAuditedSuperClass { - @Id - private long id; - private Timestamp version; - private String superValue; - @ElementCollection - @AuditJoinTable(name = "NASC_StringList") - private List superStringList; - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public Timestamp getVersion() { - return version; - } - - public void setVersion(Timestamp version) { - this.version = version; - } - - public String getSuperValue() { - return superValue; - } - - public void setSuperValue(String superValue) { - this.superValue = superValue; - } - - public List getSuperStringList() { - return superStringList; - } - - public void setSuperStringList(List superStringList) { - this.superStringList = superStringList; - } - } - - @Entity(name = "OOAE") - @Audited - @AuditOverrides({ - @AuditOverride( - forClass = NonAuditedSuperClass.class, - name = "superStringList", - auditJoinTable = @AuditJoinTable(name = "OOAE_StringList") - ) - }) - public static class OtherOverrideAuditedEntity extends NonAuditedSuperClass { - @Column(name = "val") - private String value; - @NotAudited - private String notAuditedValue; - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getNotAuditedValue() { - return notAuditedValue; - } - - public void setNotAuditedValue(String notAuditedValue) { - this.notAuditedValue = notAuditedValue; - } - } - - @Entity(name = "OAPAE") - @Audited(auditParents = NonAuditedSuperClass.class) - @AuditOverrides({ - @AuditOverride( - forClass = NonAuditedSuperClass.class, - name = "superStringList", - auditJoinTable = @AuditJoinTable(name = "OAPAE_StringList") - ) - }) - public static class OtherAuditParentsAuditEntity extends NonAuditedSuperClass { - @Column(name = "val") - private String value; - @NotAudited - private String notAuditedValue; - - public String getValue() { - return value; - } - - public void setValue(String value) { - this.value = value; - } - - public String getNotAuditedValue() { - return notAuditedValue; - } - - public void setNotAuditedValue(String notAuditedValue) { - this.notAuditedValue = notAuditedValue; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java deleted file mode 100644 index d550e04c8906..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-4439") -public class AuditPropertyOverrideTest extends BaseEnversJPAFunctionalTestCase { - private Integer propertyEntityId = null; - private Integer transitiveEntityId = null; - private Integer auditedEntityId = null; - private Table propertyTable = null; - private Table transitiveTable = null; - private Table auditedTable = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertyOverrideEntity.class, TransitiveOverrideEntity.class, AuditedSpecialEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - PropertyOverrideEntity propertyEntity = new PropertyOverrideEntity( "data 1", 1, "data 2" ); - em.persist( propertyEntity ); - em.getTransaction().commit(); - propertyEntityId = propertyEntity.getId(); - - // Revision 2 - em.getTransaction().begin(); - TransitiveOverrideEntity transitiveEntity = new TransitiveOverrideEntity( "data 1", 1, "data 2", 2, "data 3" ); - em.persist( transitiveEntity ); - em.getTransaction().commit(); - transitiveEntityId = transitiveEntity.getId(); - - // Revision 3 - em.getTransaction().begin(); - AuditedSpecialEntity auditedEntity = new AuditedSpecialEntity( "data 1", 1, "data 2" ); - em.persist( auditedEntity ); - em.getTransaction().commit(); - auditedEntityId = auditedEntity.getId(); - - propertyTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditoverride.PropertyOverrideEntity_AUD" - ).getTable(); - transitiveTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditoverride.TransitiveOverrideEntity_AUD" - ).getTable(); - auditedTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditoverride.AuditedSpecialEntity_AUD" - ).getTable(); - } - - @Test - public void testNotAuditedProperty() { - Assert.assertNull( propertyTable.getColumn( new Column( "str1" ) ) ); - } - - @Test - public void testAuditedProperty() { - Assert.assertNotNull( propertyTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( transitiveTable.getColumn( new Column( "number2" ) ) ); - Assert.assertNotNull( auditedTable.getColumn( new Column( "str1" ) ) ); - } - - @Test - public void testTransitiveAuditedProperty() { - Assert.assertNotNull( transitiveTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( transitiveTable.getColumn( new Column( "str1" ) ) ); - } - - @Test - public void testHistoryOfPropertyOverrideEntity() { - PropertyOverrideEntity ver1 = new PropertyOverrideEntity( null, 1, propertyEntityId, "data 2" ); - Assert.assertEquals( ver1, getAuditReader().find( PropertyOverrideEntity.class, propertyEntityId, 1 ) ); - } - - @Test - public void testHistoryOfTransitiveOverrideEntity() { - TransitiveOverrideEntity ver1 = new TransitiveOverrideEntity( - "data 1", - 1, - transitiveEntityId, - "data 2", - 2, - "data 3" - ); - Assert.assertEquals( ver1, getAuditReader().find( TransitiveOverrideEntity.class, transitiveEntityId, 2 ) ); - } - - @Test - public void testHistoryOfAuditedSpecialEntity() { - AuditedSpecialEntity ver1 = new AuditedSpecialEntity( "data 1", null, auditedEntityId, "data 2" ); - Assert.assertEquals( ver1, getAuditReader().find( AuditedSpecialEntity.class, auditedEntityId, 3 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditedBaseEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditedBaseEntity.java deleted file mode 100644 index 5293d5fa9c21..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditedBaseEntity.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import java.io.Serializable; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Audited -@MappedSuperclass -public class AuditedBaseEntity implements Serializable { - @Id - @GeneratedValue - private Integer id; - - private String str1; - - private Integer number1; - - public AuditedBaseEntity() { - } - - public AuditedBaseEntity(String str1, Integer number1, Integer id) { - this.id = id; - this.str1 = str1; - this.number1 = number1; - } - - public AuditedBaseEntity(String str1, Integer number1) { - this.str1 = str1; - this.number1 = number1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public Integer getNumber1() { - return number1; - } - - public void setNumber1(Integer number1) { - this.number1 = number1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedBaseEntity) ) { - return false; - } - - AuditedBaseEntity that = (AuditedBaseEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number1 != null ? !number1.equals( that.number1 ) : that.number1 != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (number1 != null ? number1.hashCode() : 0); - return result; - } - - public String toString() { - return "AuditedBaseEntity(id = " + id + ", str1 = " + str1 + ", number1 = " + number1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditedSpecialEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditedSpecialEntity.java deleted file mode 100644 index 2784969dc09b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditedSpecialEntity.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@AuditOverrides({@AuditOverride(forClass = NotAuditedBaseEntity.class, name = "str1", isAudited = true)}) -public class AuditedSpecialEntity extends NotAuditedBaseEntity { - @Audited - private String str2; - - public AuditedSpecialEntity() { - } - - public AuditedSpecialEntity(String str1, Integer number, String str2) { - super( str1, number ); - this.str2 = str2; - } - - public AuditedSpecialEntity(String str1, Integer number, Integer id, String str2) { - super( str1, number, id ); - this.str2 = str2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof AuditedSpecialEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - AuditedSpecialEntity that = (AuditedSpecialEntity) o; - - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "AuditedSpecialEntity(" + super.toString() + ", str2 = " + str2 + ")"; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/BaseEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/BaseEntity.java deleted file mode 100644 index c48fc084c9bd..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/BaseEntity.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import java.io.Serializable; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -public class BaseEntity implements Serializable { - @Id - @GeneratedValue - private Integer id; - - @Audited - private String str1; - - @NotAudited - private Integer number1; - - public BaseEntity() { - } - - public BaseEntity(String str1, Integer number1, Integer id) { - this.id = id; - this.str1 = str1; - this.number1 = number1; - } - - public BaseEntity(String str1, Integer number1) { - this.str1 = str1; - this.number1 = number1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public Integer getNumber1() { - return number1; - } - - public void setNumber1(Integer number1) { - this.number1 = number1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BaseEntity) ) { - return false; - } - - BaseEntity that = (BaseEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number1 != null ? !number1.equals( that.number1 ) : that.number1 != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (number1 != null ? number1.hashCode() : 0); - return result; - } - - public String toString() { - return "BaseEntity(id = " + id + ", str1 = " + str1 + ", number1 = " + number1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ClassOverrideAuditedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ClassOverrideAuditedEntity.java deleted file mode 100644 index be6960ac6ff7..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ClassOverrideAuditedEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz.antoniak at gmail dot com) - */ -@Entity -@Table(name = "ClassOverrideAudited") -@AuditOverrides({@AuditOverride(forClass = NotAuditedBaseEntity.class, isAudited = true)}) -public class ClassOverrideAuditedEntity extends NotAuditedBaseEntity { - @Audited - private String str2; - - public ClassOverrideAuditedEntity() { - } - - public ClassOverrideAuditedEntity(String str1, Integer number, String str2) { - super( str1, number ); - this.str2 = str2; - } - - public ClassOverrideAuditedEntity(String str1, Integer number, Integer id, String str2) { - super( str1, number, id ); - this.str2 = str2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ClassOverrideAuditedEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ClassOverrideAuditedEntity that = (ClassOverrideAuditedEntity) o; - - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ClassOverrideAuditedEntity(" + super.toString() + ", str2 = " + str2 + ")"; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ClassOverrideNotAuditedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ClassOverrideNotAuditedEntity.java deleted file mode 100644 index dc90a2daf853..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ClassOverrideNotAuditedEntity.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz.antoniak at gmail dot com) - */ -@Entity -@Table(name = "ClassOverrideNotAudited") -@AuditOverrides({@AuditOverride(forClass = AuditedBaseEntity.class, isAudited = false)}) -public class ClassOverrideNotAuditedEntity extends AuditedBaseEntity { - @Audited - private String str2; - - public ClassOverrideNotAuditedEntity() { - } - - public ClassOverrideNotAuditedEntity(String str1, Integer number, String str2) { - super( str1, number ); - this.str2 = str2; - } - - public ClassOverrideNotAuditedEntity(String str1, Integer number, Integer id, String str2) { - super( str1, number, id ); - this.str2 = str2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ClassOverrideNotAuditedEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ClassOverrideNotAuditedEntity that = (ClassOverrideNotAuditedEntity) o; - - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ClassOverrideNotAuditedEntity(" + super.toString() + ", str2 = " + str2 + ")"; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java deleted file mode 100644 index 722820d71bda..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java +++ /dev/null @@ -1,463 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Column; -import jakarta.persistence.Embeddable; -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -/** - * This class addresses numerous issues with Embeddable annotated classes - * for issues {@code HHH-9228} and {@code HHH-9229}. - * - * @author Chris Cranford - */ -public class EmbeddableTest extends BaseEnversJPAFunctionalTestCase { - private Integer simpleId; - private Integer simpleOverrideId; - private Integer simplePropertyId; - private Integer fullOverrideId; - private Integer notAuditedId; - private Integer overridedId; - private Integer auditedId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedEmbeddable.class, - AuditedEmbeddableOverrideEntity.class, - FullOverrideEmbeddable.class, - FullOverrideEmbeddableEntity.class, - NotAuditedEmbeddableEntity.class, - OverrideEmbeddable.class, - OverrideEmbeddableEntity.class, - SimpleAbstractMappedSuperclass.class, - SimpleEmbeddable.class, - SimpleEmbeddableEntity.class, - SimpleEmbeddableWithOverrideEntity.class, - SimpleEmbeddableWithPropertyOverrideEntity.class - }; - } - - @Test - @Priority( 10 ) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - - // entity 1 - SimpleEmbeddableEntity simple = new SimpleEmbeddableEntity(); - simple.setEmbeddable( new SimpleEmbeddable() ); - simple.getEmbeddable().setStrValue( "strValueSimple" ); - simple.getEmbeddable().setIntValue( 5 ); - - // entity 2 - SimpleEmbeddableWithOverrideEntity simpleOverride = new SimpleEmbeddableWithOverrideEntity(); - simpleOverride.setEmbeddable( new SimpleEmbeddable() ); - simpleOverride.getEmbeddable().setStrValue( "strValueSimpleOverride" ); - simpleOverride.getEmbeddable().setIntValue( 10 ); - - // entity 3 - SimpleEmbeddableWithPropertyOverrideEntity simpleProperty = new SimpleEmbeddableWithPropertyOverrideEntity(); - simpleProperty.setEmbeddable( new SimpleEmbeddable() ); - simpleProperty.getEmbeddable().setStrValue( "strValueSimpleMapped" ); - simpleProperty.getEmbeddable().setIntValue( 15 ); - - // entity 4 - FullOverrideEmbeddableEntity fullOverride = new FullOverrideEmbeddableEntity(); - fullOverride.setEmbeddable( new FullOverrideEmbeddable() ); - fullOverride.getEmbeddable().setStrValue( "strValueFull" ); - fullOverride.getEmbeddable().setIntValue( 20 ); - - // entity 5 - NotAuditedEmbeddableEntity notAudited = new NotAuditedEmbeddableEntity(); - notAudited.setEmbeddable( new FullOverrideEmbeddable() ); - notAudited.getEmbeddable().setStrValue( "strValueNotAudited" ); - notAudited.getEmbeddable().setIntValue( 25 ); - - // entity 6 - OverrideEmbeddableEntity overrided = new OverrideEmbeddableEntity(); - overrided.setEmbeddable( new OverrideEmbeddable() ); - overrided.getEmbeddable().setStrValue( "strValueOver" ); - overrided.getEmbeddable().setIntValue( 30 ); - - // entity 7 - AuditedEmbeddableOverrideEntity audited = new AuditedEmbeddableOverrideEntity(); - audited.setEmbeddable( new AuditedEmbeddable() ); - audited.getEmbeddable().setStrValue( "strValueAudited" ); - audited.getEmbeddable().setIntValue( 35 ); - audited.getEmbeddable().setValue( 1024 ); - - entityManager.getTransaction().begin(); - entityManager.persist( simple ); - entityManager.persist( simpleOverride ); - entityManager.persist( simpleProperty ); - entityManager.persist( fullOverride ); - entityManager.persist( notAudited ); - entityManager.persist( overrided ); - entityManager.persist( audited ); - entityManager.getTransaction().commit(); - - this.simpleId = simple.getId(); - this.simpleOverrideId = simpleOverride.getId(); - this.simplePropertyId = simpleProperty.getId(); - this.fullOverrideId = fullOverride.getId(); - this.notAuditedId = notAudited.getId(); - this.overridedId = overrided.getId(); - this.auditedId = audited.getId(); - } - finally { - entityManager.close(); - } - } - - @Test - @JiraKey( value = "HHH-9228" ) - public void testAuditOverrideOnAuditedEmbeddable() { - final PersistentClass clazz = getPersistentClass( AuditedEmbeddableOverrideEntity.class, auditedId, 1 ); - assertTrue( clazz.hasProperty( "name" ) ); - // verify non-audited fields are excluded from mappings. - assertFalse( clazz.hasProperty( "embeddable_value" ) ); - assertFalse( clazz.hasProperty( "embeddable_intValue" ) ); - assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); - } - - @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithFullAudit() { - final PersistentClass clazz = getPersistentClass( FullOverrideEmbeddableEntity.class, fullOverrideId, 1 ); - assertTrue( clazz.hasProperty( "embeddable_intValue" ) ); - assertTrue( clazz.hasProperty( "embeddable_strValue" ) ); - } - - @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithNoAudited() { - final PersistentClass clazz = getPersistentClass( NotAuditedEmbeddableEntity.class, notAuditedId, 1 ); - // not mapped because @NotAudited should override any other behavior. - assertFalse( clazz.hasProperty( "embeddable_intValue" ) ); - assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); - } - - @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithAuditOverride() { - final PersistentClass clazz = getPersistentClass( OverrideEmbeddableEntity.class, overridedId, 1 ); - assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); - assertTrue( clazz.hasProperty( "embeddable_intValue" ) ); - } - - @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableNoAuditOverrides() { - final PersistentClass clazz = getPersistentClass( SimpleEmbeddableEntity.class, simpleId, 1 ); - assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); - assertFalse( clazz.hasProperty( "embeddable_intValue" ) ); - } - - @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithAuditOverrideForMappedSuperclass() { - final PersistentClass clazz = getPersistentClass( - SimpleEmbeddableWithOverrideEntity.class, - simpleOverrideId, - 1 - ); - assertTrue( clazz.hasProperty( "embeddable_strValue" ) ); - assertTrue( clazz.hasProperty( "embeddable_intValue" ) ); - } - - @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithPropertyAuditOverride() { - final PersistentClass clazz = getPersistentClass( - SimpleEmbeddableWithPropertyOverrideEntity.class, - simplePropertyId, - 1 - ); - assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); - assertTrue( clazz.hasProperty( "embeddable_intValue" ) ); - } - - // represents a @MappedSuperclass with no overrides - @MappedSuperclass - public static abstract class SimpleAbstractMappedSuperclass { - private String strValue; - private Integer intValue; - - public Integer getIntValue() { - return intValue; - } - - public void setIntValue(Integer intValue) { - this.intValue = intValue; - } - - public String getStrValue() { - return strValue; - } - - public void setStrValue(String strValue) { - this.strValue = strValue; - } - } - - // an embeddable that should introduce no audited properties - @Embeddable - public static class SimpleEmbeddable extends SimpleAbstractMappedSuperclass { - - } - - // an embeddable that should introduce 'intValue' as audited based on audit overrides locally - @Embeddable - @AuditOverride(forClass = SimpleAbstractMappedSuperclass.class, name = "intValue") - public static class OverrideEmbeddable extends SimpleAbstractMappedSuperclass { - - } - - // an embedddable that introduces all audited values base don audit overrides locally. - @Embeddable - @AuditOverride(forClass = SimpleAbstractMappedSuperclass.class) - public static class FullOverrideEmbeddable extends SimpleAbstractMappedSuperclass { - - } - - @Embeddable - @Audited - public static class AuditedEmbeddable extends SimpleAbstractMappedSuperclass { - @Column(name = "val") - private Integer value; - - public Integer getValue() { - return value; - } - - public void setValue(Integer value) { - this.value = value; - } - } - - @Entity(name = "aeoe") - @Audited - public static class AuditedEmbeddableOverrideEntity { - @Id - @GeneratedValue - private Integer id; - private String name; - @Embedded - @AuditOverrides({ - @AuditOverride(name = "value", isAudited = false), - @AuditOverride(forClass = SimpleAbstractMappedSuperclass.class, isAudited = false) - }) - private AuditedEmbeddable embeddable; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AuditedEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(AuditedEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Entity(name = "naee") - @Audited - public static class NotAuditedEmbeddableEntity { - @Id - @GeneratedValue - private Integer id; - @Embedded - @NotAudited - private FullOverrideEmbeddable embeddable; - - public FullOverrideEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(FullOverrideEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Entity(name = "foee") - @Audited - public static class FullOverrideEmbeddableEntity { - @Id - @GeneratedValue - private Integer id; - @Embedded - private FullOverrideEmbeddable embeddable; - - public FullOverrideEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(FullOverrideEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Entity(name = "oee") - @Audited - public static class OverrideEmbeddableEntity { - @Id - @GeneratedValue - private Integer id; - @Embedded - private OverrideEmbeddable embeddable; - - public OverrideEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(OverrideEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Entity(name = "sewpoe") - @Audited - public static class SimpleEmbeddableWithPropertyOverrideEntity { - @Id - @GeneratedValue - private Integer id; - @Embedded - @AuditOverride(name = "intValue", forClass = SimpleAbstractMappedSuperclass.class) - private SimpleEmbeddable embeddable; - - public SimpleEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(SimpleEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - @Entity(name = "see") - @Audited - public static class SimpleEmbeddableEntity { - @Id - @GeneratedValue - private Integer id; - @Embedded - private SimpleEmbeddable embeddable; - - public SimpleEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(SimpleEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - - @Entity(name = "sewoe") - @Audited - public static class SimpleEmbeddableWithOverrideEntity { - @Id - @GeneratedValue - private Integer id; - @Embedded - @AuditOverride(forClass = SimpleAbstractMappedSuperclass.class) - private SimpleEmbeddable embeddable; - - public SimpleEmbeddable getEmbeddable() { - return embeddable; - } - - public void setEmbeddable(SimpleEmbeddable embeddable) { - this.embeddable = embeddable; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } - - private PersistentClass getPersistentClass(Class clazz, Object id, Number revision) { - final Object entity = getAuditReader().find( clazz, id, revision ); - return metadata().getEntityBinding( getAuditReader().getEntityName( id, revision, entity ) + "_AUD" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ExtendedBaseEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ExtendedBaseEntity.java deleted file mode 100644 index 863d135f93ed..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/ExtendedBaseEntity.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -@AuditOverrides({ - @AuditOverride(forClass = BaseEntity.class, name = "str1", isAudited = false), - @AuditOverride(forClass = BaseEntity.class, name = "number1", isAudited = true) - }) -public class ExtendedBaseEntity extends BaseEntity { - @Audited - private String str2; - - @NotAudited - private Integer number2; - - public ExtendedBaseEntity() { - } - - public ExtendedBaseEntity(String str1, Integer number1, Integer id, String str2, Integer number2) { - super( str1, number1, id ); - this.str2 = str2; - this.number2 = number2; - } - - public ExtendedBaseEntity(String str1, Integer number1, String str2, Integer number2) { - super( str1, number1 ); - this.str2 = str2; - this.number2 = number2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ExtendedBaseEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ExtendedBaseEntity that = (ExtendedBaseEntity) o; - - if ( number2 != null ? !number2.equals( that.number2 ) : that.number2 != null ) { - return false; - } - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - result = 31 * result + (number2 != null ? number2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "ExtendedBaseEntity(" + super.toString() + ", str2 = " + str2 + ", number2 = " + number2 + ")"; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } - - public Integer getNumber2() { - return number2; - } - - public void setNumber2(Integer number2) { - this.number2 = number2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideEntity.java deleted file mode 100644 index 2beffa5404cc..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -@AuditOverrides({ - @AuditOverride(forClass = AuditedBaseEntity.class, isAudited = false), - @AuditOverride(forClass = AuditedBaseEntity.class, name = "number1", isAudited = true) - }) -public class MixedOverrideEntity extends AuditedBaseEntity { - private String str2; - - public MixedOverrideEntity() { - } - - public MixedOverrideEntity(String str1, Integer number, String str2) { - super( str1, number ); - this.str2 = str2; - } - - public MixedOverrideEntity(String str1, Integer number, Integer id, String str2) { - super( str1, number, id ); - this.str2 = str2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MixedOverrideEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - MixedOverrideEntity that = (MixedOverrideEntity) o; - - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "MixedOverrideEntity(" + super.toString() + ", str2 = " + str2 + ")"; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java deleted file mode 100644 index f38c4d50279a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-4439") -public class MixedOverrideTest extends BaseEnversJPAFunctionalTestCase { - private Integer mixedEntityId = null; - private Table mixedTable = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MixedOverrideEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - MixedOverrideEntity mixedEntity = new MixedOverrideEntity( "data 1", 1, "data 2" ); - em.persist( mixedEntity ); - em.getTransaction().commit(); - mixedEntityId = mixedEntity.getId(); - - mixedTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditoverride.MixedOverrideEntity_AUD" - ).getTable(); - } - - @Test - public void testAuditedProperty() { - Assert.assertNotNull( mixedTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( mixedTable.getColumn( new Column( "str2" ) ) ); - } - - @Test - public void testNotAuditedProperty() { - Assert.assertNull( mixedTable.getColumn( new Column( "str1" ) ) ); - } - - @Test - public void testHistoryOfMixedEntity() { - MixedOverrideEntity ver1 = new MixedOverrideEntity( null, 1, mixedEntityId, "data 2" ); - Assert.assertEquals( ver1, getAuditReader().find( MixedOverrideEntity.class, mixedEntityId, 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/NotAuditedBaseEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/NotAuditedBaseEntity.java deleted file mode 100644 index 9f52cad98e8d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/NotAuditedBaseEntity.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import java.io.Serializable; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -public class NotAuditedBaseEntity implements Serializable { - @Id - @GeneratedValue - private Integer id; - - private String str1; - - private Integer number1; - - public NotAuditedBaseEntity() { - } - - public NotAuditedBaseEntity(String str1, Integer number1, Integer id) { - this.id = id; - this.str1 = str1; - this.number1 = number1; - } - - public NotAuditedBaseEntity(String str1, Integer number1) { - this.str1 = str1; - this.number1 = number1; - } - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getStr1() { - return str1; - } - - public void setStr1(String str1) { - this.str1 = str1; - } - - public Integer getNumber1() { - return number1; - } - - public void setNumber1(Integer number1) { - this.number1 = number1; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof NotAuditedBaseEntity) ) { - return false; - } - - NotAuditedBaseEntity that = (NotAuditedBaseEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number1 != null ? !number1.equals( that.number1 ) : that.number1 != null ) { - return false; - } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (str1 != null ? str1.hashCode() : 0); - result = 31 * result + (number1 != null ? number1.hashCode() : 0); - return result; - } - - public String toString() { - return "NotAuditedBaseEntity(id = " + id + ", str1 = " + str1 + ", number1 = " + number1 + ")"; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/PropertyOverrideEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/PropertyOverrideEntity.java deleted file mode 100644 index bb6b9349043e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/PropertyOverrideEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -@AuditOverrides({ - @AuditOverride(forClass = BaseEntity.class, name = "str1", isAudited = false), - @AuditOverride(forClass = BaseEntity.class, name = "number1", isAudited = true) - }) -public class PropertyOverrideEntity extends BaseEntity { - private String str2; - - public PropertyOverrideEntity() { - } - - public PropertyOverrideEntity(String str1, Integer number1, String str2) { - super( str1, number1 ); - this.str2 = str2; - } - - public PropertyOverrideEntity(String str1, Integer number1, Integer id, String str2) { - super( str1, number1, id ); - this.str2 = str2; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof PropertyOverrideEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - PropertyOverrideEntity that = (PropertyOverrideEntity) o; - - if ( str2 != null ? !str2.equals( that.str2 ) : that.str2 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str2 != null ? str2.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "PropertyOverrideEntity(" + super.toString() + ", str2 = " + str2 + ")"; - } - - public String getStr2() { - return str2; - } - - public void setStr2(String str2) { - this.str2 = str2; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/TransitiveOverrideEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/TransitiveOverrideEntity.java deleted file mode 100644 index e6adfa869728..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/TransitiveOverrideEntity.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditoverride; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.AuditOverride; -import org.hibernate.envers.AuditOverrides; -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited -@AuditOverrides({ - @AuditOverride(forClass = BaseEntity.class, name = "str1", isAudited = true), - @AuditOverride(forClass = ExtendedBaseEntity.class, name = "number2", isAudited = true) - }) -public class TransitiveOverrideEntity extends ExtendedBaseEntity { - private String str3; - - public TransitiveOverrideEntity() { - } - - public TransitiveOverrideEntity( - String str1, - Integer number1, - Integer id, - String str2, - Integer number2, - String str3) { - super( str1, number1, id, str2, number2 ); - this.str3 = str3; - } - - public TransitiveOverrideEntity(String str1, Integer number1, String str2, Integer number2, String str3) { - super( str1, number1, str2, number2 ); - this.str3 = str3; - } - - @Override - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof TransitiveOverrideEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - TransitiveOverrideEntity that = (TransitiveOverrideEntity) o; - - if ( str3 != null ? !str3.equals( that.str3 ) : that.str3 != null ) { - return false; - } - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (str3 != null ? str3.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "TransitiveOverrideEntity(" + super.toString() + ", str3 = " + str3 + ")"; - } - - public String getStr3() { - return str3; - } - - public void setStr3(String str3) { - this.str3 = str3; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/BabyCompleteEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/BabyCompleteEntity.java deleted file mode 100644 index 99751bfa52ad..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/BabyCompleteEntity.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited(auditParents = {MappedParentEntity.class}) -public class BabyCompleteEntity extends ChildCompleteEntity { - private String baby; - - public BabyCompleteEntity() { - } - - public BabyCompleteEntity( - Long id, - String grandparent, - String notAudited, - String parent, - String child, - StrIntTestEntity relation, - String baby) { - super( id, grandparent, notAudited, parent, child, relation ); - this.baby = baby; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof BabyCompleteEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - BabyCompleteEntity that = (BabyCompleteEntity) o; - - if ( baby != null ? !baby.equals( that.baby ) : that.baby != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (baby != null ? baby.hashCode() : 0); - return result; - } - - public String toString() { - return "BabyCompleteEntity(" + super.toString() + ", baby = " + baby + ")"; - } - - public String getBaby() { - return baby; - } - - public void setBaby(String baby) { - this.baby = baby; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildCompleteEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildCompleteEntity.java deleted file mode 100644 index bac6ff976f4a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildCompleteEntity.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -@Audited(auditParents = {MappedGrandparentEntity.class}) -public class ChildCompleteEntity extends MappedParentEntity { - private String child; - - public ChildCompleteEntity() { - super( null, null, null, null, null ); - } - - public ChildCompleteEntity( - Long id, - String grandparent, - String notAudited, - String parent, - String child, - StrIntTestEntity relation) { - super( id, grandparent, notAudited, parent, relation ); - this.child = child; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildCompleteEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildCompleteEntity that = (ChildCompleteEntity) o; - - if ( child != null ? !child.equals( that.child ) : that.child != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (child != null ? child.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildCompleteEntity(" + super.toString() + ", child = " + child + ")"; - } - - public String getChild() { - return child; - } - - public void setChild(String child) { - this.child = child; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildMultipleParentsEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildMultipleParentsEntity.java deleted file mode 100644 index 396897aeaf60..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildMultipleParentsEntity.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited(auditParents = {MappedParentEntity.class, MappedGrandparentEntity.class}) -public class ChildMultipleParentsEntity extends MappedParentEntity { - private String child; - - public ChildMultipleParentsEntity() { - super( null, null, null, null, null ); - } - - public ChildMultipleParentsEntity( - Long id, - String grandparent, - String notAudited, - String parent, - String child, - StrIntTestEntity relation) { - super( id, grandparent, notAudited, parent, relation ); - this.child = child; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildMultipleParentsEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildMultipleParentsEntity that = (ChildMultipleParentsEntity) o; - - if ( child != null ? !child.equals( that.child ) : that.child != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (child != null ? child.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildMultipleParentsEntity(" + super.toString() + ", child = " + child + ")"; - } - - public String getChild() { - return child; - } - - public void setChild(String child) { - this.child = child; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildSingleParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildSingleParentEntity.java deleted file mode 100644 index 2b1b674c92d5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ChildSingleParentEntity.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.Entity; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Audited(auditParents = {MappedGrandparentEntity.class}) -public class ChildSingleParentEntity extends MappedParentEntity { - private String child; - - public ChildSingleParentEntity() { - super( null, null, null, null, null ); - } - - public ChildSingleParentEntity( - Long id, - String grandparent, - String notAudited, - String parent, - String child, - StrIntTestEntity relation) { - super( id, grandparent, notAudited, parent, relation ); - this.child = child; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildSingleParentEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ChildSingleParentEntity that = (ChildSingleParentEntity) o; - - if ( child != null ? !child.equals( that.child ) : that.child != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (child != null ? child.hashCode() : 0); - return result; - } - - public String toString() { - return "ChildSingleParentEntity(" + super.toString() + ", child = " + child + ")"; - } - - public String getChild() { - return child; - } - - public void setChild(String child) { - this.child = child; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ExplicitTransitiveChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ExplicitTransitiveChildEntity.java deleted file mode 100644 index a4134def0188..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ExplicitTransitiveChildEntity.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "ExplicitTransitiveChild") -@Audited(auditParents = {TransitiveParentEntity.class}) -public class ExplicitTransitiveChildEntity extends TransitiveParentEntity { - private String child; - - public ExplicitTransitiveChildEntity() { - super( null, null, null, null ); - } - - public ExplicitTransitiveChildEntity(Long id, String grandparent, String notAudited, String parent, String child) { - super( id, grandparent, notAudited, parent ); - this.child = child; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ExplicitTransitiveChildEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ExplicitTransitiveChildEntity that = (ExplicitTransitiveChildEntity) o; - - if ( child != null ? !child.equals( that.child ) : that.child != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (child != null ? child.hashCode() : 0); - return result; - } - - public String toString() { - return "ExplicitTransitiveChildEntity(" + super.toString() + ", child = " + child + ")"; - } - - public String getChild() { - return child; - } - - public void setChild(String child) { - this.child = child; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ImplicitTransitiveChildEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ImplicitTransitiveChildEntity.java deleted file mode 100644 index 289f11ca49b5..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/ImplicitTransitiveChildEntity.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.Entity; -import jakarta.persistence.Table; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@Entity -@Table(name = "ImplicitTransitiveChild") -@Audited -public class ImplicitTransitiveChildEntity extends TransitiveParentEntity { - private String child; - - public ImplicitTransitiveChildEntity() { - super( null, null, null, null ); - } - - public ImplicitTransitiveChildEntity(Long id, String grandparent, String notAudited, String parent, String child) { - super( id, grandparent, notAudited, parent ); - this.child = child; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ImplicitTransitiveChildEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - ImplicitTransitiveChildEntity that = (ImplicitTransitiveChildEntity) o; - - if ( child != null ? !child.equals( that.child ) : that.child != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (child != null ? child.hashCode() : 0); - return result; - } - - public String toString() { - return "ImplicitTransitiveChildEntity(" + super.toString() + ", child = " + child + ")"; - } - - public String getChild() { - return child; - } - - public void setChild(String child) { - this.child = child; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MappedGrandparentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MappedGrandparentEntity.java deleted file mode 100644 index b506490633a1..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MappedGrandparentEntity.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.NotAudited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -public class MappedGrandparentEntity { - @Id - private Long id; - - private String grandparent; - - @NotAudited - private String notAudited; - - public MappedGrandparentEntity(Long id, String grandparent, String notAudited) { - this.id = id; - this.grandparent = grandparent; - this.notAudited = notAudited; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MappedGrandparentEntity) ) { - return false; - } - - MappedGrandparentEntity that = (MappedGrandparentEntity) o; - - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( grandparent != null ? !grandparent.equals( that.grandparent ) : that.grandparent != null ) { - return false; - } - if ( notAudited != null ? !notAudited.equals( that.notAudited ) : that.notAudited != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = (id != null ? id.hashCode() : 0); - result = 31 * result + (grandparent != null ? grandparent.hashCode() : 0); - result = 31 * result + (notAudited != null ? notAudited.hashCode() : 0); - return result; - } - - public String toString() { - return "MappedGrandparentEntity(id = " + id + ", grandparent = " + grandparent + ", notAudited = " + notAudited + ")"; - } - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getGrandparent() { - return grandparent; - } - - public void setGrandparent(String grandparent) { - this.grandparent = grandparent; - } - - public String getNotAudited() { - return notAudited; - } - - public void setNotAudited(String notAudited) { - this.notAudited = notAudited; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MappedParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MappedParentEntity.java deleted file mode 100644 index cc218d7284e0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MappedParentEntity.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.ManyToOne; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -public class MappedParentEntity extends MappedGrandparentEntity { - private String parent; - - @ManyToOne - private StrIntTestEntity relation; - - public MappedParentEntity( - Long id, - String grandparent, - String notAudited, - String parent, - StrIntTestEntity relation) { - super( id, grandparent, notAudited ); - this.parent = parent; - this.relation = relation; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof MappedParentEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - MappedParentEntity that = (MappedParentEntity) o; - - if ( parent != null ? !parent.equals( that.parent ) : that.parent != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (parent != null ? parent.hashCode() : 0); - return result; - } - - public String toString() { - return "MappedParentEntity(" + super.toString() + ", parent = " + parent + ", relation = " + relation + ")"; - } - - public String getParent() { - return parent; - } - - public void setParent(String parent) { - this.parent = parent; - } - - public StrIntTestEntity getRelation() { - return relation; - } - - public void setRelation(StrIntTestEntity relation) { - this.relation = relation; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java deleted file mode 100644 index 9501ac843a7e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import java.util.Set; -import jakarta.persistence.EntityManager; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests mapping of child entity that declares all of its ancestors as audited with {@link Audited#auditParents()} property. - * All superclasses are marked with {@link MappedSuperclass} annotation but not {@link Audited}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class MultipleAuditParentsTest extends BaseEnversJPAFunctionalTestCase { - private long childMultipleId = 1L; - private Integer siteMultipleId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - MappedParentEntity.class, - ChildMultipleParentsEntity.class, - StrIntTestEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity siteMultiple = new StrIntTestEntity( "data 1", 1 ); - em.persist( siteMultiple ); - em.persist( - new ChildMultipleParentsEntity( - childMultipleId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1", - siteMultiple - ) - ); - em.getTransaction().commit(); - siteMultipleId = siteMultiple.getId(); - } - - @Test - public void testCreatedAuditTable() { - Set expectedColumns = TestTools.makeSet( "child", "parent", "relation_id", "grandparent", "id" ); - Set unexpectedColumns = TestTools.makeSet( "notAudited" ); - - Table table = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditparents.ChildMultipleParentsEntity_AUD" - ).getTable(); - - for ( String columnName : expectedColumns ) { - // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); - } - for ( String columnName : unexpectedColumns ) { - // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); - } - } - - @Test - public void testMultipleAuditParents() { - // expectedMultipleChild.notAudited shall be null, because it is not audited. - ChildMultipleParentsEntity expectedMultipleChild = new ChildMultipleParentsEntity( - childMultipleId, - "grandparent 1", - null, - "parent 1", - "child 1", - new StrIntTestEntity( - "data 1", - 1, - siteMultipleId - ) - ); - ChildMultipleParentsEntity child = getAuditReader().find( - ChildMultipleParentsEntity.class, - childMultipleId, - 1 - ); - Assert.assertEquals( expectedMultipleChild, child ); - Assert.assertEquals( expectedMultipleChild.getRelation().getId(), child.getRelation().getId() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java deleted file mode 100644 index 5eb66d760539..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import java.util.Set; -import jakarta.persistence.EntityManager; -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests mapping of child entity that declares one of its ancestors as audited with {@link Audited#auditParents()} property. - * All superclasses are marked with {@link MappedSuperclass} annotation but not {@link Audited}. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class SingleAuditParentsTest extends BaseEnversJPAFunctionalTestCase { - private long childSingleId = 1L; - private Integer siteSingleId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - MappedParentEntity.class, - ChildSingleParentEntity.class, - StrIntTestEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity siteSingle = new StrIntTestEntity( "data 1", 1 ); - em.persist( siteSingle ); - em.persist( - new ChildSingleParentEntity( - childSingleId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1", - siteSingle - ) - ); - em.getTransaction().commit(); - siteSingleId = siteSingle.getId(); - em.close(); - } - - @Test - public void testCreatedAuditTable() { - Set expectedColumns = TestTools.makeSet( "child", "grandparent", "id" ); - Set unexpectedColumns = TestTools.makeSet( "parent", "relation_id", "notAudited" ); - - Table table = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditparents.ChildSingleParentEntity_AUD" - ).getTable(); - - for ( String columnName : expectedColumns ) { - // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); - } - for ( String columnName : unexpectedColumns ) { - // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); - } - } - - @Test - public void testSingleAuditParent() { - // expectedSingleChild.parent, expectedSingleChild.relation and expectedSingleChild.notAudited shall be null, because they are not audited. - ChildSingleParentEntity expectedSingleChild = new ChildSingleParentEntity( - childSingleId, - "grandparent 1", - null, - null, - "child 1", - null - ); - ChildSingleParentEntity child = getAuditReader().find( ChildSingleParentEntity.class, childSingleId, 1 ); - Assert.assertEquals( expectedSingleChild, child ); - Assert.assertNull( child.getRelation() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java deleted file mode 100644 index fda868c36d82..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests mapping of baby entity which declares its parent as audited with {@link Audited#auditParents()} property. - * Moreover, child class (mapped superclass of baby entity) declares grandparent entity as audited. In this case all - * attributes of baby class shall be audited. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class TotalAuditParentsTest extends BaseEnversJPAFunctionalTestCase { - private long babyCompleteId = 1L; - private Integer siteCompleteId = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - MappedParentEntity.class, - StrIntTestEntity.class, - ChildCompleteEntity.class, - BabyCompleteEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity siteComplete = new StrIntTestEntity( "data 1", 1 ); - em.persist( siteComplete ); - em.persist( - new BabyCompleteEntity( - babyCompleteId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1", - siteComplete, - "baby 1" - ) - ); - em.getTransaction().commit(); - siteCompleteId = siteComplete.getId(); - } - - @Test - public void testCreatedAuditTable() { - Set expectedColumns = TestTools.makeSet( - "baby", - "child", - "parent", - "relation_id", - "grandparent", - "id" - ); - Set unexpectedColumns = TestTools.makeSet( "notAudited" ); - - Table table = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditparents.BabyCompleteEntity_AUD" - ).getTable(); - - for ( String columnName : expectedColumns ) { - // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); - } - for ( String columnName : unexpectedColumns ) { - // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); - } - } - - @Test - public void testCompleteAuditParents() { - // expectedBaby.notAudited shall be null, because it is not audited. - BabyCompleteEntity expectedBaby = new BabyCompleteEntity( - babyCompleteId, - "grandparent 1", - null, - "parent 1", - "child 1", - new StrIntTestEntity( "data 1", 1, siteCompleteId ), - "baby 1" - ); - BabyCompleteEntity baby = getAuditReader().find( BabyCompleteEntity.class, babyCompleteId, 1 ); - Assert.assertEquals( expectedBaby, baby ); - Assert.assertEquals( expectedBaby.getRelation().getId(), baby.getRelation().getId() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java deleted file mode 100644 index 13d5be2168b9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; - -import org.junit.Assert; -import org.junit.Test; - -/** - * Tests mapping of child entity which parent declares one of its ancestors as audited with {@link Audited#auditParents()} - * property. Child entity may mark explicitly its parent as audited or not. - * - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class TransitiveAuditParentsTest extends BaseEnversJPAFunctionalTestCase { - private long childImpTransId = 1L; - private long childExpTransId = 2L; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - TransitiveParentEntity.class, - ImplicitTransitiveChildEntity.class, - ExplicitTransitiveChildEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - em.persist( - new ImplicitTransitiveChildEntity( - childImpTransId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1" - ) - ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - em.persist( - new ExplicitTransitiveChildEntity( - childExpTransId, - "grandparent 2", - "notAudited 2", - "parent 2", - "child 2" - ) - ); - em.getTransaction().commit(); - } - - @Test - public void testCreatedAuditTables() { - Table explicitTransChildTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditparents.ExplicitTransitiveChildEntity_AUD" - ).getTable(); - checkTableColumns( - TestTools.makeSet( "child", "parent", "grandparent", "id" ), - TestTools.makeSet( "notAudited" ), - explicitTransChildTable - ); - - Table implicitTransChildTable = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.superclass.auditparents.ImplicitTransitiveChildEntity_AUD" - ).getTable(); - checkTableColumns( - TestTools.makeSet( "child", "parent", "grandparent", "id" ), - TestTools.makeSet( "notAudited" ), - implicitTransChildTable - ); - } - - private void checkTableColumns(Set expectedColumns, Set unexpectedColumns, Table table) { - for ( String columnName : expectedColumns ) { - // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); - } - for ( String columnName : unexpectedColumns ) { - // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); - } - } - - @Test - public void testImplicitTransitiveAuditParents() { - // expectedChild.notAudited shall be null, because it is not audited. - ImplicitTransitiveChildEntity expectedChild = new ImplicitTransitiveChildEntity( - childImpTransId, - "grandparent 1", - null, - "parent 1", - "child 1" - ); - ImplicitTransitiveChildEntity child = getAuditReader().find( - ImplicitTransitiveChildEntity.class, - childImpTransId, - 1 - ); - Assert.assertEquals( expectedChild, child ); - } - - @Test - public void testExplicitTransitiveAuditParents() { - // expectedChild.notAudited shall be null, because it is not audited. - ExplicitTransitiveChildEntity expectedChild = new ExplicitTransitiveChildEntity( - childExpTransId, - "grandparent 2", - null, - "parent 2", - "child 2" - ); - ExplicitTransitiveChildEntity child = getAuditReader().find( - ExplicitTransitiveChildEntity.class, - childExpTransId, - 2 - ); - Assert.assertEquals( expectedChild, child ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveParentEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveParentEntity.java deleted file mode 100644 index 508421bdcbd2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveParentEntity.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.superclass.auditparents; - -import jakarta.persistence.MappedSuperclass; - -import org.hibernate.envers.Audited; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@MappedSuperclass -@Audited(auditParents = {MappedGrandparentEntity.class}) -public class TransitiveParentEntity extends MappedGrandparentEntity { - private String parent; - - public TransitiveParentEntity() { - super( null, null, null ); - } - - public TransitiveParentEntity(Long id, String grandparent, String notAudited, String parent) { - super( id, grandparent, notAudited ); - this.parent = parent; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof TransitiveParentEntity) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - - TransitiveParentEntity that = (TransitiveParentEntity) o; - - if ( parent != null ? !parent.equals( that.parent ) : that.parent != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (parent != null ? parent.hashCode() : 0); - return result; - } - - public String toString() { - return "TransitiveParentEntity(" + super.toString() + ", parent = " + parent + ")"; - } - - public String getParent() { - return parent; - } - - public void setParent(String parent) { - this.parent = parent; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java deleted file mode 100644 index 9da17fd2a277..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.tools; - -import java.io.File; -import java.nio.file.Files; -import java.util.Map; - -import jakarta.persistence.EntityManager; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.dialect.OracleDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -/** - * Test verifies that the sequence is created properly both for database operations and export - * scripts and that a basic entity using said sequence can be persisted and fetched via the - * audit reader. - * - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11131") -@RequiresDialectFeature( DialectChecks.SupportsSequences.class ) -public class OrderSequenceGenerationTest extends BaseEnversJPAFunctionalTestCase { - - private File createSchema; - private File dropSchema; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - public void buildEntityManagerFactory() throws Exception { - createSchema = File.createTempFile( "create_schema", ".sql" ); - dropSchema = File.createTempFile( "drop_schema", ".sql" ); - super.buildEntityManagerFactory(); - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_CREATE_TARGET, createSchema.toPath() ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_DROP_TARGET, dropSchema.toPath() ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_ACTION, "drop-and-create" ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, "create-drop" ); - options.put( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); - } - - @Test - public void testCreateSequenceExportScripts() throws Exception { - final String[] createStrings = getDialect().getSequenceSupport().getCreateSequenceStrings( "REVISION_GENERATOR", 1, 1 ); - final String content = new String( Files.readAllBytes( createSchema.toPath() ) ).toLowerCase(); - for ( int i = 0; i < createStrings.length; ++i ) { - if ( getDialect() instanceof OracleDialect ) { - assertTrue( content.contains( ( createStrings[ i ] + " NOCACHE ORDER" ).toLowerCase() ) ); - } - else { - assertTrue( content.contains( createStrings[ i ].toLowerCase() ) ); - } - } - } - - @Test - public void testBasicPersistAndAuditFetch() throws Exception { - EntityManager entityManager = getOrCreateEntityManager(); - try { - StrTestEntity e = new StrTestEntity( "Acme" ); - entityManager.getTransaction().begin(); - entityManager.persist( e ); - entityManager.getTransaction().commit(); - entityManager.clear(); - - StrTestEntity rev1 = getAuditReader().find ( StrTestEntity.class, e.getId(), 1 ); - assertEquals( e, rev1 ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java deleted file mode 100644 index 4183ee7a8d0e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.tools; - -import java.util.Arrays; - -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7106") -public class SchemaExportTest extends BaseEnversFunctionalTestCase { - private Integer id = null; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void testSchemaCreation() { - // Populate database with test data. - Session session = getSession(); - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - id = entity.getId(); - } - - @Test - @Priority(9) - public void testAuditDataRetrieval() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, id ) ); - Assert.assertEquals( new StrTestEntity( "data", id ), getAuditReader().find( StrTestEntity.class, id, 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java deleted file mode 100644 index ad44e9b4d37c..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integrator/BasicIntegratorTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integrator; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.cfg.Configuration; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Test; - -/** - * @author Steve Ebersole - */ -public class BasicIntegratorTest { - /** - * Tests that nothing crazy happens if the hibernate-envers jar happens - * to be on the classpath but we have no audited entities - */ - @Test - @JiraKey( value = "HHH-9675" ) - public void testNoAudited() { - new Configuration().buildSessionFactory( ServiceRegistryUtil.serviceRegistry()).close(); - new Configuration().addAnnotatedClass( SimpleNonAuditedEntity.class ).buildSessionFactory(ServiceRegistryUtil.serviceRegistry()).close(); - } - - @Entity - public static class SimpleNonAuditedEntity { - private Integer id; - - @Id - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java deleted file mode 100644 index 035224583d15..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractEntityManagerTest.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.util.Arrays; -import java.util.Properties; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.cfg.Environment; -import org.hibernate.dialect.Dialect; -import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.boot.internal.EnversIntegrator; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl; -import org.hibernate.jpa.boot.spi.Bootstrap; -import org.hibernate.orm.test.envers.AbstractEnversTest; - -import org.hibernate.testing.AfterClassOnce; -import org.hibernate.testing.BeforeClassOnce; -import org.hibernate.testing.orm.jpa.PersistenceUnitDescriptorAdapter; -import org.hibernate.testing.orm.junit.DialectContext; -import org.junit.Before; - -import jakarta.persistence.EntityManager; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public abstract class AbstractEntityManagerTest extends AbstractEnversTest { - public static final Dialect DIALECT = DialectContext.getDialect(); - - private SessionFactoryImplementor emf; - private EntityManager entityManager; - private AuditReader auditReader; - private boolean audited; - - public void addConfigurationProperties(Properties configuration) { - } - - protected static Dialect getDialect() { - return DIALECT; - } - - private void closeEntityManager() { - if ( entityManager != null ) { - entityManager.close(); - entityManager = null; - } - } - - @Before - public void newEntityManager() { - closeEntityManager(); - - entityManager = emf.createEntityManager(); - - if ( audited ) { - auditReader = AuditReaderFactory.get( entityManager ); - } - } - - @BeforeClassOnce - public void init() { - init( true, getAuditStrategy() ); - } - - protected void init(boolean audited, String auditStrategy) { - this.audited = audited; - - Properties configurationProperties = new Properties(); - configurationProperties.putAll( Environment.getProperties() ); - if ( !audited ) { - configurationProperties.setProperty( EnversIntegrator.AUTO_REGISTER, "false" ); - } - if ( createSchema() ) { - configurationProperties.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); - configurationProperties.setProperty( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); - } - if ( auditStrategy != null && !auditStrategy.isEmpty() ) { - configurationProperties.setProperty( "org.hibernate.envers.audit_strategy", auditStrategy ); - } - - addConfigurationProperties( configurationProperties ); - - configurationProperties.put( AvailableSettings.LOADED_CLASSES, Arrays.asList( getAnnotatedClasses() ) ); - - EntityManagerFactoryBuilderImpl entityManagerFactoryBuilder = - (EntityManagerFactoryBuilderImpl) - Bootstrap.getEntityManagerFactoryBuilder( - new PersistenceUnitDescriptorAdapter(), - configurationProperties - ); - - emf = entityManagerFactoryBuilder.build().unwrap( SessionFactoryImplementor.class ); - - newEntityManager(); - } - - protected Class[] getAnnotatedClasses() { - return new Class[0]; - } - - protected boolean createSchema() { - return true; - } - - @AfterClassOnce - public void close() { - closeEntityManager(); - emf.close(); - //NOTE we don't build the service registry so we don't destroy it - } - - public EntityManager getEntityManager() { - return entityManager; - } - - public AuditReader getAuditReader() { - return auditReader; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java deleted file mode 100644 index 4d1c83096162..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AbstractPerformanceTest.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractPerformanceTest extends AbstractEntityManagerTest { - protected String getSecondsString(long milliseconds) { - return (milliseconds / 1000) + "." + (milliseconds % 1000); - } - - protected abstract void doTest(); - - private void printResults(long unaudited, long audited) { - System.out.println( "Unaudited: " + getSecondsString( unaudited ) ); - System.out.println( " Audited: " + getSecondsString( audited ) ); - System.out.println( " Delta: " + getSecondsString( audited - unaudited ) ); - System.out.println( " Factor: " + (double) audited / unaudited ); - } - - private long startTime; - private long runTotal; - - protected void start() { - startTime = System.currentTimeMillis(); - } - - protected void stop() { - long stopTime = System.currentTimeMillis(); - runTotal += stopTime - startTime; - } - - protected void reset() { - runTotal = 0; - } - - public long run(int numberOfRuns, List results) { - long total = 0; - for ( int i = 0; i <= numberOfRuns; i++ ) { - System.out.println(); - System.out.println( "RUN " + i ); - reset(); - doTest(); - results.add( runTotal ); - total += runTotal; - - newEntityManager(); - - /*System.gc(); - System.gc(); - System.gc(); - System.out.println(Runtime.getRuntime().freeMemory() + ", " + Runtime.getRuntime().totalMemory() + ", " - + (Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));*/ - } - - return total; - } - - public void test(int numberOfRuns) throws IOException { - List unauditedRuns = new ArrayList(); - List auditedRuns = new ArrayList(); - - init( true, null ); - long audited = run( numberOfRuns, auditedRuns ); - close(); - - init( false, null ); - long unaudited = run( numberOfRuns, unauditedRuns ); - close(); - - for ( int i = 0; i <= numberOfRuns; i++ ) { - System.out.println( "RUN " + i ); - printResults( unauditedRuns.get( i ), auditedRuns.get( i ) ); - System.out.println(); - } - - System.out.println( "TOTAL" ); - printResults( unaudited, audited ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java deleted file mode 100644 index 0077eff89ede..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/AllPerformance.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; - -public class AllPerformance { - public static void main(String[] args) throws IOException { - new InsertsPerformance().test( 10 ); - new ComplexInsertPerformance().test( 10 ); - new UpdatesPerformance().test( 10 ); - new InsertsOneTransactionPerformance().test( 10 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java deleted file mode 100644 index 440fd2611082..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/ComplexInsertPerformance.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import java.util.Date; -import java.util.HashSet; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.performance.complex.ChildEntity1; -import org.hibernate.orm.test.envers.performance.complex.ChildEntity2; -import org.hibernate.orm.test.envers.performance.complex.RootEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class ComplexInsertPerformance extends AbstractPerformanceTest { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {RootEntity.class, ChildEntity1.class, ChildEntity2.class}; - } - - private final static int NUMBER_INSERTS = 1000; - - private long idCounter = 0; - - private ChildEntity2 createChildEntity2() { - ChildEntity2 ce = new ChildEntity2(); - ce.setId( idCounter++ ); - ce.setNumber( 12345678 ); - ce.setData( "some data, not really meaningful" ); - ce.setStrings( new HashSet() ); - ce.getStrings().add( "aaa" ); - ce.getStrings().add( "bbb" ); - ce.getStrings().add( "ccc" ); - - return ce; - } - - private ChildEntity1 createChildEntity1() { - ChildEntity1 ce = new ChildEntity1(); - ce.setId( idCounter++ ); - ce.setData1( "xxx" ); - ce.setData2( "yyy" ); - ce.setChild1( createChildEntity2() ); - ce.setChild2( createChildEntity2() ); - - return ce; - } - - protected void doTest() { - for ( int i = 0; i < NUMBER_INSERTS; i++ ) { - newEntityManager(); - EntityManager entityManager = getEntityManager(); - - entityManager.getTransaction().begin(); - - RootEntity re = new RootEntity(); - re.setId( idCounter++ ); - re.setData1( "data1" ); - re.setData2( "data2" ); - re.setDate1( new Date() ); - re.setNumber1( 123 ); - re.setNumber2( 456 ); - re.setChild1( createChildEntity1() ); - re.setChild2( createChildEntity1() ); - re.setChild3( createChildEntity1() ); - - start(); - entityManager.persist( re ); - entityManager.getTransaction().commit(); - stop(); - } - } - - public static void main(String[] args) throws IOException { - ComplexInsertPerformance insertsPerformance = new ComplexInsertPerformance(); - insertsPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java deleted file mode 100644 index fe4fca597914..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/EvictAuditDataAfterCommitTest.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.Session; -import org.hibernate.engine.spi.EntityEntry; -import org.hibernate.engine.spi.PersistenceContext; -import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -public class EvictAuditDataAfterCommitTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @JiraKey(value = "HHH-6614") - public void testSessionCacheClear() { - Session session = openSession(); - session.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "data" ); - session.persist( ste ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, "org.hibernate.orm.test.envers.entities.StrTestEntity_AUD" ); - } - - @Test - @JiraKey(value = "HHH-6614") - public void testSessionCacheCollectionClear() { - final String[] auditEntityNames = new String[] { - "org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity_AUD", - "org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity_AUD" - }; - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); - - Session session = openSession(); - session.getTransaction().begin(); - session.persist( ed1 ); - session.persist( ed2 ); - session.persist( ing1 ); - session.persist( ing2 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed1 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed1.getId() ); - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed2 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed2.getId() ); - Set reffering = new HashSet(); - reffering.add( ing1 ); - reffering.add( ing2 ); - ed2.setReffering( reffering ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed2 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed2.getId() ); - ed2.getReffering().remove( ing1 ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.getTransaction().begin(); - ed2 = (SetRefEdEntity) session.getReference( SetRefEdEntity.class, ed2.getId() ); - ed2.getReffering().iterator().next().setData( "mod_data_ing_2" ); - session.getTransaction().commit(); - checkEmptyAuditSessionCache( session, auditEntityNames ); - - session.close(); - } - - private void checkEmptyAuditSessionCache(Session session, String... auditEntityNames) { - List entityNames = Arrays.asList( auditEntityNames ); - PersistenceContext persistenceContext = ((SessionImplementor) session).getPersistenceContext(); - for ( Map.Entry entrySet : persistenceContext.reentrantSafeEntityEntries() ) { - final EntityEntry entityEntry = entrySet.getValue(); - if ( entityNames.contains( entityEntry.getEntityName() ) ) { - assert false : "Audit data shall not be stored in the session level cache. This causes performance issues."; - } - Assert.assertFalse( - "Revision entity shall not be stored in the session level cache. This causes performance issues.", - SequenceIdRevisionEntity.class.getName().equals( entityEntry.getEntityName() ) - ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java deleted file mode 100644 index 7768f811cf9a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsOneTransactionPerformance.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class InsertsOneTransactionPerformance extends AbstractPerformanceTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private final static int NUMBER_INSERTS = 5000; - - protected void doTest() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - start(); - for ( int i = 0; i < NUMBER_INSERTS; i++ ) { - entityManager.persist( new StrTestEntity( "x" + i ) ); - } - entityManager.getTransaction().commit(); - stop(); - } - - public static void main(String[] args) throws IOException { - InsertsOneTransactionPerformance insertsOneTransactionPerformance = new InsertsOneTransactionPerformance(); - insertsOneTransactionPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java deleted file mode 100644 index 92760ed06934..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/InsertsPerformance.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class InsertsPerformance extends AbstractPerformanceTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private final static int NUMBER_INSERTS = 5000; - - protected void doTest() { - for ( int i = 0; i < NUMBER_INSERTS; i++ ) { - newEntityManager(); - EntityManager entityManager = getEntityManager(); - - entityManager.getTransaction().begin(); - start(); - entityManager.persist( new StrTestEntity( "x" + i ) ); - entityManager.getTransaction().commit(); - stop(); - } - } - - public static void main(String[] args) throws IOException { - InsertsPerformance insertsPerformance = new InsertsPerformance(); - insertsPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java deleted file mode 100644 index e9e7e1960a0b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/UpdatesPerformance.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Ignore; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Ignore -public class UpdatesPerformance extends AbstractPerformanceTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private final static int NUMBER_UPDATES = 5000; - private final static int NUMBER_ENTITIES = 10; - - private Random random = new Random(); - - private List ids = new ArrayList(); - - private void setup() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - - for ( int i = 0; i < NUMBER_ENTITIES; i++ ) { - StrTestEntity testEntity = new StrTestEntity( "x" + i ); - entityManager.persist( testEntity ); - ids.add( testEntity.getId() ); - } - entityManager.getTransaction().commit(); - } - - protected void doTest() { - setup(); - - for ( int i = 0; i < NUMBER_UPDATES; i++ ) { - newEntityManager(); - EntityManager entityManager = getEntityManager(); - - entityManager.getTransaction().begin(); - Integer id = ids.get( random.nextInt( NUMBER_ENTITIES ) ); - start(); - StrTestEntity testEntity = entityManager.find( StrTestEntity.class, id ); - testEntity.setStr( "z" + i ); - entityManager.getTransaction().commit(); - stop(); - } - } - - public static void main(String[] args) throws IOException { - UpdatesPerformance updatesPerformance = new UpdatesPerformance(); - updatesPerformance.test( 3 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java deleted file mode 100644 index a7bd87985011..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity1.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance.complex; - -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildEntity1 { - @Id - private Long id; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity2 child1; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity2 child2; - - private String data1; - - private String data2; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public ChildEntity2 getChild1() { - return child1; - } - - public void setChild1(ChildEntity2 child1) { - this.child1 = child1; - } - - public ChildEntity2 getChild2() { - return child2; - } - - public void setChild2(ChildEntity2 child2) { - this.child2 = child2; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity1) ) { - return false; - } - - ChildEntity1 that = (ChildEntity1) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java deleted file mode 100644 index 3248a68f7093..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/ChildEntity2.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance.complex; - -import java.util.Set; -import jakarta.persistence.ElementCollection; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class ChildEntity2 { - @Id - private Long id; - - private String data; - - private Integer number; - - @ElementCollection - private Set strings; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public Integer getNumber() { - return number; - } - - public void setNumber(Integer number) { - this.number = number; - } - - public Set getStrings() { - return strings; - } - - public void setStrings(Set strings) { - this.strings = strings; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof ChildEntity2) ) { - return false; - } - - ChildEntity2 that = (ChildEntity2) o; - - if ( data != null ? !data.equals( that.data ) : that.data != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data != null ? data.hashCode() : 0); - result = 31 * result + (number != null ? number.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java deleted file mode 100644 index 0cad0b257b51..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/performance/complex/RootEntity.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.performance.complex; - -import java.util.Date; -import jakarta.persistence.CascadeType; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.Temporal; -import jakarta.persistence.TemporalType; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -@Audited -public class RootEntity { - @Id - private Long id; - - private String data1; - - private String data2; - - private Integer number1; - - private Integer number2; - - @Temporal(TemporalType.TIMESTAMP) - private Date date1; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity1 child1; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity1 child2; - - @ManyToOne(cascade = CascadeType.ALL) - private ChildEntity1 child3; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getData1() { - return data1; - } - - public void setData1(String data1) { - this.data1 = data1; - } - - public String getData2() { - return data2; - } - - public void setData2(String data2) { - this.data2 = data2; - } - - public Integer getNumber1() { - return number1; - } - - public void setNumber1(Integer number1) { - this.number1 = number1; - } - - public Integer getNumber2() { - return number2; - } - - public void setNumber2(Integer number2) { - this.number2 = number2; - } - - public Date getDate1() { - return date1; - } - - public void setDate1(Date date1) { - this.date1 = date1; - } - - public ChildEntity1 getChild1() { - return child1; - } - - public void setChild1(ChildEntity1 child1) { - this.child1 = child1; - } - - public ChildEntity1 getChild2() { - return child2; - } - - public void setChild2(ChildEntity1 child2) { - this.child2 = child2; - } - - public ChildEntity1 getChild3() { - return child3; - } - - public void setChild3(ChildEntity1 child3) { - this.child3 = child3; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof RootEntity) ) { - return false; - } - - RootEntity that = (RootEntity) o; - - if ( data1 != null ? !data1.equals( that.data1 ) : that.data1 != null ) { - return false; - } - if ( data2 != null ? !data2.equals( that.data2 ) : that.data2 != null ) { - return false; - } - if ( date1 != null ? !date1.equals( that.date1 ) : that.date1 != null ) { - return false; - } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { - return false; - } - if ( number1 != null ? !number1.equals( that.number1 ) : that.number1 != null ) { - return false; - } - if ( number2 != null ? !number2.equals( that.number2 ) : that.number2 != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = (id != null ? id.hashCode() : 0); - result = 31 * result + (data1 != null ? data1.hashCode() : 0); - result = 31 * result + (data2 != null ? data2.hashCode() : 0); - result = 31 * result + (number1 != null ? number1.hashCode() : 0); - result = 31 * result + (number2 != null ? number2.hashCode() : 0); - result = 31 * result + (date1 != null ? date1.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/tools/TablePrinter.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/tools/TablePrinter.java deleted file mode 100644 index d2a990398e05..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/tools/TablePrinter.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.tools; - -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.function.Supplier; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.Tuple; -import jakarta.persistence.TupleElement; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; - -/** - * @author Chris Cranford - */ -public class TablePrinter { - - private static Map buildColumnSizesFromRows(List rows) { - Map columnSizes = new TreeMap<>(); - for ( int i = 0; i < rows.size(); ++i ) { - Tuple row = rows.get( i ); - // on first row, handle columns - if ( i == 0 ) { - for ( int j = 0; j < row.getElements().size(); ++j ) { - TupleElement element = row.getElements().get( j ); - columnSizes.put( j, element.getAlias().length() ); - } - } - // handle values - for ( int j = 0; j < row.getElements().size(); ++j ) { - Object value = row.get( j ); - int length = ( "" + value ).trim().length(); - if ( length > columnSizes.get( j ) ) { - columnSizes.put( j, length ); - } - } - } - return columnSizes; - } - - private static void writeColumn(int columnIndex, int columns, int length, String value) { - System.out.print( "| " + String.format( "%1$-" + length + "s", value ) + " " ); - if ( columnIndex + 1 >= columns ) { - System.out.println( "|" ); - } - } - - private static String buildSplitter(List> columns, Map columnSizes) { - StringBuilder sb = new StringBuilder(); - for ( int i = 0; i < columns.size(); ++i ) { - sb.append( "+-" + String.format( "%1$-" + columnSizes.get( i ) + "s", "" ).replace( ' ', '-' ) + '-' ); - if ( i + 1 >= columns.size() ) { - sb.append( '+' ); - } - } - return sb.toString(); - } - - private static void printTableFromRows(List rows) { - if ( rows.size() > 0 ) { - Map columnSizes = buildColumnSizesFromRows( rows ); - String rowSplitter = null; - for ( int i = 0; i < rows.size(); ++i ) { - Tuple row = rows.get( i ); - List> columns = row.getElements(); - - if ( rowSplitter == null ) { - rowSplitter = buildSplitter( columns, columnSizes ); - } - - // handle columns on first row - if ( i == 0 ) { - System.out.println( rowSplitter ); - for ( int j = 0; j < columns.size(); ++j ) { - writeColumn( j, columns.size(), columnSizes.get( j ), columns.get( j ).getAlias() ); - } - System.out.println( rowSplitter ); - } - - // handle column values - for ( int j = 0; j < columns.size(); ++j ) { - final String value = row.get( j ) + "".trim(); - writeColumn( j, columns.size(), columnSizes.get( j ), value ); - } - } - - System.out.println( rowSplitter ); - } - } - - public static void print(EntityManager entityManager, String... tables) { - for ( String table : tables ) { - List rows = entityManager.createNativeQuery( "SELECT * FROM " + table + " ORDER BY REV", Tuple.class ).getResultList(); - printTableFromRows( rows ); - } - } - - public static void print(Supplier factorySupplier, String... tables) { - doInJPA( factorySupplier, entityManager -> { - print( entityManager, tables ); - } ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/tools/TestTools.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/tools/TestTools.java deleted file mode 100644 index ea4338c4df30..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/tools/TestTools.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.tools; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.Property; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class TestTools { - public static Set makeSet(T... objects) { - final Set ret = new HashSet(); - //noinspection ManualArrayToCollectionCopy - for ( T o : objects ) { - ret.add( o ); - } - return ret; - } - - public static List makeList(T... objects) { - return Arrays.asList( objects ); - } - - public static Map makeMap(Object... objects) { - final Map ret = new HashMap(); - // The number of objects must be divisable by 2. - //noinspection ManualArrayToCollectionCopy - for ( int i = 0; i < objects.length; i += 2 ) { - ret.put( objects[i], objects[i + 1] ); - } - return ret; - } - - public static boolean checkCollection(Collection list, T... objects) { - if ( list.size() != objects.length ) { - return false; - } - for ( T obj : objects ) { - if ( !list.contains( obj ) ) { - return false; - } - } - return true; - } - - public static List extractRevisionNumbers(List queryResults) { - final List result = new ArrayList(); - for ( Object queryResult : queryResults ) { - result.add( ((SequenceIdRevisionEntity) ((Object[]) queryResult)[1]).getId() ); - } - return result; - } - - public static Set extractModProperties(PersistentClass persistentClass) { - return extractModProperties( persistentClass, "_MOD" ); - } - - public static Set extractModProperties(PersistentClass persistentClass, String suffix) { - final Set result = new HashSet<>(); - final List props = persistentClass.getProperties(); - for ( Property property : props ) { - final String propertyName = property.getName(); - if ( propertyName.endsWith( suffix ) ) { - result.add( propertyName ); - } - } - return result; - } - - public static void assertCollectionsEqual(Collection expected, Collection actual) { - assertEquals( expected.size(), actual.size() ); - Iterator it = actual.iterator(); - for ( T obj : actual ) { - assertEquals( obj, it.next() ); - } - } - - public static MapBuilder mapBuilder() { - return new MashMapBuilderImpl(); - } - - public interface MapBuilder { - MapBuilder add(K key, E value); - Set> entries(); - Map map(); - } - - private static class MashMapBuilderImpl implements MapBuilder { - private final Map hashMap = new HashMap(); - - @Override - public MapBuilder add(K key, E value) { - hashMap.put( key, value ); - return this; - } - - @Override - public Set> entries() { - return hashMap.entrySet(); - } - - @Override - public Map map() { - return hashMap; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/Address.java deleted file mode 100644 index 2add39d94b1e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/Address.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.various; - -import java.util.Set; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.OneToMany; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class Address { - @Id - @GeneratedValue - private int id; - - @Audited - private String streetName; - - @Audited - private Integer houseNumber; - - @Audited - private Integer flatNumber; - - @Audited - @OneToMany(mappedBy = "address") - private Set persons; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getStreetName() { - return streetName; - } - - public void setStreetName(String streetName) { - this.streetName = streetName; - } - - public Integer getHouseNumber() { - return houseNumber; - } - - public void setHouseNumber(Integer houseNumber) { - this.houseNumber = houseNumber; - } - - public Integer getFlatNumber() { - return flatNumber; - } - - public void setFlatNumber(Integer flatNumber) { - this.flatNumber = flatNumber; - } - - public Set getPersons() { - return persons; - } - - public void setPersons(Set persons) { - this.persons = persons; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Address) ) { - return false; - } - - Address address = (Address) o; - - if ( id != address.id ) { - return false; - } - if ( flatNumber != null ? !flatNumber.equals( address.flatNumber ) : address.flatNumber != null ) { - return false; - } - if ( houseNumber != null ? !houseNumber.equals( address.houseNumber ) : address.houseNumber != null ) { - return false; - } - if ( streetName != null ? !streetName.equals( address.streetName ) : address.streetName != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = id; - result = 31 * result + (streetName != null ? streetName.hashCode() : 0); - result = 31 * result + (houseNumber != null ? houseNumber.hashCode() : 0); - result = 31 * result + (flatNumber != null ? flatNumber.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java deleted file mode 100644 index 4eab3cc6d28d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/ExportIdentifierTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.various; - -import java.util.HashSet; -import java.util.Set; - -import org.hibernate.boot.internal.BootstrapContextImpl; -import org.hibernate.boot.internal.MetadataBuilderImpl; -import org.hibernate.boot.model.naming.Identifier; -import org.hibernate.boot.model.relational.Database; -import org.hibernate.boot.model.relational.Namespace; -import org.hibernate.boot.model.relational.QualifiedNameImpl; -import org.hibernate.boot.registry.StandardServiceRegistry; -import org.hibernate.boot.registry.StandardServiceRegistryBuilder; -import org.hibernate.id.enhanced.SequenceStructure; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.junit4.BaseUnitTestCase; -import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -@RequiresDialectFeature(DialectChecks.SupportsSequences.class) -public class ExportIdentifierTest extends BaseUnitTestCase { - - @Test - @JiraKey( value = "HHH-12935" ) - public void testUniqueExportableIdentifier() { - final StandardServiceRegistry ssr = ServiceRegistryUtil.serviceRegistry(); - final MetadataBuilderImpl.MetadataBuildingOptionsImpl options = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( ssr ); - options.setBootstrapContext( new BootstrapContextImpl( ssr, options ) ); - final Database database = new Database( options ); - - database.locateNamespace( null, null ); - database.locateNamespace( Identifier.toIdentifier( "catalog1" ), null ); - database.locateNamespace( Identifier.toIdentifier( "catalog2" ), null ); - database.locateNamespace( null, Identifier.toIdentifier( "schema1" ) ); - database.locateNamespace( null, Identifier.toIdentifier( "schema2" ) ); - database.locateNamespace( Identifier.toIdentifier( "catalog_both_1" ), Identifier.toIdentifier( "schema_both_1" ) ); - database.locateNamespace( Identifier.toIdentifier( "catalog_both_2" ), Identifier.toIdentifier( "schema_both_2" ) ); - - try { - final Set exportIdentifierSet = new HashSet<>(); - int namespaceSize = 0; - for ( Namespace namespace : database.getNamespaces() ) { - final SequenceStructure sequenceStructure = new SequenceStructure( - "envers", - new QualifiedNameImpl( - namespace.getName(), - Identifier.toIdentifier( "aSequence" ) - ), - 1, - 1, - Integer.class - ); - sequenceStructure.registerExportables( database ); - exportIdentifierSet.add( namespace.getSequences().iterator().next().getExportIdentifier() ); - namespaceSize++; - } - assertEquals( 7, namespaceSize ); - assertEquals( 7, exportIdentifierSet.size() ); - } - finally { - StandardServiceRegistryBuilder.destroy( ssr ); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/HsqlTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/HsqlTest.java deleted file mode 100644 index c89d4fe4f4db..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/HsqlTest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.various; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; -import jakarta.persistence.Persistence; - -import org.hibernate.Session; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class HsqlTest { - /* - Query generated by Hibernate from an old demo, when criteria was used: (works) - - select - this_.id as id2_0_, - this_._revision as column2_2_0_, - this_._revision_type as column3_2_0_, - this_.name as name2_0_, - this_.surname as surname2_0_, - this_.address_id as address6_2_0_ - from - Person_versions this_ - where - this_._revision = ( - select - max(e2_._revision) as y0_ - from - Person_versions e2_ - where - e2_._revision<=1 - and this_.id=e2_.id - ) - and this_.id=1 - - Query generated by Hibernate from a new demo, when query generator is used: - (throws Column not found: ID in statement because of "person_ver0_.id=person_ver1_.id") - - select - person_ver0_.id as id3_, - person_ver0_._revision as column2_3_, - person_ver0_._revision_type as column3_3_, - person_ver0_.name as name3_, - person_ver0_.surname as surname3_, - person_ver0_.address_id as address6_3_ - from - Person_versions person_ver0_ - where - person_ver0_._revision_type<>2 - and person_ver0_._revision=( - select - max(person_ver1_._revision) - from - Person_versions person_ver1_ - where - person_ver1_._revision<=1 - and person_ver0_.id=person_ver1_.id - ) - and person_ver0_.id=1 - - Both queries work from HSQL console - (to run: java -cp hsqldb.jar org.hsqldb.util.DatabaseManager -user sa -url jdbc:hsqldb:file:/tmp/_versions_demo.db) - - TODO: post hibernate bug - */ - - public static void main(String[] argv) { - Map configurationOverrides = new HashMap(); - EntityManagerFactory emf = Persistence.createEntityManagerFactory( "ConsolePU", configurationOverrides ); - EntityManager entityManager = emf.createEntityManager(); - - populateTestData( entityManager ); - - entityManager.getTransaction().begin(); - - Session sesion = (Session) entityManager.getDelegate(); - System.out.println( - sesion.createQuery( - "select e from org.hibernate.envers.demo.Person_versions e " + - "where " + - "e.originalId._revision.id =" + - "(select max(e2.originalId._revision.id) " + - "from org.hibernate.envers.demo.Person_versions e2 " + - "where e.originalId.id = :p0) " - ) - .setParameter( "p0", 1 ) - .list() - ); - - entityManager.getTransaction().commit(); - - entityManager.close(); - emf.close(); - } - - private static void populateTestData(EntityManager entityManager) { - entityManager.getTransaction().begin(); - - if ( !hasData( entityManager ) ) { - Person p1 = new Person(); - - Address a1 = new Address(); - - p1.setName( "James" ); - p1.setSurname( "Bond" ); - p1.setAddress( a1 ); - - a1.setStreetName( "MI6" ); - a1.setHouseNumber( 18 ); - a1.setFlatNumber( 25 ); - a1.setPersons( new HashSet() ); - a1.getPersons().add( p1 ); - - entityManager.persist( a1 ); - - entityManager.persist( p1 ); - - System.out.println( "The DB was populated with example data." ); - } - - entityManager.getTransaction().commit(); - } - - private static boolean hasData(EntityManager entityManager) { - return (((Long) entityManager.createQuery( "select count(a) from Address a" ).getSingleResult()) + - ((Long) entityManager.createQuery( "select count(p) from Person p" ).getSingleResult())) > 0; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/Person.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/Person.java deleted file mode 100644 index cb4fbcfc4c4e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/various/Person.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.various; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.ManyToOne; - -import org.hibernate.envers.Audited; - -/** - * @author Adam Warski (adam at warski dot org) - */ -@Entity -public class Person { - @Id - @GeneratedValue - private int id; - - @Audited - private String name; - - @Audited - private String surname; - - @Audited - @ManyToOne - private Address address; - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getSurname() { - return surname; - } - - public void setSurname(String surname) { - this.surname = surname; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - public boolean equals(Object o) { - if ( this == o ) { - return true; - } - if ( !(o instanceof Person) ) { - return false; - } - - Person person = (Person) o; - - if ( id != person.id ) { - return false; - } - if ( name != null ? !name.equals( person.name ) : person.name != null ) { - return false; - } - if ( surname != null ? !surname.equals( person.surname ) : person.surname != null ) { - return false; - } - - return true; - } - - public int hashCode() { - int result; - result = id; - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (surname != null ? surname.hashCode() : 0); - return result; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/DialectAccess.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/DialectAccess.java deleted file mode 100644 index 3a39a7e3ec5e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/DialectAccess.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import org.hibernate.dialect.Dialect; - - -/** - * Contract for things that expose a Dialect - * - * @author Steve Ebersole - */ -public interface DialectAccess { - Dialect getDialect(); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EntityManagerFactoryAccess.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/EntityManagerFactoryAccess.java deleted file mode 100644 index bd873bbdb5d6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EntityManagerFactoryAccess.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import jakarta.persistence.EntityManagerFactory; - -import org.hibernate.dialect.Dialect; - -import org.hibernate.testing.orm.junit.DialectContext; - -/** - * Contract for things that expose an EntityManagerFactory - * - * @author Chris Cranford - */ -public interface EntityManagerFactoryAccess extends DialectAccess { - EntityManagerFactory getEntityManagerFactory(); - - @Override - default Dialect getDialect() { - return DialectContext.getDialect(); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryProducer.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryProducer.java deleted file mode 100644 index b724d7c57cab..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryProducer.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import jakarta.persistence.EntityManagerFactory; - -/** - * Envers contract for something that can build an EntityManagerFactory based on an audit strategy. - * - * @author Chris Cranford - */ -public interface EnversEntityManagerFactoryProducer { - EntityManagerFactory produceEntityManagerFactory(String auditStrategyName); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java deleted file mode 100644 index 36ffb590d503..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityManagerFactory; - -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -/** - * @author Chris Cranford - */ -public class EnversEntityManagerFactoryScope implements EntityManagerFactoryAccess { - private final EnversEntityManagerFactoryProducer entityManagerFactoryProducer; - private final Strategy auditStrategy; - - private EntityManagerFactory entityManagerFactory; - - public EnversEntityManagerFactoryScope(EnversEntityManagerFactoryProducer producer, Strategy auditStrategy) { - this.auditStrategy = auditStrategy; - this.entityManagerFactoryProducer = producer; - } - - public void releaseEntityManagerFactory() { - if ( entityManagerFactory != null ) { - entityManagerFactory.close(); - entityManagerFactory = null; - } - } - - @Override - public EntityManagerFactory getEntityManagerFactory() { - if ( entityManagerFactory == null || !entityManagerFactory.isOpen() ) { - final String strategy = auditStrategy.getSettingValue(); - entityManagerFactory = entityManagerFactoryProducer.produceEntityManagerFactory( strategy ); - } - return entityManagerFactory; - } - - public void inJtaTransaction(Consumer action) throws Exception { - inJtaTransaction( getEntityManagerFactory(), action ); - } - - public void inJtaTransaction(EntityManagerFactory factory, Consumer action) throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = factory.createEntityManager(); - try { - action.accept( entityManager ); - } - finally { - entityManager.close(); - TestingJtaPlatformImpl.tryCommit(); - } - } - - public void inTransaction(Consumer action) { - inTransaction( getEntityManagerFactory(), action ); - } - - public void inTransaction(EntityManagerFactory factory, Consumer action) { - EntityManager entityManager = factory.createEntityManager(); - try { - entityManager.getTransaction().begin(); - action.accept( entityManager ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } - - public void inTransaction(EntityManager entityManager, Consumer action) { - try { - entityManager.getTransaction().begin(); - action.accept( entityManager ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - } - - @SafeVarargs - public final void inTransactions(Consumer... actions) { - EntityManager entityManager = getEntityManagerFactory().createEntityManager(); - try { - for ( Consumer action : actions ) { - try { - entityManager.getTransaction().begin(); - action.accept( entityManager ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - } - } - finally { - entityManager.close(); - } - } - - @SafeVarargs - public final List inTransactionsWithTimeouts(int timeout, Consumer... actions) { - EntityManager entityManager = getEntityManagerFactory().createEntityManager(); - try { - final List timestamps = new ArrayList<>(); - - timestamps.add( System.currentTimeMillis() ); - for ( Consumer action : actions ) { - try { - Thread.sleep( 100 ); - entityManager.getTransaction().begin(); - action.accept( entityManager ); - entityManager.getTransaction().commit(); - timestamps.add( System.currentTimeMillis() ); - } - catch ( InterruptedException e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw new RuntimeException( "Failed to wait on timeout", e ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - } - - return timestamps; - } - finally { - entityManager.close(); - } - } - - public R inTransaction(Function action) { - return inTransaction( getEntityManagerFactory(), action ); - } - - public R inTransaction(EntityManagerFactory factory, Function action) { - EntityManager entityManager = factory.createEntityManager(); - try { - return inTransaction( entityManager, action ); - } - finally { - entityManager.close(); - } - } - - public R inTransaction(EntityManager entityManager, Function action) { - try { - entityManager.getTransaction().begin(); - R result = action.apply( entityManager ); - entityManager.getTransaction().commit(); - return result; - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - } - - public void inJPA(Consumer action) { - inJPA( getEntityManagerFactory(), action ); - } - - public R inJPA(Function action) { - return inJPA( getEntityManagerFactory(), action ); - } - - public void inJPA(EntityManagerFactory factory, Consumer action) { - EntityManager entityManager = factory.createEntityManager(); - try { - action.accept( entityManager ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } - - public R inJPA(EntityManagerFactory factory, Function action) { - EntityManager entityManager = factory.createEntityManager(); - try { - return action.apply( entityManager ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversSessionFactoryProducer.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversSessionFactoryProducer.java deleted file mode 100644 index 6cf38f3d8669..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversSessionFactoryProducer.java +++ /dev/null @@ -1,16 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import org.hibernate.SessionFactory; - -/** - * Envers contract for something that can build a SessionFactory based on an audit strategy. - * - * @author Chris Cranford - */ -public interface EnversSessionFactoryProducer { - SessionFactory produceSessionFactory(String auditStrategyName); -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/ExcludeAuditStrategy.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/ExcludeAuditStrategy.java deleted file mode 100644 index 49ffb5bbe4f6..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/ExcludeAuditStrategy.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import org.hibernate.envers.strategy.spi.AuditStrategy; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * Annotation used to indicate that a test should be excluded for a specific audit strategy. - * - * @author Chris Cranford - * @since 6.0 - */ -@Retention(RUNTIME) -@Target({METHOD, TYPE}) -public @interface ExcludeAuditStrategy { - /** - * The strategies against which to exclude the test. - * - * @return The strategies. - */ - Class[] value(); - - /** - * Comment describing the reason why the audit strategy is excluded. - * - * @return The comment. - */ - String comment() default ""; - - /** - * The key of a JIRA issue hwich relates to this restriction. - * - * @return The jira issue key. - */ - String jiraKey() default ""; -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/RequiresAuditStrategy.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/RequiresAuditStrategy.java deleted file mode 100644 index f3f3fd5f9e79..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/RequiresAuditStrategy.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import java.lang.annotation.Retention; -import java.lang.annotation.Target; - -import org.hibernate.envers.strategy.spi.AuditStrategy; - -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * Annotation used to indicate that a test should be run only for specific audit strategies. - * - * @author Chris Cranford - * @since 6.0 - */ -@Retention(RUNTIME) -@Target({ METHOD, TYPE }) -public @interface RequiresAuditStrategy { - /** - * The strategies against which to run the test - * - * @return The strategies - */ - Class[] value(); - - /** - * Comment describing the reason why the audit strategy is required. - * - * @return The comment - */ - String comment() default ""; - - /** - * The key of a JIRA issue which relates to this restriction. - * - * @return The jira issue key. - */ - String jiraKey() default ""; -} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/Strategy.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/Strategy.java deleted file mode 100644 index b8443d84be50..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/Strategy.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * SPDX-License-Identifier: LGPL-2.1-or-later - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.testing.envers; - -import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; -import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; - -/** - * @author Chris Cranford - */ -public enum Strategy { - DEFAULT( "", null, DefaultAuditStrategy.class ), - VALIDITY( "", ValidityAuditStrategy.class.getName(), ValidityAuditStrategy.class ); - - private final String displayName; - private final String settingValue; - private final Class strategyClass; - - Strategy(String displayName, String settingValue, Class strategyClass) { - this.displayName = displayName; - this.settingValue = settingValue; - this.strategyClass = strategyClass; - } - - public String getDisplayName() { - return displayName; - } - - public String getSettingValue() { - return settingValue; - } - - public boolean isStrategy(Class strategyClass) { - return strategyClass.isAssignableFrom( this.strategyClass ); - } -} diff --git a/hibernate-envers/src/test/resources/META-INF/services/org.junit.platform.launcher.LauncherSessionListener b/hibernate-envers/src/test/resources/META-INF/services/org.junit.platform.launcher.LauncherSessionListener deleted file mode 100644 index 8f96f0a8e1b0..000000000000 --- a/hibernate-envers/src/test/resources/META-INF/services/org.junit.platform.launcher.LauncherSessionListener +++ /dev/null @@ -1 +0,0 @@ -org.hibernate.testing.schema.CheckClearSchemaListener diff --git a/hibernate-envers/src/test/resources/hibernate.properties b/hibernate-envers/src/test/resources/hibernate.properties deleted file mode 100644 index 9bf6f31b39ec..000000000000 --- a/hibernate-envers/src/test/resources/hibernate.properties +++ /dev/null @@ -1,25 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -hibernate.dialect @db.dialect@ -hibernate.connection.driver_class @jdbc.driver@ -hibernate.connection.url @jdbc.url@ -hibernate.connection.username @jdbc.user@ -hibernate.connection.password @jdbc.pass@ -hibernate.connection.init_sql @connection.init_sql@ - -hibernate.connection.pool_size 2 - -hibernate.show_sql false - -hibernate.max_fetch_depth 5 - -hibernate.cache.region_prefix hibernate.test -hibernate.cache.region.factory_class org.hibernate.testing.cache.CachingRegionFactory - -hibernate.service.allow_crawling=false -## make sure we use bag semantics for "implicit" List mappings -hibernate.mapping.default_list_semantics=bag \ No newline at end of file diff --git a/hibernate-envers/src/test/resources/hibernate.test.session-cfg.xml b/hibernate-envers/src/test/resources/hibernate.test.session-cfg.xml deleted file mode 100644 index 9fb07e305deb..000000000000 --- a/hibernate-envers/src/test/resources/hibernate.test.session-cfg.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - create-drop - - false - false - - org.hibernate.dialect.H2Dialect - jdbc:h2:mem:envers;DB_CLOSE_DELAY=-1;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE - org.h2.Driver - sa - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/log4j2.properties b/hibernate-envers/src/test/resources/log4j2.properties deleted file mode 100644 index 9cc13eb844f3..000000000000 --- a/hibernate-envers/src/test/resources/log4j2.properties +++ /dev/null @@ -1,43 +0,0 @@ -# -# Hibernate, Relational Persistence for Idiomatic Java -# -# License: GNU Lesser General Public License (LGPL), version 2.1 or later. -# See the lgpl.txt file in the root directory or . -# -appender.stdout.type=Console -appender.stdout.name=STDOUT -appender.stdout.layout.type=PatternLayout -appender.stdout.layout.pattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n - -appender.ddl.type=Console -appender.ddl.name=DDL -appender.ddl.layout.type=PatternLayout -appender.ddl.layout.pattern=%d{ABSOLUTE} %5p %c:%L - %m%n - -rootLogger.level=info -rootLogger.appenderRef.stdout.ref=STDOUT - -logger.test.name=org.hibernate.test -logger.test.level=info - -# SQL Logging - HHH-6833 -logger.sql.name=org.hibernate.SQL -logger.sql.level=debug - -logger.hbm2ddl.name=org.hibernate.tool.hbm2ddl -logger.hbm2ddl.level=trace -logger.hbm2ddl.appenderRef.stdout.ref=DDL - -logger.type-basic-binder.name=org.hibernate.type.descriptor.jdbc.BasicBinder -logger.type-basic-binder.level=trace -logger.type-basic-extractor.name=org.hibernate.type.descriptor.jdbc.BasicExtractor -logger.type-basic-extractor.level=trace - -logger.jdbc-bind.name=org.hibernate.orm.jdbc.bind -logger.jdbc-bind.level=trace - -logger.jdbc-extract.name=org.hibernate.orm.jdbc.extract -logger.jdbc-extract.level=trace - -logger.envers-mappings-producer.name=org.hibernate.envers.boot.internal.AdditionalMappingContributorImpl -logger.envers-mappings-producer.level=trace diff --git a/hibernate-envers/src/test/resources/mappings/collections/Category.hbm.xml b/hibernate-envers/src/test/resources/mappings/collections/Category.hbm.xml deleted file mode 100644 index 00d174ce2490..000000000000 --- a/hibernate-envers/src/test/resources/mappings/collections/Category.hbm.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - category_id_seq - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/collections/Item.hbm.xml b/hibernate-envers/src/test/resources/mappings/collections/Item.hbm.xml deleted file mode 100644 index c49a60e13ef8..000000000000 --- a/hibernate-envers/src/test/resources/mappings/collections/Item.hbm.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - item_id_seq - - - - - \ No newline at end of file diff --git a/hibernate-envers/src/test/resources/mappings/components/UniquePropsEntity.hbm.xml b/hibernate-envers/src/test/resources/mappings/components/UniquePropsEntity.hbm.xml deleted file mode 100644 index 4028c2efbdd8..000000000000 --- a/hibernate-envers/src/test/resources/mappings/components/UniquePropsEntity.hbm.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/components/UniquePropsNotAuditedEntity.hbm.xml b/hibernate-envers/src/test/resources/mappings/components/UniquePropsNotAuditedEntity.hbm.xml deleted file mode 100644 index b3ca1c199d85..000000000000 --- a/hibernate-envers/src/test/resources/mappings/components/UniquePropsNotAuditedEntity.hbm.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml deleted file mode 100644 index cf2b05b047be..000000000000 --- a/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity$E1 - - - - - - - org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity$E2 - - - - \ No newline at end of file diff --git a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml b/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml deleted file mode 100644 index 6d140f0b02e6..000000000000 --- a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAudited.hbm.xml b/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAudited.hbm.xml deleted file mode 100644 index 56ca3595293a..000000000000 --- a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAudited.hbm.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapNotAudited.hbm.xml b/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapNotAudited.hbm.xml deleted file mode 100644 index 9b1159985018..000000000000 --- a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapNotAudited.hbm.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapSanityCheck.hbm.xml b/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapSanityCheck.hbm.xml deleted file mode 100644 index 4a4e20a6fe78..000000000000 --- a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapSanityCheck.hbm.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/dynamicmodel/dynamicModel.hbm.xml b/hibernate-envers/src/test/resources/mappings/dynamicmodel/dynamicModel.hbm.xml deleted file mode 100644 index 7208af5dac7d..000000000000 --- a/hibernate-envers/src/test/resources/mappings/dynamicmodel/dynamicModel.hbm.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/entityNames/auditedEntity/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/entityNames/auditedEntity/mappings.hbm.xml deleted file mode 100644 index 432dd862b624..000000000000 --- a/hibernate-envers/src/test/resources/mappings/entityNames/auditedEntity/mappings.hbm.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/entityNames/manyToManyAudited/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/entityNames/manyToManyAudited/mappings.hbm.xml deleted file mode 100644 index 7052477f4848..000000000000 --- a/hibernate-envers/src/test/resources/mappings/entityNames/manyToManyAudited/mappings.hbm.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/entityNames/oneToManyAudited/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/entityNames/oneToManyAudited/mappings.hbm.xml deleted file mode 100644 index b4863642f624..000000000000 --- a/hibernate-envers/src/test/resources/mappings/entityNames/oneToManyAudited/mappings.hbm.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/entityNames/oneToManyNotAudited/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/entityNames/oneToManyNotAudited/mappings.hbm.xml deleted file mode 100644 index 336446e84315..000000000000 --- a/hibernate-envers/src/test/resources/mappings/entityNames/oneToManyNotAudited/mappings.hbm.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml deleted file mode 100644 index 0b4262f0094d..000000000000 --- a/hibernate-envers/src/test/resources/mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/entityNames/singleAssociatedNotAudited/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/entityNames/singleAssociatedNotAudited/mappings.hbm.xml deleted file mode 100644 index 78b47e8a01ea..000000000000 --- a/hibernate-envers/src/test/resources/mappings/entityNames/singleAssociatedNotAudited/mappings.hbm.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/joinedAllAuditedMappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/joinedAllAuditedMappings.hbm.xml deleted file mode 100644 index cfd1021c43ce..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/joinedAllAuditedMappings.hbm.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/joinedPropertiesAudited2Mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/joinedPropertiesAudited2Mappings.hbm.xml deleted file mode 100644 index 71f79d51d41c..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/joinedPropertiesAudited2Mappings.hbm.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/joinedPropertiesAuditedMappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/joinedPropertiesAuditedMappings.hbm.xml deleted file mode 100644 index 446fe9291b3b..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/joinedPropertiesAuditedMappings.hbm.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/subclassAllAuditedMappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/subclassAllAuditedMappings.hbm.xml deleted file mode 100644 index ed4fe79f3286..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/subclassAllAuditedMappings.hbm.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/subclassPropertiesAudited2Mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/subclassPropertiesAudited2Mappings.hbm.xml deleted file mode 100644 index 24e12dc1446e..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/subclassPropertiesAudited2Mappings.hbm.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/subclassPropertiesAuditedMappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/subclassPropertiesAuditedMappings.hbm.xml deleted file mode 100644 index f6925e39200d..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/subclassPropertiesAuditedMappings.hbm.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/unionAllAuditedMappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/unionAllAuditedMappings.hbm.xml deleted file mode 100644 index 7f7463a51191..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/unionAllAuditedMappings.hbm.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/unionPropertiesAudited2Mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/unionPropertiesAudited2Mappings.hbm.xml deleted file mode 100644 index 4b1d8691c9ac..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/unionPropertiesAudited2Mappings.hbm.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/interfaces/unionPropertiesAuditedMappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/interfaces/unionPropertiesAuditedMappings.hbm.xml deleted file mode 100644 index 4fd1fdbba5c7..000000000000 --- a/hibernate-envers/src/test/resources/mappings/interfaces/unionPropertiesAuditedMappings.hbm.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/manyToMany/inverseToSuperclass/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/manyToMany/inverseToSuperclass/mappings.hbm.xml deleted file mode 100644 index 23df10de96b5..000000000000 --- a/hibernate-envers/src/test/resources/mappings/manyToMany/inverseToSuperclass/mappings.hbm.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/oneToMany/inverseToSuperclass/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/oneToMany/inverseToSuperclass/mappings.hbm.xml deleted file mode 100644 index 76b2d419d64d..000000000000 --- a/hibernate-envers/src/test/resources/mappings/oneToMany/inverseToSuperclass/mappings.hbm.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/hibernate-envers/src/test/resources/mappings/oneToOne/bidirectional/eagerLoading.hbm.xml b/hibernate-envers/src/test/resources/mappings/oneToOne/bidirectional/eagerLoading.hbm.xml deleted file mode 100644 index 5f4d86a7b8ae..000000000000 --- a/hibernate-envers/src/test/resources/mappings/oneToOne/bidirectional/eagerLoading.hbm.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/hibernate-envers/src/test/resources/org/hibernate/orm/test/envers/integration/blob/blob.txt b/hibernate-envers/src/test/resources/org/hibernate/orm/test/envers/integration/blob/blob.txt deleted file mode 100644 index 7a1354040f95..000000000000 --- a/hibernate-envers/src/test/resources/org/hibernate/orm/test/envers/integration/blob/blob.txt +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - create-drop - - false - false - - org.hibernate.dialect.H2Dialect - jdbc:h2:mem:envers - org.h2.Driver - sa - - - - - - - - - - - diff --git a/hibernate-envers/src/test_legacy/org/hibernate/envers/test/integration/basic/ClassicQueryTranslatorFactoryTest.java b/hibernate-envers/src/test_legacy/org/hibernate/envers/test/integration/basic/ClassicQueryTranslatorFactoryTest.java deleted file mode 100644 index e0a5f3793183..000000000000 --- a/hibernate-envers/src/test_legacy/org/hibernate/envers/test/integration/basic/ClassicQueryTranslatorFactoryTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later. - * See the lgpl.txt file in the root directory or . - */ -package org.hibernate.orm.test.envers.integration.basic; - -import java.util.Map; - -import org.hibernate.cfg.Environment; - -import org.hibernate.testing.orm.junit.JiraKey; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-8497") -public class ClassicQueryTranslatorFactoryTest extends Simple { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( Environment.QUERY_TRANSLATOR, ClassicQueryTranslatorFactory.class.getName() ); - } -} diff --git a/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle b/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle index 994c4526826a..dd008c1e9722 100644 --- a/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle +++ b/hibernate-integrationtest-java-modules/hibernate-integrationtest-java-modules.gradle @@ -18,7 +18,6 @@ java.modularity.inferModulePath = true dependencies { api project( ':hibernate-core' ) - api project( ':hibernate-envers' ) implementation project( ':hibernate-scan-jandex' ) //Provide the jakarta.cdi module, as it's required by module jakarta.transaction //but not provided as transitive dependency of Narayana. diff --git a/hibernate-integrationtest-java-modules/src/test/java/module-info.java b/hibernate-integrationtest-java-modules/src/test/java/module-info.java index 6386d86ec7a5..0455b0c8b024 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/module-info.java +++ b/hibernate-integrationtest-java-modules/src/test/java/module-info.java @@ -18,7 +18,6 @@ // for modules in the current project. // Everything should work fine when building from the command line, though. requires org.hibernate.orm.core; - requires org.hibernate.orm.envers; // Transitive dependencies that leak through the Hibernate ORM API requires java.sql; diff --git a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java index 8a425b42afb0..7fe2a8a07069 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java +++ b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/JavaModulePathIT.java @@ -8,7 +8,6 @@ import java.util.Arrays; import org.hibernate.Session; -import org.hibernate.envers.boot.internal.EnversIntegrator; import org.hibernate.orm.integrationtest.java.module.test.service.AuthorService; import org.junit.Assert; @@ -51,7 +50,6 @@ public void integrator() { checkIsInModulePath( Object.class ); checkIsInModulePath( AuthorService.class ); checkIsInModulePath( Session.class ); - checkIsInModulePath( EnversIntegrator.class ); AuthorService service = new AuthorService(); service.add( "foo", 7 ); @@ -59,10 +57,6 @@ public void integrator() { service.add( "foo bar", 777 ); service.update( "foo", 8 ); - - assertEquals( Arrays.asList( 1, 4 ), service.getRevisions( "foo" ) ); - assertEquals( Arrays.asList( 2 ), service.getRevisions( "bar" ) ); - assertEquals( Arrays.asList( 3 ), service.getRevisions( "foo bar" ) ); } private void checkIsInModulePath(Class clazz) { diff --git a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/entity/Author.java b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/entity/Author.java index bc4dd35e6bba..435c30162a45 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/entity/Author.java +++ b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/entity/Author.java @@ -10,10 +10,8 @@ import jakarta.persistence.Id; import org.hibernate.annotations.NaturalId; -import org.hibernate.envers.Audited; @Entity -@Audited public class Author { @Id diff --git a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/service/AuthorService.java b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/service/AuthorService.java index b82192412418..bf013b1bb1db 100644 --- a/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/service/AuthorService.java +++ b/hibernate-integrationtest-java-modules/src/test/java/org/hibernate/orm/integrationtest/java/module/test/service/AuthorService.java @@ -10,8 +10,6 @@ import org.hibernate.Session; import org.hibernate.SessionFactory; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.integrationtest.java.module.test.entity.Author; public class AuthorService implements AutoCloseable { @@ -93,8 +91,7 @@ public Integer getFavoriteNumber(String name) { public List getRevisions(String name) { try ( Session session = sessionFactory.openSession() ) { Author entity = session.bySimpleNaturalId( Author.class ).getReference( name ); - AuditReader auditReader = AuditReaderFactory.get( session ); - return auditReader.getRevisions( Author.class, entity.getId() ); + return null; } } diff --git a/hibernate-platform/hibernate-platform.gradle b/hibernate-platform/hibernate-platform.gradle index 74f2949fc25c..0596d04f5222 100644 --- a/hibernate-platform/hibernate-platform.gradle +++ b/hibernate-platform/hibernate-platform.gradle @@ -11,7 +11,6 @@ dependencies { api project( ":hibernate-core" ) api project( ":hibernate-testing" ) - api project( ":hibernate-envers" ) api project( ":hibernate-spatial" ) api project( ":hibernate-community-dialects" ) api project( ":hibernate-scan-jandex" ) diff --git a/settings.gradle b/settings.gradle index bc43f5bcdd56..dbde5be85249 100644 --- a/settings.gradle +++ b/settings.gradle @@ -307,12 +307,10 @@ buildCache { include 'hibernate-core' include 'hibernate-testing' +include 'hibernate-platform' -include 'hibernate-envers' include 'hibernate-spatial' -include 'hibernate-platform' - include 'hibernate-community-dialects' include 'hibernate-vector'