Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA一对多,无实体_Java_Jpa - Fatal编程技术网

Java JPA一对多,无实体

Java JPA一对多,无实体,java,jpa,Java,Jpa,在JPA中,是否可以在不创建实体的情况下建立一对多关系 例如,假设我有一个有几个“幸运数字”的幸运饼干。这些幸运数字存储在一个只有[Cookie\u id,lucky\u number]的表中 在JPA中,是否可以获得幸运数字列表而不必为其创建专用实体? 这是我尝试过的,但它给了我一个错误,因为使用@OneToMany或@ManyToMany针对未映射的类 @Entity @Table(name = "FORTUNE_COOKIE") class FortuneCookie

在JPA中,是否可以在不创建实体的情况下建立一对多关系

例如,假设我有一个有几个“幸运数字”的幸运饼干。这些幸运数字存储在一个只有[Cookie\u id,lucky\u number]的表中

在JPA中,是否可以获得幸运数字列表而不必为其创建专用实体?

这是我尝试过的,但它给了我一个错误,因为
使用@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”)//列表中需要的列
列出幸运数字;
}
改编自: