ในทุกฐานข้อมูลเชิงสัมพันธ์คุณต้องรู้เสมอว่าความสัมพันธ์ใดที่เป็นไปได้กับหน่วยงานของคุณ แต่บางครั้งความสัมพันธ์เหล่านี้ไม่เป็นที่รู้จักหรืออาจเปลี่ยนแปลงได้ตลอดเวลา ด้วยความสัมพันธ์แบบไดนามิกคุณสามารถเพิ่มหรือลบความสัมพันธ์ที่กำหนดเองระหว่างเอนทิตีระหว่างรันไทม์
ความสัมพันธ์แบบไดนามิกสามารถดูได้เป็นกราฟกำกับที่มีอินพุตคงที่ (SourceObject) และเอาต์พุตแบบไดนามิก (เป้าหมาย)
ผังงาน LR
subgraph dynamicrelation
ทิศทาง LR
SourceObject-> เป้าหมาย
จบ
ตัวอย่างเช่นกับหน่วยงานต่อไปนี้:
บุคคลสามารถมีสุนัขและทั้งคู่อาจมีเอกสาร (เอกสารข้อมูลบุคคลและเอกสารข้อมูลสุนัข) ตอนนี้คุณสามารถเพิ่มความสัมพันธ์แบบไดนามิกให้กับเอนทิตีทั้งหมดที่มีลักษณะเช่นนี้:
กราฟ TD;
บุคคล-> สุนัข;
บุคคล-> person_document
Dog-> dog_document;
การเชื่อมต่อแต่ละครั้งเป็นความสัมพันธ์แบบไดนามิกและความสัมพันธ์ต่อไปนี้จะถูกสร้างขึ้น:
แต่ละความสัมพันธ์มีเป้าหมายแบบไดนามิกนั่นหมายความว่าคุณสามารถสร้างความสัมพันธ์กับเอนทิตีอื่น ๆ
ในสถานการณ์นี้บุคคลมีสุนัขและทั้งคู่มีเอกสารตอนนี้คุณสามารถเปลี่ยนความสัมพันธ์ในระหว่างการรันไทม์ (ไม่มีการเปลี่ยนแปลงเอนทิตีหรือโมเดลของคุณ) ตัวอย่างเช่นคุณสามารถลบ person_document (หลงทาง):
กราฟ TD;
บุคคล-> สุนัข;
Dog-> dog_document;
<dependency>
<groupId>io.github.Mom0aut</groupId>
<artifactId>dynamic-relations</artifactId>
<version>1.0.4</version>
</dependency>
เพียงเพิ่ม @Relation ในเอนทิตีที่มีอยู่ของคุณและเอนทิตีความสัมพันธ์แบบไดนามิกที่จำเป็นจะถูกสร้างขึ้น ความสัมพันธ์แบบไดนามิกกำลังทำงานกับการจัดประเภทซึ่งมี คำอธิบายประกอบด้วย @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" ;
}
}ใช้ความสัมพันธ์แต่ละความสัมพันธ์แบบไดนามิกจำเป็นต้องใช้ ID ยาวและประเภทสตริงที่คุณสามารถกำหนดได้
@ 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" ;
}
}นำเข้า drmconfig ในแอปพลิเคชัน Spring Boot ของคุณเพื่อให้คุณสามารถใช้ Relationservice
@ 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 );
}ความสัมพันธ์แบบไดนามิกสามารถสร้างขึ้นด้วยเอนทิตีที่คงอยู่เท่านั้น!
@ 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 ();
}ยินดีต้อนรับทุกการบริจาคโปรดปฏิบัติตามแนวทางการบริจาค
ดูจรรยาบรรณของเรา