Jhipster - установка отношения «многие ко многим» для пользовательских объектов - PullRequest
1 голос
/ 04 февраля 2020

Хотите создать сущность под названием Friendship и хотите использовать сущность User, являющуюся частью Jhipster, но я продолжаю получать эту ошибку недействительных отношений (полная ошибка ниже).

У пользователя есть друзья (сущности пользователя) и наоборот


entity UserExtended {

}
entity Friend{
    status Boolean, 
    modified LocalDate,
    created LocalDate
}
relationship OneToOne {
    UserExtended{user(login)} to User
}

relationship OneToMany {
    UserExtended{friends} to Friend{user}
}

relationship ManyToOne {
    UserExtended{friend} to UserExtended{users}
}

entity Post {
    owner UserExtended,
    content String,
    dateCreated LocalDate 
}

entity Like {
    likedBy UserExtended,
    post Post,
    dateCreated LocalDate   
}

entity Comment {
    postedBy UserExtended,
    post Post,
    dateCreated LocalDate
}


relationship OneToMany {
  UserExtended{post} to Post{user}
}

relationship OneToMany {
  Like{post} to Post{like}
}

relationship OneToMany {
  Comment{post} to Post{comment}
}

Ошибка:

Error: Can't add invalid relationship. Error: In the Many-to-One relationship from UserExtended to UserExtended, only unidirectionality is supported, you should either create a bidirectional One-to-Many relationship or remove the injected field in the destination entity instead.
Error while parsing applications and entities from the JDL Error: Can't add invalid relationship. Error: In the Many-to-One relationship from UserExtended to UserExtended, only unidirectionality is supported, you should either create a bidirectional One-to-Many relationship or remove the injected field in the destination entity instead.
Error: Can't add invalid relationship. Error: In the Many-to-One relationship from UserExtended to UserExtended, only unidirectionality is supported, you should either create a bidirectional One-to-Many relationship or remove the injected field in the destination entity instead.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

У вас есть несколько проблем в вашем JDL. Например, вам не следует смешивать отношения и сущности следующим образом:

entity Post {
    owner UserExtended,   // <-- This is a problem
    content String,
    dateCreated LocalDate 
}

Если я правильно понял ваши требования, вы захотите создать своего рода блог и позволить пользователям создавать дружеские отношения. JDL не позволит вам добавлять отношения, начиная с основной сущности User, поэтому вы создали UserExtended и, возможно, будете хранить там некоторую дополнительную информацию.

Помните, что вы можете создать несколько связей внутри одной relationship блок. На самом деле, я думаю, что это хорошая практика, которая делает весь JDL более читабельным.

Это должно сделать то, что вам нужно:

entity UserExtended

entity Friend {
    status Boolean
    modified LocalDate
    created LocalDate
}

entity Post {
    content String
    dateCreated LocalDate
}

entity Like {
    dateCreated LocalDate
}

entity Comment {
    dateCreated LocalDate
}

relationship OneToOne {
    UserExtended{user(login)} to User
}

relationship ManyToOne {
    Post{owner} to UserExtended
    Comment{postedBy} to UserExtended
    Like{likedBy} to UserExtended
    Friend{user} to UserExtended
}

relationship OneToMany {
    UserExtended{friends} to Friend
    Post{likes} to Like
    Post{comments} to Comment
}

Единственная сложная часть здесь - это many-to-many между двумя пользователями в отношениях под названием Friend. Вам необходимо сохранить некоторую дополнительную информацию о дружбе (статус, изменен, создан), поэтому нам пришлось разделить этот many-to-many на one-to-many плюс many-to-one, используя объект Friend в качестве таблицы соединения с дополнительными полями.

Я не изменил вашу схему именования, которая, возможно, могла бы быть улучшена.

Не забудьте проверить официальную документацию и дополнительно использовать JHipster Online для Хранение и проверка JDL.

0 голосов
/ 04 февраля 2020

Попробуйте переименовать

relationship OneToOne {
    UserExtended{user(login)} to User
}

в

relationship OneToOne {
    UserExtended{somethingElse(login)} to User
}
...