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

标签 java mysql hibernate

我正在尝试使用 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/

相关文章:

php - 在php中解密密码

mysql 从连续行中选择最大的字段值

可空多对一的 Hibernate 默认加入

java - hibernate3 maven 插件 :make hbm2java generate hibernate annotations instead of ejb3 annotations

Java 正则表达式 Anything{100}SomethingAnything{100},需要保存左右字符

java - 等待和通知实现 Runnable 和扩展 Thread 示例

java - 我们如何通过 java 驱动程序查询嵌入式文档?

java - 全屏上的 Swing 布局边框边距

php - 设计具有多个变量的工作调度数据库?

java - 当在复合键中使用时,JPA AttributeConverter 在 Spring-data/hibernate 查询中不被接受