gpt4 book ai didi

java - 传递给持久化的分离实体

转载 作者:行者123 更新时间:2023-11-29 06:00:50 25 4
gpt4 key购买 nike

使用:hibernate 3.6.10、maven 2、postgres 9。我有必须工作的代码,但它没有。在我使用 hibernate 3.6.2 并遇到非常沮丧的错误之前:java.lang.ClassCastException: org.hibernate.action.DelayedPostInsertIdentifier 无法转换为 java.lang.Long

但是更新到 3.6.10 后错误变得更明显了:javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: 分离的实体传递给持久化

代码是标准领域模型:

实体:

@Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
@Entity
@Table(schema = "simulators", name = "mySimulator_card")
public class MySimulatorCard {

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

@Column(name = "account_number", unique = true, nullable = false)
private String accountNumber;

等...

道:

public abstract class AbstractDao<E, PK extends Serializable> implements Dao<E, PK> {

private EntityManager entityManager;

public EntityManager getEntityManager() {
return entityManager;
}

@PersistenceContext(unitName = "MySimulator")
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

public abstract Class<E> getEntityClass();

@Override
public void persist(E e) {
getEntityManager().persist(e);//<-- some thing wroooong
}

等...

根据表格:

CREATE TABLE simulators.mySimulator_card
(
id bigserial NOT NULL,
account_number character varying(255) NOT NULL,

etc...

CONSTRAINT mySimulator_card_pk PRIMARY KEY (id),
CONSTRAINT mySimulator_card_account_fk FOREIGN KEY (account_id)
REFERENCES simulators.mySimulator_account (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT mySimulator_card_currency_fk FOREIGN KEY (currency_id)
REFERENCES simulators.mySimulator_currency ("name") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT mySimulator_card_product_fk FOREIGN KEY (product_id)
REFERENCES simulators.mySimulator_product (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT mySimulator_account_account_number_uq UNIQUE (account_number),
CONSTRAINT mySimulator_card_san_uq UNIQUE (san)
)
WITH (
OIDS=FALSE
);
ALTER TABLE simulators.mySimulator_card OWNER TO functional;

我想功能测试中的上下文有问题,因为生产工作正常。此外,当我尝试使用此技巧从 entityManager 获取 session 时:

    EntityManager em = getEntityManager();
HibernateEntityManager hem = em.unwrap(HibernateEntityManager.class);
Session session = hem.getSession();
session.persist(e);

我遇到了错误:

java.lang.IllegalStateException: 没有可用的事务性 EntityManager

现在确定发布所有测试配置是个好主意,因为有很多解决方法。有什么想法吗?

最佳答案

当您尝试在自动生成的列中保留值时,会引发此错误。

检查您是否正在传递一个值以保留列 id,您已将其标记为:

@GeneratedValue(strategy = GenerationType.IDENTITY)

问候。

关于java - 传递给持久化的分离实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10168579/

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