Hibernate从一个表中获取数据,该表是JPA中连接的一部分

juzqafwq  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(99)

我有一个问题。我有两个表在数据库和两个类的Hibernate。
班级物品:

@Entity
@Table(name = "Artikel")
public class Artikel{
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String artikelbezeichnung;
    private int artikelnummer;
    private Float preis;
    
    @OneToMany(mappedBy = "artikel", fetch = FetchType.LAZY)
    @JsonManagedReference
    private List<Artikeldetails> artikeldetails;

分类文章详细信息

@Entity
@Table(name="ARTIKELDETAILS")
public class Artikeldetails {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    private String artikeldetail;
    private String artikelcustom;
    private String artikelselektion;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="artikelid")
    @JsonBackReference
    private Artikel artikel;

JPA查询:

List<Artikel> findByArtikelnummer(@Param("artikelnummer") int artikelnummer);

结果是例如:

[{
        "id": 3,
        "artikelbezeichnung": null,
        "artikelnummer": 123,
        "preis": 123.0,
        "artikeldetails": [{
                "id": 4,
                "artikeldetail": "DetailNummer 1",
                "artikelcustom": "Detail Nummer 1",
                "artikelselektion": "Detail Nummer 1"
            }, {
                "id": 5,
                "artikeldetail": "DetailNummer 2",
                "artikelcustom": "Detail Nummer 2",
                "artikelselektion": "Detail Nummer 2"
            }, {
                "id": 6,
                "artikeldetail": "DetailNummer 3",
                "artikelcustom": "DetailNummer 3",
                "artikelselektion": "DetailNummer 3"
            }
        ]
    }
]

这是很好的工作,但现在我只想只得到没有加入的文章数据。我应该怎么做?我必须为此创建一个新的类吗?
我也试着改变这条线:

@Query(value = "SELECT a FROM Artikel a where a.artikelnummer = :artikelnummer")
List<Artikel> findByArtikelnummer(@Param("artikelnummer") int artikelnummer);

但这没用。

pn9klfpd

pn9klfpd1#

我现在有了解决方案:
如果您将fetch = FetchType.LAZY包含到OneToMany和ManyToOne中,则可以使用

@Query(value = "SELECT a FROM Artikel a where a.artikelnummer = :artikelnummer")
List<Artikel> findByArtikelnummer(@Param("artikelnummer") int artikelnummer);

如果你选择FetchType.Eager他会自动加入每次OneToMay关系。

相关问题