Hibernate внутреннее соединение для отношений один ко многим - PullRequest
0 голосов
/ 24 апреля 2019

Имею таблицу user & user_dealer, имеющую отношение один ко многим.Пожалуйста, найдите нижеприведенную структуру таблицы.

Таблица пользователей

 id email          username   
679 test@test.com   sathis  
679 test@test.com   sathis  
679 test@test.com   sathis  
679 test@test.com   sathis  
679 test@test.com   sathis  
679 test@test.com   sathis  
679 test@test.com   sathis  
679 test@test.com   sathis  
680 test@test.com   ram 
680 test@test.com   ram 
680 test@test.com   ram 
681 test@test.com   Steve   
681 test@test.com   Steve   
681 test@test.com   Steve   
681 test@test.com   Steve   
681 test@test.com   Steve   

таблица user_dealer

    user_id dealer_id
    679     J039
    679     J080
    679     J320
    679     J54L
    679     K31P
    679     L05C
    679     T030
    679     V150
    680     J039
    680     J080
    680     J320
    681     ABC12
    681     CD123
    681     opo123
    681     qw123
    681     ieu12

если я дам имя пользователя (из таблицы пользователя), то оно должно проверитькод (из таблицы user_dealer) и тот же дилер должен проверить, представлен ли он для какого-то другого user_id (из таблицы user_dealer), и должен также возвращать эти user_ids.

, например.

 id    username
679    sathis
680    ram

из таблицы выше, если я даю сати в качестве входных данных.я должен получить оперативную память в качестве выходных результатов.Потому что Sathis's dealer_id также представлен для Ram.

Пожалуйста, найдите класс модели для пользователя

@Getter
@Setter
@Entity
@Table(name = "users")
@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode(of = {"username"})
@ValidDsdPermissions
@ValidApprovalPrivileges
public class User implements Identifiable<Long>, LazilyLoadable {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @JsonProperty("userLink")
  private Long id;

  @NotEmpty(message = "{error.model.user.attribute.username.required}")
  @Column(unique = true, nullable = false)
  private String username;


  @NotEmpty(message = "{error.model.user.attribute.email.required}")
  @Email(message = "{error.model.user.attribute.email.format.invalid}")
  @Column(nullable = false)
  private String email;

  @ElementCollection(fetch = FetchType.LAZY)
  @CollectionTable(name = "user_dealers", joinColumns = @JoinColumn(name = "user_id"))
  @BatchSize(size=20)
  @JsonSerialize(using = DealersSerializer.class)
  @JsonDeserialize(using = DealersDeserializer.class)
  private Set<Dealer> dealers = new HashSet<Dealer>();


  }

Пожалуйста, найдите класс модели для дилера

@Getter
@Setter
@NoArgsConstructor
@Embeddable
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode
public class Dealer {
  @Column(name = "dealer_id")
  private String dealerId;

  @Column(name = "dsd_id")
  private Long dsdId;
}

Я пробовалс простым SQL-запросом и его рабочей находкой, как и ожидалось.Найдите приведенный ниже запрос.

    select id, username 
    from security_development.users 
    inner join (
      select distinct user_id 
      from security_development.user_dealers 
      inner join  (
        select dealer_id 
        from security_development.user_dealers 
        inner join security_development.users ON security_development.user_dealers.user_id = security_development.users.id
        where  username = 'sathis'
      ) t on t.dealer_id = security_development.user_dealers.dealer_id
    ) t2 on t2.user_id = security_development.users.id 

Найдите приведенный ниже запрос спящего режима, не рассматривая / сравнивая dealer_id (который следует сравнить)

"SELECT DISTINCT u FROM User u INNER JOIN u.dealers d, User v INNER JOIN v.dealers e WHERE v.username = :username AND u.role.id in (3,2) AND d.dealerId = e.dealerId"

Как я могу преобразоватьВыше простой SQL-запрос в Hibernate-запрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...