我在PostgreSQL中創建表和序列:Glassfish的實體不會保持
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(..)' – Jens
我添加和catch javax.persistence.TransactionRequiredException後''加em.flush()'沒有外部管理的事務是目前這個線程 – JugerJuger
你必須主動配置事務管理器 – Jens