考慮這個類:春數據JPA加入子查詢
@Entity
@Table(name = "USER_TABLE")
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
@Id
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@GeneratedValue(generator="system-uuid")
@Column(name = "id", unique = true)
@Type(type= "org.hibernate.type.PostgresUUIDType")
private UUID id;
@Column(name = "USERNAME")
private String userName;
}
和單純的孩子:
@Entity
@Table(name = "CUSTOMER")
public class Customer extends User{
//some extra fields
}
我有關係到用戶的另一個類:
@Entity
@Table(name = "USER_ACTIVITY")
public class UserActivity {
@ManyToOne
@JoinColumn(name = "USERID")
private User user;
//id and other fields
}
這是棘手的部分。我想獲取與「客戶」相關的UserActivity類型的所有對象。我試過這樣的:
public interface UserActivityRepository extends PagingAndSortingRepository<UserActivity,UUID> {
@Query("select u from UserActivity u join Customer.id")
List<UserActivity> findAllByUserIsNotNullOrderByCreatedDesc(Pageable pageable);
}
但hibernate告訴我,我指定了一個無效的路徑。
你能幫我解答嗎?
類型取實體名稱,而不是DiscriminatorValue。 https://stackoverflow.com/questions/3765948/how-do-i-query-for-only-superclass-entities-in-a-jpql-query – Chris
是的。這就是爲什麼'TYPE(用戶)'。用戶是映射的實體。 –
供應商支持它很棒,但JPA需要實體類作爲輸入參數,將鑑別器列中使用的值分開,或者甚至用於確定您正在尋找的實際類型的類中使用的機制。您對該類型的回答是正確的,但您無需指定Discriminator註釋,只需使用該類即可。 – Chris