我有一个基本的SpringBoot应用程序.使用Spring Initializer,嵌入式Tomcat,Thymeleaf模板引擎和包作为可执行的JAR文件
有这种依赖性
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我创建了这个声明为readOnly的服务:
@Service
@Transactional(readOnly = true)
public class TimeLapseService {
@Autowired
TimeLapseRepository timeLapseRepository;
public Set<TimeLapse> findAllByCompanyId(long companyId) {
return timeLapseRepository.findAllByCompanyId(companyId);
}
public Iterable<TimeLapse> findAll (User user) {
if (user.isAdmin()) {
return timeLapseRepository.findAll();
} else {
return timeLapseRepository.findAllByCompanyId(user.getCompany().getId());
}
}
public void createTimeLapse (TimeLapse timeLapse) {
timeLapseRepository.save (timeLapse);
}
}
Run Code Online (Sandbox Code Playgroud)
和
public interface TimeLapseRepository extends CrudRepository<TimeLapse, Long> {
....
}
Run Code Online (Sandbox Code Playgroud)
据我所知,由于服务被声明为readonly,因此创建新服务不应该向DB保留任何内容,但它会在TABLE中创建一行
timeLapseService.createTimeLapse(timeLapse24h);
Run Code Online (Sandbox Code Playgroud)
JPA属性:
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
hibernate.dialect=org.hibernate.dialect.H2Dialect
Run Code Online (Sandbox Code Playgroud) 如何使用 Predicate BooleanExpression 对多对多关系进行内连接?
我有 2 个实体
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToMany(fetch = FetchType.LAZY,
cascade = { CascadeType.DETACH, CascadeType.MERGE,
CascadeType.REFRESH, CascadeType.PERSIST})
@JoinTable(name = "a_b_maps",
joinColumns = @JoinColumn(name = "a_id", nullable =
false,referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "b_id", nullable = false,
referencedColumnName = "id")
)
private Set<B> listOfB = new HashSet<B>();
}
public class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToMany(fetch = FetchType.LAZY,
cascade = { CascadeType.DETACH, CascadeType.MERGE,
CascadeType.REFRESH, …Run Code Online (Sandbox Code Playgroud) 我的父类:
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
private List<Child> child;
public List<Child> getChild() {
return child;
}
public void setChild(List<Child> child) {
this.child = child;
}
Run Code Online (Sandbox Code Playgroud)
我的孩子类:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "REF_ID")
private Parent parent;
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
Run Code Online (Sandbox Code Playgroud)
错误 :
Caused by: java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:626) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:109) ~[tomcat-embed-core-8.5.15.jar:8.5.15]
at org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$SpelView.render(ErrorMvcAutoConfiguration.java:227) ~[spring-boot-autoconfigure-1.5.4.RELEASE.jar:1.5.4.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286) ~[spring-webmvc-4.3.9.RELEASE.jar:4.3.9.RELEASE] …Run Code Online (Sandbox Code Playgroud) 假设我有一个带有文本字段的表,名为player,它是null.所以允许空值,但如果不是null(有一个值),文本/字符串的大小必须在10到100之间.我有这个开始:
@Column(name = "player", nullable = true)
@Size(min = 5, max = 100)
private String player;
Run Code Online (Sandbox Code Playgroud)
但是当将字段设置为null时,JSF页面会抛出验证错误.
有没有办法让Size验证器忽略空值?
我正在使用移动Web应用程序,对于我正在使用的数据库部分Hibernate和连接池c3p0,当我在开始运行应用程序时它工作正常,但在做了一些事务,如选择,保存,更新,我得到以下异常,我不知道为什么会发生这种情况,
Sep 22, 2015 12:40:06 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1040)
at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1507)
at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1477)
at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1565)
at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:44)
at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:2089)
at java.util.TimerThread.mainLoop(Timer.java:512)
at …Run Code Online (Sandbox Code Playgroud) String sql="create table temptable (name varchar(2 Byte))";
Transaction tx=session1.beginTransaction();
Query query=session1.createSQLQuery(sql);
int a=query.executeUpdate();
System.out.println(a);tx.commit();
Run Code Online (Sandbox Code Playgroud)
为什么即使在成功创建表后也使用删除表查询,它仍打印0。而说明它返回更新或删除的实体数,而不返回1?
我有使用 jpa 框架连接到数据库的 java 应用程序。对象UserInformation包含AdditionData对象,当我userInformationRepository.findByUserId(id)收到错误时。作为回应,我看到带有许多内部对象的 json
userInformation->additionData->userInformation->userInformation->additionData->userInformation->....
Run Code Online (Sandbox Code Playgroud)
例外:
>java.lang.StackOverflowError: null
Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate com.entity.UserInformation.toString()
java.lang.StackOverflowError: null
at javax.servlet.ServletResponseWrapper.getBufferSize(ServletResponseWrapper.java:167) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at javax.servlet.ServletResponseWrapper.getBufferSize(ServletResponseWrapper.java:167) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.security.web.util.OnCommittedResponseWrapper.checkContentLength(OnCommittedResponseWrapper.java:232) ~[spring-security-web-4.1.3.RELEASE.jar:4.1.3.RELEASE]
at org.springframework.security.web.util.OnCommittedResponseWrapper.access$200(OnCommittedResponseWrapper.java:33) ~[spring-security-web-4.1.3.RELEASE.jar:4.1.3.RELEASE]
at org.springframework.security.web.util.OnCommittedResponseWrapper$SaveContextServletOutputStream.write(OnCommittedResponseWrapper.java:637) ~[spring-security-web-4.1.3.RELEASE.jar:4.1.3.RELEASE]
at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:2033) ~[jackson-core-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeRaw(UTF8JsonGenerator.java:632) ~[jackson-core-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeRaw(UTF8JsonGenerator.java:555) ~[jackson-core-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeNumber(UTF8JsonGenerator.java:931) ~[jackson-core-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.std.NumberSerializers$FloatSerializer.serialize(NumberSerializers.java:194) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.4.jar:2.8.4]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690) ~[jackson-databind-2.8.4.jar:2.8.4]
at …Run Code Online (Sandbox Code Playgroud) 我想使用特定的弹簧测试配置文件进行 JPA 测试。但不知何故,它无法加载弹簧上下文。
@RunWith(SpringRunner.class)
@Profile("myTestProfile")
@DataJpaTest
@ContextConfiguration(classes = {TestingConfig.class, MyJpaConfig.class})
public class JpaPlusOtherStuffTest {
@Autowired
private TestEntityManager testEntityManager;
...
@Autowired
private MyJpaRepository myJpaRepository;
}
Run Code Online (Sandbox Code Playgroud)
失败并出现以下错误:
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'myJpaRepository':
Cannot create inner bean '(inner bean)#5e77f0f4' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#5e77f0f4':
Cannot resolve reference to bean 'entityManagerFactory' while setting constructor argument; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No …Run Code Online (Sandbox Code Playgroud) 我有一个Query-annotated Spring JPA repo,它看起来像这样:
@Repository
public interface MainRepository
extends
JpaRepository<MainEntity, MainEntity.ID>,
JpaSpecificationExecutor<MainEntity> {
@Query("select e.start, e.finish,e.forename,e.surname from MainEntity e where e.volunteerId= :id "
+ "and e.areaId>0 and e.isAssignment=true order by e.start")
List<MainEntity> findAssignments(@Param("id") int volunteerId);
}
Run Code Online (Sandbox Code Playgroud)
但是,尽管返回类型,但不会返回MainEntity对象列表.它返回与所请求的字段类型对应的List of Object [].
这是怎么回事???
java ×6
hibernate ×4
spring ×4
spring-boot ×3
jpql ×2
json ×2
c3p0 ×1
jackson ×1
jsf ×1
predicate ×1
querydsl ×1
spring-test ×1
validation ×1
wildfly ×1