· 9 years ago · Jul 05, 2017, 02:00 PM
1package model;
2
3import javax.persistence.*;
4
5
6@Entity
7@Table(name = "spitter")
8public class Spitter {
9 private static long schet = 0;
10@Id
11@GeneratedValue(strategy = GenerationType.IDENTITY)
12@Column(name = "iduser")
13 private Long id;
14 private String username;
15 private String password;
16 private String fullName;
17
18 public Spitter() {
19 }
20
21 public Spitter(String username, String password, String fullName) {
22 this.id=schet++;
23 this.username = username;
24 this.password = password;
25 this.fullName = fullName;
26 }
27
28 public void setId(Long id) {
29 this.id = id;
30 }
31
32 public void setUsername(String username) {
33 this.username = username;
34 }
35
36 public void setPassword(String password) {
37 this.password = password;
38 }
39
40 public void setFullName(String fullName) {
41 this.fullName = fullName;
42 }
43
44 public Long getId() {
45 return id;
46 }
47
48 public String getUsername() {
49 return username;
50 }
51
52 public String getPassword() {
53 return password;
54 }
55
56 public String getFullName() {
57 return fullName;
58 }
59
60 @Override
61 public String toString() {
62 return "Spitter{" +
63 "id=" + id +
64 ", username='" + username + ''' +
65 ", password='" + password + ''' +
66 ", fullName='" + fullName + ''' +
67 '}';
68 }
69}
70
71<?xml version="1.0" encoding="UTF-8"?>
72<beans xmlns="http://www.springframework.org/schema/beans"
73 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
74 xmlns:context="http://www.springframework.org/schema/context"
75 xmlns:jdbc="http://www.springframework.org/schema/jdbc"
76 xmlns:tx="http://www.springframework.org/schema/tx"
77 xsi:schemaLocation="http://www.springframework.org/schema/beans
78 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
79 http://www.springframework.org/schema/context
80 http://www.springframework.org/schema/context/spring-context-3.0.xsd
81 http://www.springframework.org/schema/jdbc
82 http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
83 http://www.springframework.org/schema/tx
84 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
85
86 <context:annotation-config />
87
88 <context:component-scan
89 base-package="dao" />
90
91 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
92 <property name="dataSource" ref="dataSource" />
93
94 <property name="persistenceUnitName" value="myPersistenceUnit" />
95 <property name="packagesToScan" >
96 <list>
97 <value>model</value>
98 <value>dao</value>
99 </list>
100 </property>
101
102 <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
103 </bean>
104
105 <bean id="jpaVendorAdapter"
106 class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
107 <property name="database" value="HSQL" />
108 <property name="showSql" value="true"/>
109 <property name="generateDdl" value="false"/>
110 <property name="databasePlatform"
111 value="org.hibernate.dialect.HSQLDialect" />
112 </bean>
113
114 <bean id="dataSource"
115 class="org.springframework.jdbc.datasource.DriverManagerDataSource">
116 <property name="driverClassName"
117 value="org.hsqldb.jdbcDriver" />
118 <property name="url"
119 value="jdbc:hsqldb:file:C:/DataBase/HSQL/SIA_HSQLDB.tmp/sia_db" />
120 <property name="username" value="sa" />
121 <property name="password" value="" />
122 </bean>
123
124 <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
125
126 <tx:annotation-driven transaction-manager="txManager"/>
127
128
129 <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
130 <property name="sessionFactory">
131 <ref local="sessionFactory"/>
132 </property>
133 </bean>
134
135 <bean id="sessionFactory"
136 class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
137 <property name="dataSource" ref="dataSource" />
138 <property name="packagesToScan">
139 <list>
140 <value>dao</value>
141 <value>model</value>
142 </list>
143 </property>
144
145 <property name="hibernateProperties">
146 <props>
147 <prop key="dialect">org.hibernate.dialect.HSQLDialect</prop>
148 </props>
149 </property>
150 </bean>
151</beans>
152
153<?xml version="1.0" encoding="UTF-8"?>
154<persistence xmlns="http://java.sun.com/xml/ns/persistence"
155 version="1.0">
156 <persistence-unit name="spitter">
157 <class>model.Spitter</class>
158 <properties>
159 <property name="toplink.jdbc.driver"
160 value="org.hsqldb.jdbcDriver" />
161 <property name="toplink.jdbc.url"
162 value="jdbc:hsqldb:file:C:/DataBase/HSQL/SIA_HSQLDB.tmp/sia_db" />
163 <property name="toplink.jdbc.user"
164 value="sa" />
165 <property name="toplink.jdbc.password"
166 value="" />
167 </properties>
168 </persistence-unit>
169</persistence>
170
171package dao;
172
173import model.Spitter;
174import org.springframework.stereotype.Repository;
175import org.springframework.transaction.annotation.Transactional;
176
177import javax.persistence.EntityManager;
178import javax.persistence.PersistenceContext;
179
180@Repository("jparep")
181@Transactional
182public class JPARepositoryImpl implements Rep {
183 private static final String RECENT_SPITTLES =
184 "SELECT s FROM Spittle s";
185 private static final String ALL_SPITTERS =
186 "SELECT s FROM Spitter s";
187 private static final String SPITTER_FOR_USERNAME =
188 "SELECT s FROM Spitter s WHERE s.username = :username";
189 private static final String SPITTLES_BY_USERNAME =
190 "SELECT s FROM Spittle s WHERE s.spitter.username = :username";
191 @PersistenceContext
192 private EntityManager em; // Ð”Ð»Ñ Ð²Ð½ÐµÐ´Ñ€ÐµÐ½Ð¸Ñ EntityManager
193@Transactional
194 public void addSpitter(Spitter spitter) {
195 em.persist(spitter); // ИÑпользование EntityManager
196 }
197
198 @Transactional
199 public Spitter getSpitterById(long id) {
200 return em.find(Spitter.class, id); // ИÑпользование EntityManager
201 }
202 @Transactional
203 public void saveSpitter(Spitter spitter) {
204 em.merge(spitter); // ИÑпользование EntityManager
205 }
206}
207
208DROP TABLE IF EXISTS SPITTER;
209
210--USER TABLE
211CREATE TABLE IF NOT EXISTS SPITTER (
212IDUSER INT GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1)NOT NULL PRIMARY KEY,
213USERNAME VARCHAR(255) NOT NULL,
214PASSWORD VARCHAR(255) NOT NULL,
215FULLNAME VARCHAR(255) NOT NULL
216)
217
218INSERT INTO SPITTER (USERNAME, PASSWORD, FULLNAME) VALUES ('Roma','1','Luch');
219INSERT INTO SPITTER (USERNAME, PASSWORD, FULLNAME) VALUES ('Kate','2','Luch');
220INSERT INTO SPITTER (USERNAME, PASSWORD, FULLNAME) VALUES ('Yaro','3','Luch');
221INSERT INTO SPITTER (USERNAME, PASSWORD, FULLNAME) VALUES ('Alin','4','Luch');
222INSERT INTO SPITTER (USERNAME, PASSWORD, FULLNAME) VALUES ('Alex','5','Luch');
223
224ApplicationContext context = new ClassPathXmlApplicationContext("Spring_JPA.xml");
225 Rep test = (Rep)context.getBean("jparep");
226 test.addSpitter(new Spitter("yaspring","on","ay"));
227
228Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: model.Spitter
229 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763)
230 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)
231 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)
232 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1187)
233 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
234 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
235 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
236 at java.lang.reflect.Method.invoke(Method.java:498)
237 at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347)
238 at com.sun.proxy.$Proxy17.persist(Unknown Source)
239 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
240 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
241 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
242 at java.lang.reflect.Method.invoke(Method.java:498)
243 at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298)
244 at com.sun.proxy.$Proxy17.persist(Unknown Source)
245 at dao.JPARepositoryImpl.addSpitter(JPARepositoryImpl.java:28)
246 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
247 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
248 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
249 at java.lang.reflect.Method.invoke(Method.java:498)
250 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
251 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
252 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
253 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
254 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
255 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
256 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
257 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
258 at com.sun.proxy.$Proxy18.addSpitter(Unknown Source)
259 at Main.main(Main.java:45)
260 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
261 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
262 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
263 at java.lang.reflect.Method.invoke(Method.java:498)
264 at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
265Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: model.Spitter
266 at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:139)
267 at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75)
268 at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:811)
269 at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784)
270 at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789)
271 at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181)
272 ... 32 more