@@ -766,23 +766,28 @@ private void setupSession() {
766
766
final ExecutableElement getter = findSessionGetter ( element );
767
767
if ( getter != null ) {
768
768
// Never make a DAO for Panache subtypes
769
- if ( !isPanacheType ( element ) ) {
769
+ if ( !isPanacheType ( element ) && ! isPanache2Type ( element ) ) {
770
770
repository = true ;
771
771
sessionType = addDaoConstructor ( getter );
772
772
}
773
- else {
774
- // For Panache subtypes, we look at the session type, but no DAO,
773
+ else if ( ! isPanache2Repository ( element ) && ! isPanache2Type ( element ) ) {
774
+ // For Panache 1 subtypes, we look at the session type, but no DAO,
775
775
// we want static methods
776
776
sessionType = fullReturnType (getter );
777
777
}
778
+ else {
779
+ // For Panache 2 repositories we want a repository
780
+ repository = true ;
781
+ sessionType = setupQuarkusDaoConstructor ( getter , element );
782
+ }
778
783
}
779
784
else if ( element .getKind () == ElementKind .INTERFACE
780
785
&& !jakartaDataRepository
781
- && ( context .usesQuarkusOrm () || context .usesQuarkusReactive () ) ) {
786
+ && ( context .usesQuarkusOrm () || context .usesQuarkusReactive () || context . usesQuarkusPanache2 () ) ) {
782
787
// if we don't have a getter, and not a JD repository, but we're in Quarkus,
783
788
// we know how to find the default sessions
784
789
repository = true ;
785
- sessionType = setupQuarkusDaoConstructor ();
790
+ sessionType = setupQuarkusDaoConstructor ( null , element );
786
791
}
787
792
if ( !repository && jakartaDataRepository ) {
788
793
repository = true ;
@@ -889,6 +894,19 @@ private boolean isReactivePanacheType(TypeElement type) {
889
894
|| extendsClass ( type , PANACHE_REACTIVE_ENTITY_BASE );
890
895
}
891
896
897
+ private boolean isPanache2Type (TypeElement type ) {
898
+ return implementsInterface ( type , PANACHE2_ENTITY_MARKER )
899
+ || isPanache2Repository ( type );
900
+ }
901
+
902
+ private boolean isPanache2Repository (TypeElement type ) {
903
+ return implementsInterface ( type , PANACHE2_MANAGED_BLOCKING_REPOSITORY_BASE )
904
+ || implementsInterface ( type , PANACHE2_STATELESS_BLOCKING_REPOSITORY_BASE )
905
+ || implementsInterface ( type , PANACHE2_MANAGED_REACTIVE_REPOSITORY_BASE )
906
+ || implementsInterface ( type , PANACHE2_STATELESS_REACTIVE_REPOSITORY_BASE )
907
+ ;
908
+ }
909
+
892
910
/**
893
911
* If there is a session getter method, we generate an instance
894
912
* variable backing it, together with a constructor that initializes
@@ -930,10 +948,31 @@ private String addDaoConstructor(@Nullable ExecutableElement method) {
930
948
/**
931
949
* For Quarkus, we generate a constructor with injection for EntityManager in ORM,
932
950
* and in HR, we define the static session getter.
951
+ * For Panache 2, we can use the element to figure out what kind of session we want since this
952
+ * is for repositories
933
953
*/
934
- private String setupQuarkusDaoConstructor () {
935
- if ( context .usesQuarkusOrm () ) {
936
- String name = "getEntityManager" ;
954
+ private String setupQuarkusDaoConstructor (@ Nullable ExecutableElement getter , @ Nullable TypeElement element ) {
955
+ if ( context .usesQuarkusOrm ()
956
+ || (context .usesQuarkusPanache2 ()
957
+ && element != null
958
+ && (implementsInterface (element , PANACHE2_MANAGED_BLOCKING_REPOSITORY_BASE )
959
+ || implementsInterface (element , PANACHE2_STATELESS_BLOCKING_REPOSITORY_BASE )))
960
+ ) {
961
+ String name ;
962
+ String sessionType ;
963
+ if ( getter != null ) {
964
+ name = getter .getSimpleName ().toString ();
965
+ sessionType = fullReturnType (getter );
966
+ }
967
+ else if (element != null
968
+ && implementsInterface (element , PANACHE2_STATELESS_BLOCKING_REPOSITORY_BASE )) {
969
+ name = "getStatelessSession" ;
970
+ sessionType = HIB_STATELESS_SESSION ;
971
+ }
972
+ else { // good default
973
+ name = "getSession" ;
974
+ sessionType = HIB_SESSION ;
975
+ }
937
976
putMember ( name ,
938
977
new RepositoryConstructor (
939
978
this ,
@@ -949,13 +988,20 @@ private String setupQuarkusDaoConstructor() {
949
988
true
950
989
)
951
990
);
952
- return ENTITY_MANAGER ;
991
+ return sessionType ;
953
992
}
954
993
else {
955
994
importType ( Constants .QUARKUS_SESSION_OPERATIONS );
956
995
// use this getter to get the method, do not generate an injection point for its type
957
- sessionGetter = "SessionOperations.getSession()" ;
958
- return UNI_MUTINY_SESSION ;
996
+ if (element != null
997
+ && implementsInterface (element , PANACHE2_STATELESS_REACTIVE_REPOSITORY_BASE )) {
998
+ sessionGetter = "SessionOperations.getStatelessSession()" ;
999
+ return UNI_MUTINY_STATELESS_SESSION ;
1000
+ }
1001
+ else {
1002
+ sessionGetter = "SessionOperations.getSession()" ;
1003
+ return UNI_MUTINY_SESSION ;
1004
+ }
959
1005
}
960
1006
}
961
1007
0 commit comments