[英]Hibernate is not getting Inherited attributes in parent class of pojo
[英]How to downcast parent class to inherited child class in hibernate?
我有以下課程:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class UserDO{
// ...
}
@Entity
public class ReviewerDO extends UserDO{
private String reviewerType;
}
所以應該可以實例化一個用戶。 在某些時候,用戶可能會被提升為更專業的用戶(例如ReviewerDO
)。 因此,以下服務負責促銷:
public void assignUserToReviewer(UserDO userDO) {
ReviewerDO reviewerDO = (ReviewerDO) userDO;
reviewerDO.setReviewerType("COMPLIANCE");
reviewerRepository.save(reviewerDO);
}
它失敗了,因為它無法將UserDO
類型轉換為ReviewerDO
:
無法將 UserDO 強制轉換為 Reviewer
如何做到這一點?
有兩種類型轉換方法:
向上轉換(子 class 到父 class 和子 class 到子類)
向下轉換(父class到子類)
您面臨的問題的示例。
package com.example;
class UserDO {
//..
}
class ReviewerDO extends UserDO {
private String reviewerType;
public ReviewerDO(String reviewerType) {
this.reviewerType = reviewerType;
}
}
public class Example {
public static void main(String[] args) {
UserDO user = new UserDO(); // upcast (child to child)
/*
* This will throw ClassCastException as direct downcasting
* is not possible.
*/
ReviewerDO reviewerDO = (ReviewerDO) user; //downcast
}
}
Output:
Exception in thread "main" java.lang.ClassCastException: com.example.UserDO cannot be cast to com.example.ReviewerDO
解決方案可以有兩種方式:
例如:
package com.example;
class UserDO {
//..
}
class ReviewerDO extends UserDO {
private String reviewerType;
public ReviewerDO(String reviewerType) {
this.reviewerType = reviewerType;
}
}
public class Example {
public static void main(String[] args) {
UserDO user = new ReviewerDO(); // upcast (child to parent)
/*
* Here downcasting happens. This doesn't throw
* ClassCastException.
*/
ReviewerDO reviewerDO = (ReviewerDO) user; //downcast happens indirectly.
}
}
例如:
public void assignUserToReviewer(UserDO userDO) {
ReviewerDO reviewerDO = Helper.createReviewerDO(userDO);
reviewerDO.setReviewerType("COMPLIANCE");
reviewerRepository.save(reviewerDO);
}
public final class Helper {
public static ReviewerDO createReviewerDO(UserDO userDO) {
ReviewerDO r = new ReviewerDO();
r.setSomething(userDO.getSomeThing());
...
return r;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.