Я использую Spring Data JPA и Hibernate как поставщик. Я создал несколько классов репозитория, которые распространяются на класс JPARepository<Entity,Serializable>
. Я терпеть неудачу в тот момент, когда я получаю одно сущность, которое приносит прикрепленные/связанные объекты вместе с ним! которые либо подключены через @OneToOne
@OneToMany
и т. д. Как избежать сбора связанных объектов?
Я пробовал с @OneToMany(fetch=FetchType.LAZY)
и т.д., но все равно не повезло. Ниже приведены мои Java-код:
RepositoryКак реализовать ленивую загрузку с использованием данных Spring JPA (JPARepository)?
public interface TicketRepository extends JpaRepository<Ticket, Integer>{
}
Билет Entity
@Entity
@Table(name = "tbl_tickets")
public class Ticket {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "customer", nullable = false, length = 256)
private String customer;
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn
private User creator;
// ... other properties
}
Сервис
@Service
public class TicketService {
public Ticket save(Ticket obj,String id) {
User user = userService.findById(Integer.valueOf(id));
obj.setCreator(user);
Ticket savedTicket = ticketRepository.save(obj);
}
}
savedTicket
всегда выбирает пользователя entit и я не хочу этого делать. Как я мог это достичь?
Благодаря
Ваш код извлекает пользовательский объект и устанавливает «создатель» в билете, и вы ожидаете, что создатель будет пустым? –
@RC. вы правы, из-за сопоставления я должен установить это так! может быть, я неправильно настроен! любая идея по отображению части? – agpt
есть проблемы с ленивым изложением OneToOne (возможно, решенным в ответе Харшала Патила ниже), однако у вас не должно быть проблем с ленивым изложением OneToMany (fetch = FetchType.LAZY). Если поле инициализируется такой аннотацией, это может означать, что вы обращаетесь к объекту, аннотируемому с @OneToMany (который должен быть набором или списком и т. Д.) Где-то до этого. –