HHH-17772 map @Save lifecycle annotation to upsert()

This commit is contained in:
Gavin King 2024-02-23 21:46:18 +01:00
parent 83595ea461
commit 9c707dd4e8
3 changed files with 14 additions and 5 deletions

View File

@ -76,6 +76,7 @@ import static org.hibernate.jpamodelgen.util.Constants.JD_INSERT;
import static org.hibernate.jpamodelgen.util.Constants.JD_ORDER; import static org.hibernate.jpamodelgen.util.Constants.JD_ORDER;
import static org.hibernate.jpamodelgen.util.Constants.JD_QUERY; import static org.hibernate.jpamodelgen.util.Constants.JD_QUERY;
import static org.hibernate.jpamodelgen.util.Constants.JD_REPOSITORY; import static org.hibernate.jpamodelgen.util.Constants.JD_REPOSITORY;
import static org.hibernate.jpamodelgen.util.Constants.JD_SAVE;
import static org.hibernate.jpamodelgen.util.Constants.JD_SORT; import static org.hibernate.jpamodelgen.util.Constants.JD_SORT;
import static org.hibernate.jpamodelgen.util.Constants.JD_UPDATE; import static org.hibernate.jpamodelgen.util.Constants.JD_UPDATE;
import static org.hibernate.jpamodelgen.util.Constants.MUTINY_SESSION; import static org.hibernate.jpamodelgen.util.Constants.MUTINY_SESSION;
@ -306,7 +307,7 @@ public class AnnotationMetaEntity extends AnnotationMeta {
else if ( containsAnnotation( method, HQL, SQL, JD_QUERY, FIND, JD_FIND ) ) { else if ( containsAnnotation( method, HQL, SQL, JD_QUERY, FIND, JD_FIND ) ) {
queryMethods.add( method ); queryMethods.add( method );
} }
else if ( containsAnnotation( method, JD_INSERT, JD_UPDATE, JD_DELETE ) ) { else if ( containsAnnotation( method, JD_INSERT, JD_UPDATE, JD_DELETE, JD_SAVE ) ) {
lifecycleMethods.add( method ); lifecycleMethods.add( method );
} }
} }
@ -487,7 +488,7 @@ public class AnnotationMetaEntity extends AnnotationMeta {
private void addLifecycleMethods(List<ExecutableElement> queryMethods) { private void addLifecycleMethods(List<ExecutableElement> queryMethods) {
for ( ExecutableElement method : queryMethods) { for ( ExecutableElement method : queryMethods) {
if ( method.getModifiers().contains(Modifier.ABSTRACT) ) { if ( method.getModifiers().contains(Modifier.ABSTRACT) ) {
if ( hasAnnotation( method, JD_INSERT, JD_UPDATE, JD_DELETE ) ) { if ( hasAnnotation( method, JD_INSERT, JD_UPDATE, JD_DELETE, JD_SAVE ) ) {
addLifecycleMethod( method ); addLifecycleMethod( method );
} }
} }
@ -650,6 +651,9 @@ public class AnnotationMetaEntity extends AnnotationMeta {
else if ( hasAnnotation(method, JD_DELETE) ) { else if ( hasAnnotation(method, JD_DELETE) ) {
return "delete"; return "delete";
} }
else if ( hasAnnotation(method, JD_SAVE) ) {
return "upsert";
}
else { else {
throw new AssertionFailure("Unrecognized lifecycle operation"); throw new AssertionFailure("Unrecognized lifecycle operation");
} }

View File

@ -67,6 +67,7 @@ public final class Constants {
public static final String JD_INSERT = "jakarta.data.repository.Insert"; public static final String JD_INSERT = "jakarta.data.repository.Insert";
public static final String JD_UPDATE = "jakarta.data.repository.Update"; public static final String JD_UPDATE = "jakarta.data.repository.Update";
public static final String JD_DELETE = "jakarta.data.repository.Delete"; public static final String JD_DELETE = "jakarta.data.repository.Delete";
public static final String JD_SAVE = "jakarta.data.repository.Save";
public static final String JD_LIMIT = "jakarta.data.Limit"; public static final String JD_LIMIT = "jakarta.data.Limit";
public static final String JD_SORT = "jakarta.data.Sort"; public static final String JD_SORT = "jakarta.data.Sort";
public static final String JD_ORDER = "jakarta.data.Order"; public static final String JD_ORDER = "jakarta.data.Order";

View File

@ -11,6 +11,7 @@ import jakarta.data.repository.OrderBy;
import jakarta.data.repository.Param; import jakarta.data.repository.Param;
import jakarta.data.repository.Query; import jakarta.data.repository.Query;
import jakarta.data.repository.Repository; import jakarta.data.repository.Repository;
import jakarta.data.repository.Save;
import jakarta.data.repository.Update; import jakarta.data.repository.Update;
import org.hibernate.StatelessSession; import org.hibernate.StatelessSession;
@ -49,6 +50,9 @@ public interface BookAuthorRepository {
@Delete @Delete
void delete(Book book); void delete(Book book);
@Save
void createOrUpdate(Book book);
@Query("from Book where title like :title") @Query("from Book where title like :title")
List<Book> books0(String title); List<Book> books0(String title);