【发布时间】:2021-05-06 15:33:44
【问题描述】:
我正在使用 springboot(spring-boot-starter-parent 2.3.0 版本)和 Jpa。我有 User 类,它是父类,UserEmails 是子实体。
用户实体
@Entity
@Table(name = "user")
public class User extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@NotEmpty(message = "Name cannot be empty")
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "user",fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonManagedReference
private List<UserEmails> userEmails = new ArrayList<UserEmails>();
//setters and getters
public void setUserEmails(List<UserEmails> userEmails) {
this.userEmails= userEmails;
this.userEmails.forEach(userEmail->{
userEmail.setUser(this);
});
}
}
UserRoles 实体
@Entity
@Table(name = "user_emails")
public class UserEmails extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="email")
private String email;
@JsonBackReference
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id" , referencedColumnName = "id", nullable=true)
private User user;
//getters and setters
}
问题是,即使我在关系的双方都使用 fetch 类型作为惰性,但当我调用 getUserById 或 getAllUsers 时,jpa 也会加载用户电子邮件。
用户服务实现
@Service
public class UserServiceImpl extends BaseServiceImpl implements UserService {
private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
UserDAO userDAO;
@Override
public User getUserById(int id) {
logger.info("Executing getUserById() in user service");
User user = null;
try {
user = userDAO.findById(id);
} catch (DataAccessException e) {
String message = "Some message"
throw new Exception(message, e);
}
if (user == null) {
String message = "Some message"
throw new ResourceNotFoundException(message);
}
return user;
}
}
用户DAO
@Repository
public interface UserDAO extends JpaRepository<User, Long>{
public User findById(int id);
}
【问题讨论】:
标签: spring-boot jpa