В каждой реляционной базе данных вы всегда должны знать, какие отношения возможны для ваших сущностей. Но иногда эти отношения неизвестны или могут измениться в любое время. С динамическими отношениями вы можете добавить или удалить пользовательские отношения между объектами во время выполнения.
Динамическое соотношение можно рассматривать как направленный график с фиксированным входом (SourceObject) и динамическим выводом (Target).
Блок -схема LR
Динамиклерация подграфа
Направление LR
SourceObject-> Target
конец
Например, с следующими объектами:
Человек может иметь собаку, и у обоих Entites могут быть документы (информационные документы и информационные документы собаки). Теперь вы можете добавить динамические отношения ко всем объектам, которые могут выглядеть так:
График TD;
Человек-> собака;
Человек-> Person_document
Собака-> dog_document;
Каждое соединение представляет собой динамическое отношение, и будут сгенерированы следующие отношения:
Каждое соотношение получает динамическую цель, это означает, что вы можете создать отношение к любой другой сущности.
В этом сценарии у человека есть собака, и оба получили документы, теперь вы можете изменить отношение во время выполнения (без изменения ваших сущностей или моделей). Например, вы можете удалить Person_document (потерян):
График TD;
Человек-> собака;
Собака-> 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" ;
}
}Реализовать отношение, каждое динамическое отношение требует длинного идентификатора и типа строки, который вы можете определить.
@ 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, чтобы вы могли использовать Delationservice
@ 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 ();
}Приглашается каждый вклад, пожалуйста, следуйте руководящим принципам взноса
Смотрите наш кодекс поведения