Java 持久性复合 ID

Java Persistence Composite ID

我正在尝试插入带有复合主键的记录,但在保存新记录时我收到此消息:

e = (org.springframework.orm.jpa.JpaSystemException) org.springframework.orm.jpa.JpaSystemException: Could not set field value [POST_INSERT_INDICATOR] value by reflection...

@Getter
@Setter
@Entity
@EqualsAndHashCode
@Table(name = "produto")
@IdClass(ProdutoId.class)
public class Produto implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_produto")
    private Long idProduto;

    @Id
    @Column(name = "oficina", insertable = false, updatable = false)
    private Long idOficina;

    @ManyToOne
    @JoinColumn(name = "oficina")
    private Oficina oficina;

}



@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@Data
public class ProdutoId implements Serializable {

    public Long idProduto;
    public Long idOficina;

}


@Repository
public interface ProdutoRepository extends JpaRepository<Produto, ProdutoId> {}

有没有人见过这样的错误?

要创建复合主键,你可以参考这个例子,

@Entity
@Table(name="testuserrole")
public class UserRole{
    @EmbeddedId
    private UserRoleId id = new UserRoleId();

    public UserRoleId getId() {
        return id;
    }

    public void setId(UserRoleId id) {
        this.id = id;
    }

    @Transient
    public long getUserId() {
        return id.userId;
    }

    public void setUserId(long userId) {
        id.userId=userId;
    }

    @Transient
    public long getRoleId() {
        return id.roleId;
    }

    public void setRoleId(long roleId) {
        id.roleId=roleId;
    }

}

@Embeddable
class UserRoleId implements Serializable {

    @Column(name = "user_id")
    public long userId;

    @Column(name = "role_id")
    public long roleId;

}