在JPA中定义自定义ID

时间:2018-10-11 07:42:41

标签: spring spring-boot spring-data-jpa

我是春季JPA的新手。我的要求是拥有一个复合列的ID。我有一个分类帐表,其中有两列log_id和order_id。我必须为相同的order_id插入多个记录,但我希望log_id每次仅在相同的order_id出现时才应增加。

赞:

order_id        log_id
--------         -----
1234              1
1234              2
1234              3
1235              1

春季JPA是否有可能。有人可以帮忙吗? 预先谢谢!!!

1 个答案:

答案 0 :(得分:0)

您可以使用@IdClass和@GeneratedValue实现。

代码示例:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;

@Entity
@Table(name="LEDGER")
@IdClass( PK.class )
public class Ledger {

    @Id
    @Column(name = "log_id")
    @GeneratedValue
    public int logId;

    @Id
    @Column(name = "order_id")
    public int orderId;

    public String otherFields;
}

Id类

import java.io.Serializable;

public class PK implements Serializable{
    public int logId;
    public int orderId;

    public PK() {

    }

    public PK(int logId, int orderId) {
        super();
        this.logId = logId;
        this.orderId = orderId;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + logId;
        result = prime * result + orderId;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        PK other = (PK) obj;
        if (logId != other.logId)
            return false;
        if (orderId != other.orderId)
            return false;
        return true;
    }

}

如需进一步阅读,请点击以下链接

  1. IdClass
  2. GeneratedValue
  3. Examples