Java JPA一对多,无实体
在JPA中,是否可以在不创建实体的情况下建立一对多关系 例如,假设我有一个有几个“幸运数字”的幸运饼干。这些幸运数字存储在一个只有[Cookie\u id,lucky\u number]的表中 在JPA中,是否可以获得幸运数字列表而不必为其创建专用实体? 这是我尝试过的,但它给了我一个错误,因为Java JPA一对多,无实体,java,jpa,Java,Jpa,在JPA中,是否可以在不创建实体的情况下建立一对多关系 例如,假设我有一个有几个“幸运数字”的幸运饼干。这些幸运数字存储在一个只有[Cookie\u id,lucky\u number]的表中 在JPA中,是否可以获得幸运数字列表而不必为其创建专用实体? 这是我尝试过的,但它给了我一个错误,因为使用@OneToMany或@ManyToMany针对未映射的类 @Entity @Table(name = "FORTUNE_COOKIE") class FortuneCookie
使用@OneToMany或@ManyToMany针对未映射的类
@Entity
@Table(name = "FORTUNE_COOKIE")
class FortuneCookie {
@Id
@Column(name = "ID")
Integer id;
@Column(name = "MESSAGE")
String message;
@OneToMany
@JoinTable(name = "LUCKY_NUMBERS", joinColumns = {@JoinColumn(name = "COOKIE_ID")})
List<Integer> luckyNumbers;
}
@实体
@表(name=“FORTUNE_COOKIE”)
类幸运饼干{
@身份证
@列(name=“ID”)
整数id;
@列(name=“MESSAGE”)
字符串消息;
@独身癖
@JoinTable(name=“LUCKY_number”,joinColumns={@JoinColumn(name=“COOKIE_ID”)})
列出幸运数字;
}
您可以使用@ElementCollection
注释来声明多值映射。集合的记录将存储在单独的表中,您可以使用@CollectionTable
注释定义该表
@Entity
@Table(name = "FORTUNE_COOKIE")
class FortuneCookie {
@Id
@Column(name = "ID")
Integer id;
@Column(name = "MESSAGE")
String message;
@ElementCollection
@CollectionTable(name="LUCKY_NUMBERS_TABLE")
@Column(name="LUCKY_NUMBERS")
List<Integer> luckyNumbers;
}
@实体
@表(name=“FORTUNE_COOKIE”)
类幸运饼干{
@身份证
@列(name=“ID”)
整数id;
@列(name=“MESSAGE”)
字符串消息;
@元素集合
@CollectionTable(name=“LUCKY\u number\u TABLE”)
@列(名称=“幸运号”)
列出幸运数字;
}
您可以联接表,这些表在JPA域中表示为实体。因此,当您使用诸如-OneToMany或ManyToMany之类的注释时,JPA期望与另一个实体建立关系。这里您定义了一个整数列表,它不是一个实体。因此,定义这样的关系,您可以使用@ElementCollection。这将创建另一个表,该表具有相同的一对多关系和默认表名,可以使用其他一些注释进行自定义
因为您没有提到您正在使用的JPA提供程序,所以我假设是hibernate。
有关列表/字符串集/整数映射的更多详细信息,请参阅以下文档。。。。。。在一个n实体内
以下是问题的解决方案+1给@fg78nc,他让我走上了正确的道路
@Entity
@Table(name = "FORTUNE_COOKIE")
class FortuneCookie {
@Id
@Column(name = "ID")
Integer id;
@Column(name = "MESSAGE")
String message;
@ElementCollection
@CollectionTable(
name = "LUCKY_NUMBERS",//table name to join on
joinColumns = @JoinColumn(
//join LUCKY_NUMBERS on COOKIE_ID = ID
name = "COOKIE_ID",
referencedColumnName = "ID"
)
)
@Column(name = "LUCKY_NUMBER") //column you want in the list
List<Integer> luckyNumbers;
}
@实体
@表(name=“FORTUNE_COOKIE”)
类幸运饼干{
@身份证
@列(name=“ID”)
整数id;
@列(name=“MESSAGE”)
字符串消息;
@元素集合
@收集表(
name=“LUCKY_NUMBERS”,//要加入的表名
joinColumns=@JoinColumn(
//加入COOKIE上的幸运号码\u ID=ID
name=“COOKIE\u ID”,
referencedColumnName=“ID”
)
)
@Column(name=“LUCKY\u NUMBER”)//列表中需要的列
列出幸运数字;
}
改编自: