في كل قاعدة بيانات علائقية ، يجب أن تعرف دائمًا العلاقات الممكنة لكياناتك. ولكن في بعض الأحيان تكون هذه العلاقات غير معروفة أو قد تتغير في أي وقت. مع العلاقات الديناميكية ، يمكنك إضافة أو حذف علاقات مخصصة بين الكيانات أثناء وقت التشغيل.
يمكن النظر إلى العلاقة الديناميكية على أنها رسم بياني موجه مع إدخال ثابت (SourceObject) والإخراج الديناميكي (الهدف).
مخطط انسيابي LR
ديناميكية الفرعية
الاتجاه LR
SourceObject-> Target
نهاية
على سبيل المثال مع الكيانات التالية:
يمكن أن يكون لدى الشخص كلبًا ويمكن أن يكون لكل من الوثائق (مستندات معلومات الشخص ووثائق معلومات الكلاب). الآن يمكنك إضافة علاقات ديناميكية إلى جميع الكيانات التي يمكن أن تبدو هكذا:
الرسم البياني TD ؛
شخص-> كلب ؛
الشخص-> person_document
الكلب-> dog_document ؛
كل اتصال هو علاقة ديناميكية وسيتم إنشاء العلاقات التالية:
حصلت كل علاقة على هدف ديناميكي ، وهذا يعني أنه يمكنك إنشاء علاقة بأي كيان آخر.
في هذا السيناريو ، يكون لدى الشخص كلبًا وحصل كلاهما على مستندات ، يمكنك الآن تغيير العلاقة أثناء وقت التشغيل (لا يوجد تغيير في كياناتك أو نماذجك). على سبيل المثال ، يمكنك حذف شخص _document (فقدت):
الرسم البياني TD ؛
شخص-> كلب ؛
الكلب-> dog_document ؛
<dependency>
<groupId>io.github.Mom0aut</groupId>
<artifactId>dynamic-relations</artifactId>
<version>1.0.4</version>
</dependency>
ما عليك سوى إضافة العلاقة إلى كيانك الحالي وسيتم إنشاء كيان العلاقات الديناميكية اللازمة. العلاقات الديناميكية تعمل فقط مع التصنيف والتي تم شرحها مع 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" ;
}
}تنفيذ العلاقة ، كل علاقة ديناميكية تحتاج إلى معرف طويل ونوع سلسلة يمكنك تحديدها.
@ 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 في تطبيق التمهيد الربيعي الخاص بك ، بحيث يمكنك استخدام 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 ();
}كل مساهمة مرحب بها ، يرجى اتباع إرشادات المساهمة
انظر مدونة قواعد سلوكنا