我有兩個班,User和Team。每個人都User可以有一個favouriteTeam,但不是必須的。
創建新用戶時,會發出一個請求,其中包含用戶的用戶名和teamID他們最喜歡的團隊的用戶名。如果用戶沒有最喜歡的球隊,則teamID值為null。
在TeamRepository中,使用提供的值findByTeamId呼叫。teamID如果teamID是null,則查詢的表中沒有teamID值為nullso的findByTeamId行將回傳空值。因此Optional<Team>是必需的。
但是,這在構造 new 時會導致問題User,因為Team需要型別引數,而不是Optional<Team>. 我嘗試將型別更改為Users.favouriteTeam,Optional<Team>但這會導致不同的問題(org.springframework.orm.jpa.JpaSystemException: Error accessing field [private long mygroup.tqbcbackend.model.Team.teamID] by reflection for persistent property [mygroup.tqbcbackend.model.Team#teamID] : Optional.empty; nested exception is org.hibernate.property.access.spi.PropertyAccessException: Error accessing field [private long mygroup.tqbcbackend.model.Team.teamID] by reflection for persistent property [mygroup.tqbcbackend.model.Team#teamID] : Optional.empty)。
處理這個問題的最佳方法是什么?
用戶.java
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "UserID")
private long userID;
@Column(name = "Username")
private String username;
@Nullable
@ManyToOne(
targetEntity = Team.class,
fetch = FetchType.LAZY
)
@JoinColumn(name = "FavouriteTeamID")
private Team favouriteTeam;
public User() {
}
public User(String username, Team favouriteTeam) {
this.username = username;
this.favouriteTeam = favouriteTeam;
}
// getters and setters
}
團隊.java
@Entity
@Table(name = "Teams")
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "TeamID")
private long teamID;
@Column(name = "TeamName")
private String teamName;
@OneToMany(
targetEntity = User.class,
fetch = FetchType.LAZY,
mappedBy = "favouriteTeam"
)
private List<User> fans;
// constructors and getters and setters
}
TeamRepository.java
@Repository
public interface TeamRepository extends JpaRepository<Team,String>{
public Optional<Team> findByTeamID(Long teamID);
}
uj5u.com熱心網友回復:
Hence Optional<Team> is required.,不,它不是(但方便)。
你可以申報
public Team findByTeamID(Long teamID);
(Team) null如果 teamID 不存在,您會得到回復。
如果你留在 Optional 你可以用
new User(((Optional)team).isPresent()?((Optional)team).get():null);
uj5u.com熱心網友回復:
嘗試在用戶的建構式中處理它
如果(最喜歡的團隊 == null){ ... }
別的{ ... }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462561.html
下一篇:用于查詢最新記錄的JPA規范謂詞
