Skip to content

HHH-19324 - Switch tests using hbm.xml to use mapping.xml #10116

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@
import java.lang.annotation.Target;
import java.lang.annotation.Retention;

import org.hibernate.Incubating;

import jakarta.persistence.ManyToMany;
import jakarta.persistence.OneToMany;

/**
* Allows to specify the target of a foreign-key using a "target attribute" as opposed to
Expand Down Expand Up @@ -56,14 +53,19 @@
* }
* </pre>
*
* @apiNote As Hibernate allows {@linkplain OneToMany#mappedBy()} and {@linkplain ManyToMany#mappedBy()} to refer
* to basic and embedded attributes already, this annotation is mainly useful for mapping to-one associations.
* @see jakarta.persistence.JoinColumn
* @see JoinFormula
*
* @apiNote This was originally added to support conversions from Hibernate's legacy
* {@code hbm.xml} mapping format.
*
* @deprecated Use {@linkplain jakarta.persistence.JoinColumn}, or similar, instead.
*
* @author Steve Ebersole
*/
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Incubating
@Deprecated(forRemoval = true)
public @interface PropertyRef {
/**
* The name of the attribute on the target entity which defines the foreign-key target.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,8 @@ public static void processCompleteEntity(
DynamicModelHelper.prepareDynamicClass( classDetails, jaxbEntity, xmlDocumentContext );
}
else {
memberAdjuster = ManagedTypeProcessor::adjustCompleteNonDynamicTypeMember;
final String className = XmlProcessingHelper.determineClassName( jaxbRoot, jaxbEntity );
memberAdjuster = ManagedTypeProcessor::adjustCompleteNonDynamicTypeMember;
classDetails = (MutableClassDetails) classDetailsRegistry.resolveClassDetails( className );
classAccessType = coalesce(
jaxbEntity.getAccess(),
Expand Down Expand Up @@ -688,6 +688,8 @@ private static void processEmbeddableMetadata(
xmlDocumentContext
);
}

renderClass( classDetails, xmlDocumentContext );
}

public static void processOverrideEmbeddable(List<XmlProcessingResult.OverrideTuple<JaxbEmbeddableImpl>> embeddableOverrides) {
Expand All @@ -712,6 +714,8 @@ public static void processOverrideEmbeddable(List<XmlProcessingResult.OverrideTu
xmlDocumentContext
);
}

renderClass( classDetails, xmlDocumentContext );
} );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
*/
package org.hibernate.orm.test.bytecode.enhancement.cascade.circle;

import java.util.Iterator;

import jakarta.persistence.PersistenceException;
import org.hibernate.JDBCException;
import org.hibernate.PropertyValueException;
import org.hibernate.Session;
Expand All @@ -14,43 +13,43 @@
import org.hibernate.orm.test.cascade.circle.Route;
import org.hibernate.orm.test.cascade.circle.Tour;
import org.hibernate.orm.test.cascade.circle.Transport;

import org.hibernate.testing.orm.junit.SessionFactoryScope;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import jakarta.persistence.PersistenceException;
import java.util.Iterator;

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.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

/**
* @author Andrea Boriero
*/
@SuppressWarnings("JUnitMalformedDeclaration")
public abstract class AbstractMultiPathCircleCascadeTest {
private interface EntityOperation {
boolean isLegacy();

@SuppressWarnings("UnusedReturnValue")
Object doEntityOperation(Object entity, Session s);
}

private static EntityOperation MERGE_OPERATION =
new EntityOperation() {
@Override
public boolean isLegacy() {
return false;
}
private static final EntityOperation MERGE_OPERATION = new EntityOperation() {
@Override
public boolean isLegacy() {
return false;
}

@Override
public Object doEntityOperation(Object entity, Session s) {
return s.merge( entity );
}
};
@Override
public Object doEntityOperation(Object entity, Session s) {
return s.merge( entity );
}
};

@Test
public void testMergeEntityWithNonNullableTransientEntity(SessionFactoryScope scope) {
Expand All @@ -61,7 +60,7 @@ private void testEntityWithNonNullableTransientEntity(SessionFactoryScope scope,

Route route = getUpdatedDetachedEntity( scope );

Node node = (Node) route.getNodes().iterator().next();
Node node = route.getNodes().iterator().next();
route.getNodes().remove( node );

Route routeNew = new Route();
Expand Down Expand Up @@ -101,7 +100,7 @@ public void testMergeEntityWithNonNullableEntityNull(SessionFactoryScope scope)
private void testEntityWithNonNullableEntityNull(SessionFactoryScope scope, EntityOperation operation) {
Route route = getUpdatedDetachedEntity( scope );

Node node = (Node) route.getNodes().iterator().next();
Node node = route.getNodes().iterator().next();
route.getNodes().remove( node );
node.setRoute( null );

Expand Down Expand Up @@ -136,7 +135,7 @@ public void testMergeEntityWithNonNullablePropSetToNull(SessionFactoryScope scop
void testEntityWithNonNullablePropSetToNull(SessionFactoryScope scope, EntityOperation operation) {
final Route route = getUpdatedDetachedEntity( scope );;

Node node = (Node) route.getNodes().iterator().next();
Node node = route.getNodes().iterator().next();
node.setName( null );

scope.inSession(
Expand Down Expand Up @@ -186,7 +185,7 @@ private void testRoute( EntityOperation operation, SessionFactoryScope scope) {

scope.inTransaction(
session -> {
Route route = session.get( Route.class, r.getRouteID() );
Route route = session.find( Route.class, r.getRouteID() );
checkResults( route, true );
}
);
Expand All @@ -205,14 +204,14 @@ private void testPickupNode(SessionFactoryScope scope, EntityOperation operation

scope.inTransaction(
session -> {
Iterator it = r.getNodes().iterator();
Node node = (Node) it.next();
Iterator<Node> it = r.getNodes().iterator();
Node node = it.next();
Node pickupNode;
if ( node.getName().equals( "pickupNodeB" ) ) {
pickupNode = node;
}
else {
node = (Node) it.next();
node = it.next();
assertEquals( "pickupNodeB", node.getName() );
pickupNode = node;
}
Expand All @@ -226,7 +225,7 @@ private void testPickupNode(SessionFactoryScope scope, EntityOperation operation

scope.inTransaction(
session -> {
Route route = session.get( Route.class, r.getRouteID() );
Route route = session.find( Route.class, r.getRouteID() );
checkResults( route, false );
}
);
Expand All @@ -245,14 +244,14 @@ private void testDeliveryNode(SessionFactoryScope scope, EntityOperation operati

scope.inTransaction(
session -> {
Iterator it = r.getNodes().iterator();
Node node = (Node) it.next();
Iterator<Node> it = r.getNodes().iterator();
Node node = it.next();
Node deliveryNode;
if ( node.getName().equals( "deliveryNodeB" ) ) {
deliveryNode = node;
}
else {
node = (Node) it.next();
node = it.next();
assertEquals( "deliveryNodeB", node.getName() );
deliveryNode = node;
}
Expand All @@ -267,7 +266,7 @@ private void testDeliveryNode(SessionFactoryScope scope, EntityOperation operati

scope.inTransaction(
session -> {
Route route = session.get( Route.class, r.getRouteID() );
Route route = session.find( Route.class, r.getRouteID() );
checkResults( route, false );
}
);
Expand Down Expand Up @@ -295,7 +294,7 @@ private void testTour(SessionFactoryScope scope, EntityOperation operation) {

scope.inTransaction(
session -> {
Route route = session.get( Route.class, r.getRouteID() );
Route route = session.find( Route.class, r.getRouteID() );
checkResults( route, false );
}
);
Expand Down Expand Up @@ -332,61 +331,12 @@ private void testTransport(SessionFactoryScope scope, EntityOperation operation)

scope.inTransaction(
session -> {
Route route = session.get( Route.class, r.getRouteID() );
Route route = session.find( Route.class, r.getRouteID() );
checkResults( route, false );
}
);
}

// private Node getSimpleUpdatedDetachedEntity() {
//
// Node deliveryNode = new Node();
// deliveryNode.setName( "deliveryNodeB" );
// return deliveryNode;
// }

// private Route createEntity() {
//
// Route route = new Route();
// route.setName( "routeA" );
//
// route.setName( "new routeA" );
// route.setTransientField( "sfnaouisrbn" );
//
// Tour tour = new Tour();
// tour.setName( "tourB" );
//
// Transport transport = new Transport();
// transport.setName( "transportB" );
//
// Node pickupNode = new Node();
// pickupNode.setName( "pickupNodeB" );
//
// Node deliveryNode = new Node();
// deliveryNode.setName( "deliveryNodeB" );
//
// pickupNode.setRoute( route );
// pickupNode.setTour( tour );
// pickupNode.getPickupTransports().add( transport );
// pickupNode.setTransientField( "pickup node aaaaaaaaaaa" );
//
// deliveryNode.setRoute( route );
// deliveryNode.setTour( tour );
// deliveryNode.getDeliveryTransports().add( transport );
// deliveryNode.setTransientField( "delivery node aaaaaaaaa" );
//
// tour.getNodes().add( pickupNode );
// tour.getNodes().add( deliveryNode );
//
// route.getNodes().add( pickupNode );
// route.getNodes().add( deliveryNode );
//
// transport.setPickupNode( pickupNode );
// transport.setDeliveryNode( deliveryNode );
// transport.setTransientField( "aaaaaaaaaaaaaa" );
//
// return route;
// }

private Route getUpdatedDetachedEntity(SessionFactoryScope scope) {

Expand Down Expand Up @@ -439,14 +389,7 @@ private Route getUpdatedDetachedEntity(SessionFactoryScope scope) {

@AfterEach
public void cleanup(SessionFactoryScope scope) {
scope.inTransaction(
session -> {
session.createQuery( "delete from Transport" );
session.createQuery( "delete from Tour" );
session.createQuery( "delete from Node" );
session.createQuery( "delete from Route" );
}
);
scope.dropData();
}

private void checkResults(Route route, boolean isRouteUpdated) {
Expand All @@ -458,8 +401,8 @@ private void checkResults(Route route, boolean isRouteUpdated) {
assertEquals( 2, route.getNodes().size() );
Node deliveryNode = null;
Node pickupNode = null;
for ( Iterator it = route.getNodes().iterator(); it.hasNext(); ) {
Node node = (Node) it.next();
for ( Iterator<Node> it = route.getNodes().iterator(); it.hasNext(); ) {
Node node = it.next();
if ( "deliveryNodeB".equals( node.getName() ) ) {
deliveryNode = node;
}
Expand All @@ -484,15 +427,13 @@ else if ( "pickupNodeB".equals( node.getName() ) ) {
assertNotNull( pickupNode.getTour() );
assertEquals( "node original value", pickupNode.getTransientField() );

assertTrue( !deliveryNode.getNodeID().equals( pickupNode.getNodeID() ) );
assertNotEquals( deliveryNode.getNodeID(), pickupNode.getNodeID() );
assertSame( deliveryNode.getTour(), pickupNode.getTour() );
assertSame(
deliveryNode.getDeliveryTransports().iterator().next(),
pickupNode.getPickupTransports().iterator().next()
);
assertSame( deliveryNode.getDeliveryTransports().iterator().next(),
pickupNode.getPickupTransports().iterator().next() );

Tour tour = deliveryNode.getTour();
Transport transport = (Transport) deliveryNode.getDeliveryTransports().iterator().next();
Transport transport = deliveryNode.getDeliveryTransports().iterator().next();

assertEquals( "tourB", tour.getName() );
assertEquals( 2, tour.getNodes().size() );
Expand Down Expand Up @@ -526,7 +467,7 @@ private void testData3Nodes(SessionFactoryScope scope, EntityOperation operation

scope.inTransaction(
session -> {
Route route = session.get( Route.class, r.getRouteID() );
Route route = session.find( Route.class, r.getRouteID() );
route.setName( "new routA" );

route.setTransientField( "sfnaouisrbn" );
Expand Down Expand Up @@ -602,7 +543,7 @@ protected void checkExceptionFromNullValueForNonNullable(
}
}
else {
Assertions.assertTrue( ( ex instanceof JDBCException ) || ( ex.getCause() instanceof JDBCException ), ex.getMessage() );
assertTrue( ( ex instanceof JDBCException ) || ( ex.getCause() instanceof JDBCException ), ex.getMessage() );
}
}
else {
Expand All @@ -621,16 +562,16 @@ protected void clearCounts(SessionFactoryScope scope) {

protected void assertInsertCount(SessionFactoryScope scope, int expected) {
int inserts = (int) scope.getSessionFactory().getStatistics().getEntityInsertCount();
Assertions.assertEquals( expected, inserts, "unexpected insert count" );
assertEquals( expected, inserts, "unexpected insert count" );
}

protected void assertUpdateCount(SessionFactoryScope scope, int expected) {
int updates = (int) scope.getSessionFactory().getStatistics().getEntityUpdateCount();
Assertions.assertEquals( expected, updates, "unexpected update counts" );
assertEquals( expected, updates, "unexpected update counts" );
}

protected void assertDeleteCount(SessionFactoryScope scope, int expected) {
int deletes = (int) scope.getSessionFactory().getStatistics().getEntityDeleteCount();
Assertions.assertEquals( expected, deletes, "unexpected delete counts" );
assertEquals( expected, deletes, "unexpected delete counts" );
}
}
Loading
Loading