数据库模式的组成如下:
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")
简而言之,我希望hibernate自动生成一个包含该页面的pages_tags.tag
字段的整数列表,而不是获得一个标记实体列表
我正在使用:春季启动启动数据jpa 3.0.0-RC1
答案是@ElementCollection
。请在这里查看;
https://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#d5e5405