excepção da mola APP durante a inserção valor Json (usando hibernação-tipos-52)

Nastrius:

Eu estou usando hibernate-tipos-52 por Vlad Mihalcea juntamente com Primavera JPA para inserir um POJO como um valor JSON em meu banco de dados PostgreSQL.

Meu entidade é definido da seguinte forma:

@Entity
@Table(name = "hoshin_kanri")
@TypeDef(
        name = "jsonb",
        typeClass = JsonBinaryType.class
)
public class HKEntity {

    @Id
    @Column(name = "id_ai", columnDefinition = "bigint")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id_ai;

    @Column(name = "id_hk", columnDefinition = "bigint")
    private Integer id_hk;

    @Type(type = "jsonb")
    @Column(name = "hk_data", columnDefinition = "jsonb")
    private HKData hk_data;

    public HKEntity(Integer id_hk, HKData hk_data) {
        this.id_hk = id_hk;
        this.hk_data = hk_data;
    }

E este é o POJO:

public class HKData {
    private String name;
    private Year targetYear;
    private String description;

    public HKData(String name, Year targetYear, String description) {
        this.name = name;
        this.targetYear = targetYear;
        this.description = description;
    }

Eu defini uma interface de repositório para consultar os objetos no banco de dados:

public interface HKRepository extends CrudRepository<HKEntity, Integer> {

    @Query(value = "INSERT INTO 'hk_data' VALUES :Entity", nativeQuery = true)
    void test_json(@Param("Entity") HKEntity e);
}

e um teste de serviço só para ver se ele está funcionando corretamente:

@Service
public class HKService {

    @Autowired
    HKRepository hk_repository;

    public String json_test() {
        HKData d = new HKData("Prova", Year.now(), "Descrizione");
        HKEntity e = new HKEntity(1,d);
        hk_repository.test_json(e);
        return "Value created";
    }
}

No entanto, eu continuo recebendo a seguinte exceção:

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.ehk.rest.entity.HKEntity

Eu tentei muitas correções sugeridas para este erro, mas eu não consigo entender a natureza do próprio erro. O que está errado com esta abordagem? Ao lado de uma ponta para a fixação isso, eu gostaria de entender por que esse erro é originado.

Sergei Petunin:

Os meios de erro que há uma instância da HKEntityentidade que é referenciado a partir de algum lugar na sessão atual Hibernate, e você persistido nem explicitamente neste caso, nem instruído Hibernate para persistir lo cascadly. É difícil dizer o que exatamente está acontecendo, mas há alguns problemas com seu código que poderia ter confundido quer framework Spring dados JPA, ou o próprio Hibernate.

Em primeiro lugar, da Primavera CrudRepositoryinterface já tem um save()método, para que você possa usá-lo em vez de seu test_json()método.

Eu também não vejo nenhuma razão em inserir uma entidade Hibernate com uma consulta nativa, e eu nem sequer penso que esta é uma consulta válida. Seu test_json()método tenta inserir nativamente uma HKEntityentidade para a hk_datamesa, mas a HKEntityentidade deve ser guardado na hoshin_kanritabela, de acordo com o seu mapeamento.

Assim, gostaria de alterar o código de serviço da seguinte forma:

    public String json_test() {
        HKData d = new HKData("Prova", Year.now(), "Descrizione");
        HKEntity e = new HKEntity(1,d);
        hk_repository.save(e);
        return "Value created";
    }

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=372838&siteId=1
Recomendado
Clasificación