Сущность 1
@Data
@Entity
public class Company implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int companyId;
private String name;
@Transient
private int haveFavoriteUser;
}
Сущность 2
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
private String userId;
}
Сущность 3
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Favorite implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int favoriteId;
@ManyToOne
@JoinColumn(name = "userId")
private User user;
@ManyToOne
@JoinColumn(name = "companyId")
private Company company;
}
Хранилище:
@Repository
public interface CompanyRepository extends JpaRepository<Company, Long> {
@Query(value = "SELECT CE.*, IF(F.companyId = CE.companyId, 1, 0) as haveFavoriteUser FROM Company CE " + //
"LEFT JOIN Favorite F ON CE.companyId = F.companyId " + //
"WHERE F.userId = :user ORDER BY CE.name", //
nativeQuery = true)
List<Company> findAllFavorite(@Param("user") String user);
}
Я хочу, в моем jpa репозитории отображается значение "haveFavoriteUser", с загрузкой из другой сущности (любимой). Как я могу это сделать?
Я не хочу объединять избранное внутри компании, потому что мне нужно только одно поле.
Большое спасибо.