Repository navigation
ORM: map java.time Instant, LocalDate and LocalDateTime; samples store Instant - #6094
Conversation
Without an annotation they take Date's portable default, a number in an integer column (epoch millis, or epoch days for a LocalDate), so an Instant reads what a long or a Date of milliseconds wrote. @TeMPOraL opts them into native TIMESTAMP/DATE columns through TemporalConverter's UTC ISO text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Wayline, Savor, Parley and Skirmish entities hold Instant instead of epoch millisecond longs. The ORM's default Instant mapping is the same BIGINT, so no migration changes; NOT NULL "unset" sentinels are Instant.EPOCH and the wire DTOs keep epoch milliseconds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refuse a LocalDateTime past a long of milliseconds instead of wrapping it, report java.time identifier/version/@TeMPOraL misuse once rather than also as a relationship, refuse Property<java.time> with a clear error instead of generated code that fails to compile, and test embedded Instants and max/min aggregates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Developer Guide build artifacts are available for download from this workflow run:
Developer Guide quality checks: |
Cloudflare Preview
|
|
Compared 191 screenshots: 191 matched. Native Android coverage
✅ Native Android screenshot tests passed. Native Android coverage
Benchmark ResultsDetailed Performance Metrics
|
|
Compared 227 screenshots: 227 matched. |
✅ Continuous Quality ReportTest & Coverage
Static Analysis
Generated automatically by the PR CI workflow. |
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows x64Runner CPU: AMD64 Family 26 Model 2 Stepping 1, AuthenticAMD (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
Flutter vs Codename OneSame application, built both ways: Flutter's AOT compile of the gallery, and the identical Dart source transpiled to Java on Codename One. Lower is better for every metric, so a ratio above 1.00x means Codename One is ahead by that factor. android9 interleaved rounds; host load 0.83, 2.06, 1.66
Compute -- the VM workloads (
Gate: within tolerance against
ios9 interleaved rounds; host load 19.33, 23.71, 18.73
Compute -- the VM workloads ( Not measured: iOS compute is not measured: a device build needs signed hardware, and on the simulator Flutter runs its JIT debug engine rather than AOT code. The macOS row runs the same ParparVM and Dart AOT compilers on the same Apple silicon. Gate: within tolerance against
javascript9 interleaved rounds; host load 2.54, 1.45, 0.62
Compute -- the VM workloads (
Gate: within tolerance against
linux9 interleaved rounds; host load 0.19, 2.31, 1.72
Compute -- the VM workloads (
Gate: within tolerance against
macos9 interleaved rounds; host load 2.83, 19.07, 23.03
Compute -- the VM workloads (
Gate: within tolerance against
windows9 interleaved rounds
Compute -- the VM workloads (
Gate: within tolerance against
Codename One wins 26 of 26 measured metrics across 6 platform(s). |
|
Compared 206 screenshots: 206 matched. ParparVM vs HotSpot (JDK 25): Linux x64Runner CPU: AMD EPYC 7763 64-Core Processor (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 206 screenshots: 206 matched. ParparVM vs HotSpot (JDK 25): Linux arm64Runner CPU: Neoverse-N2 (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
ParparVM vs HotSpot (JDK 25): Windows arm64Runner CPU: ARMv8 (64-bit) Family 8 Model D49 Revision 0, MICROSOFT CORPORATION (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 192 screenshots: 192 matched. Benchmark Results
Detailed Performance Metrics
ParparVM vs HotSpot (JDK 25): macOS arm64Runner CPU: Apple M1 (Virtual) (baseline Ratios are ParparVM / JDK 25: below 1.00x ParparVM is faster (time) or smaller (RAM). Median of 5 interleaved, paired rounds; every run's output was verified. A ratio more than 20% (time) / 25% (RAM) above its baseline in
Result: no regression |
✅ ByteCodeTranslator Quality ReportTest & Coverage
Benchmark Results
Static Analysis
Generated automatically by the PR CI workflow. |
…oo low Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…time The Initializr templates are built against the released framework, whose annotation processor rejects java.time fields. The demo conversion moves to its own pull request, for the release that includes this mapping. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the demo conversion held back from #6094, for the release that maps java.time entity fields, and resyncs the Initializr templates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Compared 206 screenshots: 206 matched. Benchmark ResultsDetailed Performance Metrics
|
…too low Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Restores the demo conversion held back from #6094, for the release that maps java.time entity fields, and resyncs the Initializr templates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ORM
Instant,LocalDateandLocalDateTimeentity fields map with no annotation, toDate's portable default: epoch milliseconds (wall clock forLocalDateTime) or epoch days forLocalDate, in an integer column. AnInstanttherefore reads the column alongofcurrentTimeMillis()or aDatewrote, with no migration.@Temporalopts them into nativeTIMESTAMP/DATEcolumns throughTemporalConverter's UTC ISO text.LocalDatetakes onlyDATE, the others onlyTIMESTAMP.JavaTimeConverter, shared with the backend), so query parameters, the builder, and aggregates all convert like a@Convertfield.Property<java.time.*>, element collections, mismatched@Temporalkind.LocalDateTimevalues beyond a long of milliseconds are refused rather than wrapped.@Temporaldocs updated.Samples
Wayline, Savor, Parley and Skirmish entities store timestamps as
Instant. Columns are unchanged (same BIGINT millis); NOT NULL "unset" sentinels areInstant.EPOCH; wire DTOs keep epoch milliseconds. Day buckets that hold millis or sit in composite ids staylong.Testing
OrmAnnotationProcessorTest: 130/130, including round trips of every type on client and backend models, embedded fields, ordering, parameters, aggregates and error cases.🤖 Generated with Claude Code