gpt4 book ai didi

java - 如何创建 hibernate 复合键并从表中获取值

转载 作者:行者123 更新时间:2023-11-29 21:15:38 25 4
gpt4 key购买 nike

我正在尝试使用 hibernate 注释从未定义主键的 MySQL 数据库表中获取数据。

然而,事实是该表的 2 列在表中是唯一的。如何使用 hibernate 注释实现相同的效果?

这是我的代码

@Entity
@Table(name = "coc_order_view")
public class CoCOrderDetailsTest {

@EmbeddedId
private MyJoinClassKey key;

@Column(name = "coupon_code")
private String couponCode;

some other columns and their getters and setters .....

@Embeddable
public class MyJoinClassKey implements Serializable {

private static final long serialVersionUID = -5L;

@Column(name = "product_id")
private int productId;

@Column(name = "order_id")
private int orderId;

gettes and setters....

这是我的条件查询

Criteria criteria = getHibernatetemplate().getSession().createCriteria(CoCOrderDetailsTest.class);
criteria.add(Restrictions.eq("status", "New"));
ArrayList<CoCOrderDetailsTest> orderDet = (ArrayList<CoCOrderDetailsTest>) getHibernatetemplate().get(criteria);

我无法从数据库获取所有值。请提出一些解决方案。

最佳答案

再次阅读您的问题后,不确定这是否有帮助。您不能拥有没有主键的表。阅读 this article 中的前几段

也就是说,如果您可以更改表并在这些字段上添加主键,您需要将 @IdClass 注释添加到 CoCOrderDetailsTest 的类签名中,然后删除类中的 @embeddable 和 @embeddedId 表示法。

如果您可以向表中添加字段,另一种选择是使用 @GeneratedValue在添加的主键字段上,当然用@Id对其进行注释。

如果您无法更改表,那么您就无法使用 JPA,而必须使用 JDBC。

参见http://docs.oracle.com/javaee/5/api/javax/persistence/IdClass.html

一个工作示例:

@Entity
@Table(name = "player_game_log")
@IdClass(PlayerGameLogId.class)
public class PlayerGameLog {

@Id
@Column(name = "PLAYER_ID")
private Integer playerId;

@Id
@Column(name = "GAME_ID")
private String gameId;
....

和 id 类(注意 id 类上没有注释)....

public class PlayerGameLogId implements Serializable {

private static final long serialVersionUID = 1L;
private Integer playerId;
private String gameId;

尝试:

String hql = "FROM CoCOrderDetailsTest WHERE status = :status";
Query query = session.createQuery(hql);
query.setParameter("status","New");
List results = query.list();

我通常使用 EntityManager 而不是 session ,所以我不熟悉这种语法 - 而且我通常会在要返回的列表中添加一个类型 - 例如:

List<CoCOrderDetailsTest> results = query.list();

关于java - 如何创建 hibernate 复合键并从表中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35970255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com