我们的应用程序需要处理多个数据库.我们尝试通过Hibernate配置配置多个数据源,并为数据库1添加了两个配置,为数据库2添加了第二个配置.此配置失败,并出现以下异常
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'DB1TransactionManager' defined in class path resource [org/npcc/ccms/config/db/HibernateConfig4DB1.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: : No qualifying bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 2: AgrgtrSessionFactory,HRSessionFactory,StageSessionFactory; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] is defined: expected single matching bean but found 3: DB1SessionFactory,DB2SessionFactory
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:747)
org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:462)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1094)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:989)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:530)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) …Run Code Online (Sandbox Code Playgroud) 我想json从JPA 生产@Entity,我有
@Entity
@JsonAutoDetect
public class Bar implements Serializable {
@Id
@GeneratedValue
private Integer id;
private String title;
//omitting other stuff
}
Run Code Online (Sandbox Code Playgroud)
我的控制器是
@RestController
public class BarController {
@Autowired
private BarService barService;
@RequestMapping(value = "/", method = RequestMethod.GET, headers = "Accept=application/json", produces={"application/json"})
public List<Bar> list() {
return barService.findAllBars());
}
}
Run Code Online (Sandbox Code Playgroud)
我在浏览器中遇到此错误
这有什么问题.
我正在寻找框架来安排数据库中填充的一组任务
JPA 实体看起来像这样
@Entity
class Task extends Model {
@NotNull
@Min(1L)
@Column(name = "interval_ms", nullable = false)
Integer interval
@NotNull
String payload
@NotNull
Boolean enabled
}
@Entity
class TaskResult extends Model {
@ManyToOne(optional = false)
Task task
@Column(nullable = false)
Boolean result
@Column(nullable = false)
String message
}
Run Code Online (Sandbox Code Playgroud)
任务应在“间隔”字段中定义的每个间隔执行,结果应写入 TaskResult 表
任务的目的是发出 GET 或 POST 请求,因此必须池化请求以避免出现大量任务开始并行执行的情况。
我正在使用弹簧靴。
这里的最佳实践是什么?
假设您有以下实体:
@Entity
public class Game {
@Id
@GeneratedValue
private Integer id;
private String name;
private Calendar startTime;
private int durationInSeconds;
public GameStatus getStatus() {
if( startTime.after(Calendar.getInstance()))
{
return GameStatus.SCHEDULED;
} else {
Calendar endTime = Calendar.getInstance();
endTime.setTime(startTime.getTime());
endTime.roll(Calendar.SECOND, durationInSeconds);
if( endTime.after(Calendar.getInstance())) {
return GameStatus.OPEN_FOR_PLAY;
}
else {
return GameStatus.FINISHED;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我GameRepository是a PagingAndSortingRepository,我如何获得一个结果页面,按status属性排序?
我目前得到:
java.lang.IllegalArgumentException: Unable to locate Attribute with the the
given name [status] on this ManagedType [org.test.model.Game]
Run Code Online (Sandbox Code Playgroud)
我可以理解,因为status确实没有JPA属性.有没有解决的办法?
(我在下面使用Hibernate,所以任何特定的Hibernate都可以)
我正在使用现有实体和存储库创建Spring批处理项目.我需要使用自定义ItemReader作业,使用现有的jpa存储库读取数据.
定制读者
public class InMemoryReader implements ItemReader<Product> {
@Autowired
private ProductService productService;
private int nextStudentIndex;
private List<Product> studentData;
public InMemoryReader() {
initialize();
}
private void initialize() {
studentData = new ArrayList<Product>();
studentData.add(new Product("hi"));
for (Product p : productService.get())
studentData.add(p);
nextStudentIndex = 0;
}
@Override
public Product read() throws Exception {
Product nextStudent = null;
if (nextStudentIndex < studentData.size()) {
nextStudent = studentData.get(nextStudentIndex);
nextStudentIndex++;
}
return nextStudent;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我无法在自动装配ProductService中itemreader.它抛出错误如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with …Run Code Online (Sandbox Code Playgroud) 我需要在Entity数据字段上实现范围约束:
@Entity
@Table(name = "T_PAYMENT")
public class Payment extends AbstractEntity {
//....
//Something like that
@Range(minValue = 80, maxValue = 85)
private Long paymentType;
}
Run Code Online (Sandbox Code Playgroud)
我已经创建了验证服务,但必须实现其中许多情况.
如果插入的数字超出范围,我需要应用程序抛出异常.
我正在尝试在Spring Data JPA中实现分页功能。我指的是此博客,我的控制器包含以下代码:
@RequestMapping(value="/organizationData", method = RequestMethod.GET)
public String list(Pageable pageable, Model model){
Page<Organization> members = this.OrganizationRepository.findAll(pageable);
model.addAttribute("members", members.getContent());
float nrOfPages = members.getTotalPages();
model.addAttribute("maxPages", nrOfPages);
return "members/list";
}
Run Code Online (Sandbox Code Playgroud)
我的DAO如下:
@Query(value="select m from Member m", countQuery="select count(m) from Member m")
Page<Organization> findMembers(Pageable pageable);
Run Code Online (Sandbox Code Playgroud)
我能够显示前20条记录,如何显示接下来的20条记录? 还有其他我可以参考的分页示例吗?
我正在尝试使用 JpaRepository 获取查询结果,但它对我不起作用:
public interface PeticionRepository extends JpaRepository<Peticion, Long> {
@Query(value = "select peticion from Peticion peticion where (peticion.codigo like CONCAT(?1, '%') or "
+ "peticion.contacto.direccionGeneral.nombre like CONCAT(?1, '%') or peticion.contacto.poa like CONCAT(?1, '%') or "
+ "peticion.proyecto.nombre like CONCAT (?1, '%') or peticion.datosAdicionales.estado.nombre like CONCAT(?1, '%'))")
List<Peticion> findByText(String texto);
List<Peticion> findByFilter(String unidad, String nombreIniciativa, String codigo,
LocalDate fechaConsejeroDFormat, LocalDate fechaConsejeroHFormat);
}
Run Code Online (Sandbox Code Playgroud)
在其他课程中,我需要覆盖findByFilter要创建查询的函数:
public abstract class JpaPeticionRepository implements PeticionRepository {
@PersistenceContext(name = "ExterroPU")
private EntityManager em;
public void …Run Code Online (Sandbox Code Playgroud) 我正在阅读Hibernate的Java Persistence,并且发现了以下文本。
如今,高质量的独立JTA提供程序(例如Bitronix(用于本书的示例代码)和Atomikos)已经上市,并且可以在任何Java环境中轻松安装。将这些解决方案视为支持JTA的数据库连接池。
据我了解,JTA提供程序具有自己的连接池。
那么,它们是否与HikariCP和C3P0等连接池集成(如果可以的话)?谢谢。
因此,我已经使用标准的Spring Data JPA接口(扩展了PagingAndSortingRepository)来实现此目的,以便实现REST API的分页和排序。问题是,现在我想实现同样的目的,但是现在仅使用原始的JPA,到目前为止,我设法使我的API分页,但排序根本不起作用。每当我尝试设置参数(使用pageable.getSort()从可分页对象中设置)时,它都会以查询错误结尾(如果我只是将字符串作为参数(如“名称”)发送或仅发送了排序对象,它就会显示错误)。
这是一些代码:
我的回购实现:
@Override
public List<Project> findByAll(Pageable pageable) {
Query query = em.createQuery("SELECT project FROM Project project ORDER BY :sort");
query.setParameter("sort", pageable.getSort());
query.setMaxResults(pageable.getPageSize());
query.setFirstResult(pageable.getPageSize() * pageable.getPageNumber());
return query.getResultList();
}
Run Code Online (Sandbox Code Playgroud)
我的服务:
@Override
public Page<Project> findAll(Pageable pageable) {
objects = Lists.newArrayList(repository.findByAll(pageable));
PageImpl<Project> pages= new PageImpl<Project>(objects, pageable, repository.count());
return pages;
}
Run Code Online (Sandbox Code Playgroud)
需要明确的是,我正在通过URI填充Pageable对象,并且可以从控制台中说它实际上是在获取数据,因此我认为问题出在存储库上。
编辑:这是我将setParameter(“ sort”,...)替换为硬编码字符串又称为query.setParameter(“ sort”,“ name”)时遇到的错误:
java.lang.NumberFormatException: For input string: "name"
Run Code Online (Sandbox Code Playgroud)
而且我认为该方法也应该代表字符串。如果我使用query.setParameter(“ sort”,pageable.getSort()),则错误是相同的。
java ×8
spring ×7
spring-data ×3
spring-boot ×2
annotations ×1
atomikos ×1
hibernate ×1
hikaricp ×1
jpql ×1
json ×1
jta ×1
pagination ×1
polling ×1
sorting ×1
spring-batch ×1
transactions ×1