Dalam setiap database relasional, Anda harus selalu tahu hubungan mana yang mungkin dengan entitas Anda. Tetapi kadang -kadang hubungan ini tidak diketahui atau dapat berubah kapan saja. Dengan hubungan dinamis, Anda dapat menambahkan atau menghapus hubungan khusus antar entitas selama runtime.
Hubungan dinamis dapat dilihat sebagai grafik terarah dengan input tetap (SourceObject) dan output dinamis (target).
LR FOLKCHART
Subgraph Dynamicrelation
arah lr
SourceObject-> Target
akhir
Misalnya dengan entitas berikut:
Seseorang dapat memiliki anjing dan keduanya masuk dapat memiliki dokumen (dokumen info orang dan dokumen info anjing). Sekarang Anda dapat menambahkan hubungan dinamis ke semua entitas yang bisa terlihat seperti ini:
grafik td;
Orang-> anjing;
Orang-> orang_document
Dog-> dog_document;
Setiap koneksi adalah hubungan yang dinamis dan hubungan berikut akan dihasilkan:
Setiap hubungan mendapatkan target dinamis, itu berarti Anda dapat membuat hubungan dengan entitas lain.
Dalam skenario ini seseorang memiliki anjing dan keduanya mendapat dokumen, sekarang Anda dapat mengubah hubungan selama runtime (tidak ada perubahan entitas atau model Anda). Misalnya, Anda bisa menghapus seseorang_document (tersesat):
grafik td;
Orang-> anjing;
Dog-> dog_document;
<dependency>
<groupId>io.github.Mom0aut</groupId>
<artifactId>dynamic-relations</artifactId>
<version>1.0.4</version>
</dependency>
Cukup tambahkan @Relation ke entitas Anda yang ada dan entitas hubungan dinamis yang diperlukan akan dihasilkan. Hubungan dinamis hanya bekerja dengan yang diklasifikasikan yang dijelaskan dengan @Entity !
@ Relation ( sourceClass = Person . class )
@ Entity
@ Getter
@ Setter
public class Person implements RelationIdentity {
@ Id
@ GeneratedValue ( strategy = GenerationType . IDENTITY )
private Long id ;
@ Override
public String getType () {
return "PersonType" ;
}
}Terapkan relasi IDepan, setiap relasi dinamis membutuhkan ID panjang dan tipe string yang dapat Anda definisikan.
@ Relation ( sourceClass = Person . class )
@ Entity
@ Getter
@ Setter
public class Person implements RelationIdentity {
@ Id
@ GeneratedValue ( strategy = GenerationType . IDENTITY )
private Long id ;
@ Override
public String getType () {
return "PersonType" ;
}
}Impor DRMConfig di Aplikasi Spring Boot Anda, sehingga Anda dapat menggunakan Hubungan Hubungan
@ SpringBootApplication
@ Import ( DrmConfig . class )
public class App {
public static void main ( String [] args ) {
SpringApplication . run ( App . class , args );
}
} @ Autowired
private RelationService relationService ;
void createRelation () {
Person person = new person ();
personDao . save ( person );
Dog dog = new Dog ();
dogDao . save ( dog );
//Dynamic Relation can only be created with persisted Entities!
RelationLink relationLinkPersonToDog = relationService . createRelation ( person , dog );
}Hubungan dinamis hanya dapat dibuat dengan entitas yang bertahan!
@ Autowired
private RelationService relationService ;
void deleteRelation () {
relationService . deleteRelation ( relationToBeDeleted );
} @ Autowired
private RelationService relationService ;
void findRelations () {
Person person = new person ();
personDao . save ( person );
Dog dog = new Dog ();
dogDao . save ( dog );
Document document = new Document ();
documentDaio . save ( document );
//Dynamic Relation can only be created with persisted Entities!
RelationLink relationLinkPersonToDog = relationService . createRelation ( person , dog );
RelationLink relationLinkPersonToDocument = relationService . createRelation ( person , document );
RelationLink relationLinkDogToDocument = relationService . createRelation ( dog , document );
//Return 1 Relation person -> dog
RelationLink foundRelation = relationService . findRelationBySourceObjectAndRelationIdentity ( person , dog );
//Returns 2 Relations person -> dog and person -> document
List < RelationLink > relationBySourcePerson = relationService . findRelationBySourceObject ( person );
//Returns 2 Relations from person -> document and dog -> document
Set < RelationLink > relationByTargetDocument = relationService . findRelationByTargetRelationIdentity ( document );
} @ Autowired
private RelationService relationService ;
void getSourceObject () {
RelationLink foundRelation = relationService . findRelationBySourceObjectAndRelationIdentity ( person , dog );
//Can be cast to Person because we know it is from Person.class
Person sourceObject = ( Person ) foundRelation . getSourceObject ();
}Setiap kontribusi dipersilakan, silakan ikuti Pedoman Kontribusi
Lihat Kode Etik kami