gpt4 book ai didi

java - 使用 JPA 和 Oracle 管理具有增量 ID 的复合主键

转载 作者:行者123 更新时间:2023-11-30 09:30:56 25 4
gpt4 key购买 nike

使用 JPA,我尝试为多语言内容修改一个持久对象,这意味着我需要一个复合键、一个 ID 和一种语言。 id 还需要使用序列递增(我使用的是 Oracle)。怎么做到的?

目前,我得到了一个 Contenu 类:

@Entity
@Table(name = "CONTENUS")
public class Contenus implements java.io.Serializable {

private ContenusId id;
...
}

和一个 ContenusId 类:

@Embeddable
public class ContenusId implements java.io.Serializable {

private Long id;
private String langue;
...
}

但这不处理增量 id。有什么想法吗?

最佳答案

首先,您需要为 JPA 实体管理器创建 ID 类,以了解如何检查两个对象是否相等。此 ID 类应覆盖 equals()hashcode() 方法。

/**
* ContenusPK.java
*
* $Source$
*/
import java.io.Serializable;

public class ContenusPK implements Serializable
{
public static final long serialVersionUID = 1L;

private Long id;
private String langue;

/*
* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((langue == null) ? 0 : langue.hashCode());
return result;
}

/*
* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj)
{
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ContenusPK other = (ContenusPK) obj;
if (id == null)
{
if (other.id != null)
return false;
}
else if (!id.equals(other.id))
return false;
if (langue == null)
{
if (other.langue != null)
return false;
}
else if (!langue.equals(other.langue))
return false;
return true;
}

/**
* @return the serialversionuid
*/
public static long getSerialversionuid()
{
return serialVersionUID;
}

/**
* @return the id
*/
public Long getId()
{
return id;
}

/**
* @return the langue
*/
public String getLangue()
{
return langue;
}

/**
* @param id the id to set
*/
protected void setId(Long id)
{
this.id = id;
}

/**
* @param langue the langue to set
*/
protected void setLangue(String langue)
{
this.langue = langue;
}

}

然后你需要声明你的实体的复合主键属性,将ID类与实体相关联并定义ID​​生成策略,如下:

@IdClass(ContenusPK.class)
@Entity
@TableName(name="")
public class Contenus {

@Id
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "GENERATOR_NAME")
@SequenceGenerator(
name = "GENERATOR_NAME",
sequenceName = "SEQUENCE NAME IN DB")
@Column(name = "CONTENUS_ID")
private Long id;

@Id
@Column(name = "LANGUE")
private String langue;

...
}

关于java - 使用 JPA 和 Oracle 管理具有增量 ID 的复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065309/

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