我有兩個物體
。
public class UserLastLogin implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private LocalDateTime date;
。
private User user。
}
我使用帶有spring data和jpa的spring boot,最新版本的hibernate。 在檔案中,@OneToOne是默認的EAGER,但是當我獲得急切的獲取物件時,當我在獲取方法中沒有使用@Transactional時,我得到了lazyInitializationException。我不明白為什么......
。 public UserDto getUser(span class="hljs-built_in">String userName) {
var user= userRepository.getById(userName)。
d.getSystemUserLastLogin(); //this throw lazy initialization exception[/span
return mapper.entityToDto(d)。
}
當我將這個方法標記為@Transactioal時,這個方法可以作業。但是,不建議在獲取方法中使用事務。我需要在這種關系中使用EAGER fetch。
當我查看hibernate查詢時,我有一個選擇,但子物件不可用。
Hibernate:
選擇
user0_.name as nazwa1_4_0_,
user2_.name as name1_23_2_,
user2_.data as data3_23_2_
從
用戶0_
左側外部連接
last_login user2_
onuser0_.name=user2_.name的資料。
其中
user0_.name=?
uj5u.com熱心網友回復:
嘗試洗掉@PrimaryKeyJoinColumn。我很難理解你為什么需要它
。uj5u.com熱心網友回復:
我建議你使用二級表來代替,比如:
@Entity
@Table(name = "user")
@Data
@Builder
@EqualsAndHashCode(callSuper=false)
@ToString
@AllArgsConstructor
@NoArgsConstructor[/span
@SecondaryTable(name = "lastLogin", pkJoinColumns = @PrimaryKeyJoinColumn(name = "name") )
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "name" )
private String name;
@Column(table = "lastLogin", name = "date")
private LocalDateTime date;
}
更多詳情請參見https://www.baeldung.com/jpa-mapping-single-entity-to-multiple-tables。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/327136.html
標籤:
上一篇:如何用串列創建物體
下一篇:ManyToOne雙重選擇冬眠
