Page 1 of 1

Spring Data JPA gibt ein unerwartetes Ergebnis mit scrollbasierter Abfrage- und Operationspriorität zurück

Posted: 31 Dec 2024, 13:54
by Guest
Ich habe diese Entität

Code: Select all

@Entity
@Table(name = "Item")
class Item(
@Column(name = "name", nullable = false)
var name: String,

@Column(name = "added_date", columnDefinition = "TIMESTAMP WITH TIME ZONE", nullable = true)
var addedDate: ZonedDateTime? = null,

@Column(name = "duration", nullable = true)
var duration: Int? = null,

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "head_of_id", nullable = false)
val headOf: HeadOf,
) {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long = 0
}
und dies ist das entsprechende Repository

Code: Select all

interface ItemRepository : JpaRepository {
fun findByHeadOfIdAndAddedDateNotNullOrDurationNotNull(
headOfId: Long,
position: ScrollPosition,
pageable: Pageable,
): Window
}
Dies ist, was sich derzeit in der Tabelle Item befindet. Es ist eine Zeile (es ist das Ergebnis eines Dumps)

Code: Select all

INSERT INTO public.item VALUES (1, 'Some fancy title', '2024-12-31 07:14:42.955789+00', NULL, 1000);
Wie Sie sehen können, ist headOf 1000L.
Wenn ich nun diese Funktion aufrufe, findByHeadOfIdAndAddedDateNotNullOrDurationNotNull mit den folgenden Werten

headOfId: 0
scrollPosition: null
PageRequest.of(0, 10)

Es gibt mir die eine Zeile zurück, die dort drin ist. Das erwarte ich nicht, denn die headOfId, die ich übergebe, ist 0L und nicht 1000L.
Dies ist die durchgeführte Anfrage

Code: Select all

SELECT
i1_0.id,
i1_0.added_date,
i1_0.duration,
i1_0.head_of_id,
FROM
item i1_0
LEFT JOIN
headOf h1_0
ON
h1_0.id = i1_0.head_of_id
WHERE
h1_0.id = ?
AND (i1_0.added_date IS NOT NULL OR i1_0.duration IS NOT NULL)
OFFSET
? ROWS
FETCH FIRST
? ROWS ONLY;
Ich kann keine @Query-Annotation verwenden, dann erhalte ich Folgendes:

Abfrage konnte nicht erstellt werden für öffentliche Zusammenfassung org.springframework.data.domain.Window org...jpa.repository.ItemRepository.findByHeadOfIdAndAddedDateNotNullOrDurationNotNull(long,org.springframework.data.domain.ScrollPosition,org.springframework.data.domain.Pageable);
Grund: Scroll-Abfragen werden mit String-basiert nicht unterstützt Abfragen

Gibt es eine Lösung dafür?