【发布时间】:2016-03-21 20:02:50
【问题描述】:
我在 PostgreSQL 中创建表和序列:
CREATE SEQUENCE
test_id
INCREMENT 1
START 1
MAXVALUE 500;
CREATE TABLE TEST(
id NUMERIC PRIMARY KEY DEFAULT NEXTVAL('test_id'),
name TEXT NOT NULL UNIQUE,
name2 TEXT DEFAULT NULL
);
然后我在 Eclipse 中生成实体:
@Entity
@NamedQuery(name="Test.findAll", query="SELECT t FROM Test t")
public class Test implements Serializable {
private static final long serialVersionUID = 1L;
private long id;
private String name;
private String name2;
public Test() {
}
@Id
@SequenceGenerator(name="TEST_ID_GENERATOR", sequenceName="TEST_ID", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="TEST_ID_GENERATOR")
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getName2() {
return this.name2;
}
public void setName2(String name2) {
this.name2 = name2;
}
}
然后我尝试将我的实体从 servlet 写入表中:
@PersistenceUnit(name="Tets")
EntityManagerFactory emf;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
EntityManager em = emf.createEntityManager();
Test t = new Test();
t.setName("jdsfjjd");
t.setName2("jdsfjjd");
em.persist(t);
response.getWriter().append("Served at: ").append(request.getContextPath());
}
当我部署我的项目并使用该 servlet 时,我看不到日志。项目是部署 servlet 启动,在浏览器中我看到:Served at: /Tets,但是当我检查表格时,我看不到我的实体。我做错了什么?
【问题讨论】:
-
在
em.persist(..)之后添加em.flush() -
我添加并捕获 javax.persistence.TransactionRequiredException:异常描述:此线程当前没有活动的外部管理事务
-
你必须配置一个事务管理器
-
感谢您的帮助。但你是什么意思?我使用 glassfish(payara) 我不明白为什么当我对 pk 不使用generet 策略时,会添加实体,但是当我使用序列时,不会启用截断管理器
标签: jpa glassfish ejb eclipselink jta