Я новичок в среде Hibernate. У меня есть основной вопрос, и я все еще пытаюсь понять, почему люди выбирают Hibernate вместо SQL.
У меня есть две таблицы, допустим, одна - пользователь, другая - книга.
У пользователя может быть много книг, но у книги может быть только один владелец.
Если я использовал SQL, я пытаюсь написать на
Table User,
int uid
PRIMARY KEY (uid)
Table Book,
int bid
int oid //ownerid
PRIMARY KEY (bid)
FOREIGN KEY (oid) REFERENCES User(uid)
Я не мог сделать это в Hibernate. Я пробовал следующее:
Сгенерировал пользовательскую таблицу без какого-либо отношения, только аннотация @Id
для uid.
@Entity
@Table(name="USER")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "uid")
private Long uid;
public Long getUid()
{ return uid;}
}
Сформировал таблицу книг, но я не могу понять этот момент. Все в интернете говорит, что мне нужно использовать @ManyToOne
и @JoinColumns
. Если я использую их, мне нужен объект:
@Entity
@Table(name = "BOOK")
public class Book{
@ManyToOne
@JoinColumn(name="uid",
referencedColumnName = "What should I write here?")
@Column(name ="oid") //owner id
private User user;
}
1- Зачем мне нужно создавать пользовательский объект для моего uid в таблице книг? Я просто хочу сохранить идентификатор пользователя в своей таблице книг с ограничением внешнего ключа (если пользователь не существует, книга также не может существовать)
2- Также, если я хочу получить ID пользователя владельца, должен ли я использовать это:
public Long getOwnerId()
{
return user.getUid();
}
3- Что мне делать, если я хочу сменить владельца книги? Поскольку в моем объекте книги есть целый пользователь, как я могу обновить только идентификатор владельца в таблице книг?