Comments (3)
There is no equivalent of AnnotationTarget.PROPERTY
in java. So @Id
annotation can not be applied to any abstract property. Repository of interfaces is not supported in Nitrite, as in java there is no way to extract information about abstract property for index/id field validation.
The ideal way to do it as follows:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes(
value = [
JsonSubTypes.Type(CaoHistoryRecordNotification::class, name = "history-record-notification")
]
)
@Indices(value = [(Index(value = "caObjectLocalId", type = IndexType.NonUnique)),
(Index(value = "checked", type = IndexType.NonUnique))])
interface CaoNotification {
val localId: UUID
val caObjectLocalId: UUID
val checked: Boolean
val dateTime: LocalDateTime
val importance: CaoNotificationImportance
}
@InheritIndices
data class CaoHistoryRecordNotification(
@Id override val localId: UUID,
override val caObjectLocalId: UUID,
override val checked: Boolean,
override val dateTime: LocalDateTime,
override val importance: CaoNotificationImportance,
val localCaoHistoryRecordId: UUID
) : CaoNotification
private val repository = nitrite.getRepository<CaoHistoryRecordNotification>()
See issue #37 for @InheritIndices
.
from nitrite-java.
Thanks for quick reply!
But what If I have multiple data classes extending CaoNotification
?
In last Kotlin versions, we can extend data classes
from abstract
/open
classes.
Is this the best solution for now?
from nitrite-java.
Yes you can not create repository of interfaces. You can have a repository of abstract class. But remember all index fields and id fields can not be abstract in that class. Here is an example which I have added in the test cases also
interface MyInterface {
val id: UUID
}
@Indices(value = [(Index(value = "name", type = IndexType.NonUnique))])
abstract class SomeAbsClass (
@Id override val id: UUID = UUID.randomUUID(),
open val name: String = "abcd"
) : MyInterface {
abstract val checked: Boolean
}
@InheritIndices
class MyClass(
override val id: UUID,
override val name: String,
override val checked: Boolean) : SomeAbsClass(id, name)
@InheritIndices
class MyClass2(
override val id: UUID,
override val name: String,
override val checked: Boolean,
val importance: Int
) : SomeAbsClass(id, name)
@Test
fun testIssue54() {
val repository = db?.getRepository<SomeAbsClass>()!!
assertTrue(repository.hasIndex("id"))
assertTrue(repository.hasIndex("name"))
val item = MyClass(UUID.randomUUID(), "xyz", true)
var writeResult = repository.insert(item)
assertEquals(writeResult.affectedCount, 1)
var cursor = repository.find()
assertEquals(cursor.size(), 1)
val item2 = MyClass2(UUID.randomUUID(), "123", true, 3)
writeResult = repository.insert(item2)
assertEquals(writeResult.affectedCount, 1)
cursor = repository.find()
assertEquals(cursor.size(), 2)
}
from nitrite-java.
Related Issues (20)
- nitriteMapper is null? HOT 1
- Add 4.x.x+ to maven repository
- NitriteMapper does not give enough info about the type HOT 4
- IndexingException: indexing on arrays or collections for field formula are not supported HOT 1
- Longs become Integers after export/import HOT 7
- Migrating from 3.x to 4.x: Database file is corrupted HOT 7
- possible memory leak HOT 1
- org.h2.mvstore.Chunk.accountForRemovedPage NPE HOT 2
- MVStore claims to have unsaved changes after calling nitriteDatabase.getCollection(...) HOT 5
- NitriteCollection.update slow when unrelated properties in document are indexed HOT 6
- EntityConverter toDocument HOT 3
- KotlinXSerializationMapper decodes lists to be size 1 always HOT 1
- Invalid repository type for entity where all fields are nullable (with JacksonMapperModule) HOT 3
- Possibiltity to index a field with both text and non-unique/unique filter HOT 3
- Incorrect result when searching indexed column HOT 1
- Support JPMS HOT 6
- Feature request: method for retrieving all document ids in a collection faster HOT 1
- Search for _id always returns an iterator with an element HOT 2
- org.dizitart.no2.common.tuples.Pair cannot be cast to class java.lang.Comparable HOT 4
- @Indices is not neccessary to use, multiple @Index annotations on class are allowed HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nitrite-java.