資料庫模式的組成如下:
CREATE TABLE `pages`
(
`identifier` INT(11) NOT NULL auto_increment,
`title` VARCHAR(150) NOT NULL,
PRIMARY KEY (`identifier`),
)
CREATE TABLE `tags`
(
`identifier` INT(11) NOT NULL auto_increment,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`identifier`)
)
CREATE TABLE `pages_tags`
(
`page` INT(11) NOT NULL,
`tag` INT(11) NOT NULL,
KEY `pagetag_page` (`page`),
KEY `pagetag_tag` (`tag`),
CONSTRAINT `pages_tags_ibfk_1` FOREIGN KEY (`page`) REFERENCES `pages` (
`identifier`),
CONSTRAINT `pages_tags_ibfk_2` FOREIGN KEY (`tag`) REFERENCES `tags` (
`identifier`)
)
每個頁面可以有很多標簽,每個標簽可以分配給很多頁面(ManyToMany),在頁面物體類上,多對多關系是這樣定義的
@ManyToMany
@JoinTable(
name = "pages_tags",
joinColumns = { @JoinColumn(name = "page", nullable = false) },
inverseJoinColumns = { @JoinColumn(name = "tag", nullable = false) }
)
private List<Tag> tags;
如何僅獲取主鍵而不是整個標簽物體?我知道我可以使用 @NamedQuery 但如果在物體類中我可以添加一個整數串列欄位會更好
@NamedQuery(name = "Page.findTags", query = "SELECT p.tag FROM PageTag p WHERE p.page = :identifier")
簡而言之,我希望休眠自動生成包含該pages_tags.tag頁面欄位的整數串列,而不是獲取標記物體串列
我正在使用:spring-boot-starter-data-jpa 3.0.0-RC1
uj5u.com熱心網友回復:
答案是@ElementCollection。請在這里檢查;
https://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#d5e5405
uj5u.com熱心網友回復:
假設您有以下映射:
@Entity
@Table(name = "pages")
public class Page {
@Id
@Column(name = "identifier")
private Long id;
@Column(name = "title")
private String title;
@ManyToMany
@JoinTable(
name = "pages_tags",
joinColumns = @JoinColumn(name = "page", nullable = false),
inverseJoinColumns = @JoinColumn(name = "tag", nullable = false)
)
private List<Tag> tags;
// ...
}
@Entity
@Table(name = "tags")
public class Tag {
@Id
@Column(name = "identifier")
private Long id;
@Column(name = "name")
private String name;
// ...
}
您可以使用以下查詢:
@NamedQuery(
name = "Page.findTags",
query = "select t.id from Page p join p.tags t where p.id = :id"
)
List<Long> tagIds = em.createNamedQuery("Page.findTags")
.setParameter("id", 2L).getResultList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/523025.html
標籤:休眠弹簧数据-jpa
