Em todo banco de dados relacional, você deve sempre saber quais relações são possíveis para suas entidades. Mas às vezes essas relações são desconhecidas ou podem mudar a qualquer momento. Com as relações dinâmicas, você pode adicionar ou excluir relações personalizadas entre entidades durante o tempo de execução.
Uma relação dinâmica pode ser visualizada como um gráfico direcionado com uma entrada fixa (fonte de fonte) e uma saída dinâmica (destino).
Fluxograma LR
Dinâmico de subgraffrelação
direção lr
SourceObject-> Target
fim
Por exemplo, com as seguintes entidades:
Uma pessoa pode ter um cão e ambos os atitos podem ter documentos (documentos de informação da pessoa e documentos de informações sobre cães). Agora você pode adicionar relações dinâmicas a todas as entidades que poderiam ficar assim:
Gráfico TD;
Pessoa-> cachorro;
Pessoa-> Person_document
Cachorro-> Dog_document;
Cada conexão é uma relação dinâmica e as relações a seguir serão geradas:
Cada relação obteve um alvo dinâmico, isso significa que você pode criar uma relação com qualquer outra entidade.
Nesse cenário, uma pessoa tem um cachorro e ambos obtiveram documentos, agora você pode mudar a relação durante o tempo de execução (sem alterar suas entidades ou modelos). Por exemplo, você pode excluir um pessoa_document (foi perdido):
Gráfico TD;
Pessoa-> cachorro;
Cachorro-> Dog_document;
<dependency>
<groupId>io.github.Mom0aut</groupId>
<artifactId>dynamic-relations</artifactId>
<version>1.0.4</version>
</dependency>
Basta adicionar a @Relation à sua entidade existente e a entidade de relações dinâmicas necessária será gerada. As relações dinâmicas estão trabalhando apenas com classificação que são anotadas com @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" ;
}
}Implementar a relação de relação, cada relação dinâmica precisa de um ID longo e um tipo de string que você possa definir.
@ 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" ;
}
}Importe o drmconfig no seu aplicativo de inicialização da primavera, para que você possa usar o 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 );
}A relação dinâmica só pode ser criada com entidades persistentes!
@ 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 ();
}Toda contribuição é bem -vinda, siga as diretrizes de contribuição
Veja nosso código de conduta