Hibernate many-to-one и one-to-many?

Существует две сущности, основная(UserEntity) и подключаемая(TodoEntity)
В теории нужно запросом userEntity.getTodo(); Получать лист всех записей в таблице Todo, которые связаны с конкретным пользователем. Связываются следующим образом - поле parent_id в таблице todo должно связываться с полем id в таблице users, где id является первичным ключом. Т.е. один юзер - много дел, к нему привязанных.
Пробовал реализовать one-to-many и many-to-one, получал ошибку маппинга.
Could not determine type for: java.util.Set, at table: test_users, for columns: [org.hibernate.mapping.Column(todoEntity)]
, погуглив нашел, что проблем может быть великое множество, но ни одно из уже найденных решений так и не решило проблемы. Делал по этому гайду(первая часть) Гайд
Вопроса два. Первый - стоит ли использовать связь такого рода, если в UserDAO можно просто добавить функцию для получения всех записей из таблицы todo, где parent_id: id? Или это bad practice, если так - почему?
Второй. Если все-таки стоит использовать связь, как реализовать? Носом в гайд или краткий код, перепробовал много гайдов различных, ни один не заработал.
Спасибо.
  • Вопрос задан
  • 25738 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Haderach
Можно например вот так попробовать :
Предположим у вас есть класс Task, что-то похожее на :
@Entity 
@Table (name = "todo")
public class Task {
.....
@ManyToOne
@JoinColumn(name = "userId")
private User responsibleUser;
.....
}


И класс юзер, например вот так :
@Entity 
@Table (name = "users")
public class User {
.....
@Id
@Column (name = "userId")
private Integer userId;

@OneToMany (mappedBy = "responsibleUser")
private Set<Task> tasks = new HashMap<Task>();
.....
}

Ну и дальше уже то, что вам нужно по реализации.
P.S. Код писал по памяти, так что за промахи не серчайте, думаю основная идея понятна ;)
Ответ написан
FanKiLL
@FanKiLL
@Entity
public class User {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	@Column(unique = true, nullable = false)
	private String userName
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
	private Set<Todo> todos = new HashSet<Todo>();
}


@Entity
public class Todo {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;
	@ManyToOne()
	@JoinColumn(name = "user_id")
	private User user;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы