在我的场景中,我在运行时在“com.mrg.domain”包下生成hibernate实体类。在我的通用restcontroller中,我可以根据@PathVariable创建这些实体的实例。以下代码适用于此。。
@RequestMapping( value = "/{entity}", method = RequestMethod.POST)
public @ResponseBody RestResponse createEntity(@PathVariable String entity, @RequestBody String requestBody) {
Object model = null;
ObjectMapper mapper = new ObjectMapper();
try {
// ex : if {entitiy} param is equal "post" modelName will be "Post"
String modelName = Character.toUpperCase(entity.charAt(0)) + entity.substring(1);
// Creating a new instance according to modelName
Class<?> clazz = Class.forName("com.mrg.domain." + modelName);
model = clazz.newInstance();
// Converting @RequestBody json String to domain object..
model = mapper.readValue(requestBody, clazz);
} catch(Exception ex){
// TODO handle exceptions & inform user..
}
return new RestResponse(model.toString());
}
现在,我试图实现的下一步是一个通用的jpa存储库(如下所示),这样我就可以持久化运行时生成的模型,而无需为每个实体实现存储库。但是还没有找到解决方案。
@Repository
public interface GenericRepository<T> extends PagingAndSortingRepository<T, Long>{ }
下面的主题和许多其他主题实现了通用存储库,但也实现了使用通用存储库的每个实体的存储库。由于我有运行时生成的实体,因此每个实体的存储库实现对我不起作用…
如何制作通用 jpa 存储库?我应该这样做吗?为什么?
有什么建议或方法可以实现这一点吗?我是泛型和反射的新手,所以如果我试图完成的事情不可能,请告诉我原因,我将不胜感激…
谢谢和问候,
我有一个反应应用程序,其中在 JSON 和服务器端定义了不同的数据,我需要将其存储在数据库中。我最初的方法是为所有这些分别创建实体、存储库和控制器。但是CRUD操作的另一种可能方法是使用MongoDB
import java.util.List;
import org.bson.Document;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/generic")
@CrossOrigin(origins = { "*" })
public class GenericController {
@Autowired
private MongoTemplate mongoTemplate;
@PostMapping
public ResponseEntity<Document> addData(@RequestBody String data) {
JSONObject jsonObject = new JSONObject(data);
String documentName = jsonObject.getString("documentName");
Document doc = Document.parse(data);
Document insertedDoc = mongoTemplate.insert(doc, documentName);
return new ResponseEntity<>(insertedDoc, HttpStatus.CREATED);
}
@GetMapping("/{documentName}")
public List<Document> getData(@PathVariable String documentName) {
List<Document> allData = mongoTemplate.findAll(Document.class, documentName);
return allData;
}
}
你可以使用这种模式。这一个使用EJB,但可以在Spring等中使用。
@Stateless
public abstract class AbstractRepository<T> {
@PersistenceContext
protected EntityManager em;
public abstract Class<T> getActualClass();
public T getSingleResult(Map<String, String> params) {
// build querytext based on params
TypedQuery<T> query = em.createQuery(queryText.toString(), getActualClass());
............
}
}
现在对于实现类:
@Stateless
public class InputStreamRepository extends AbstractRepository<InputDataStream> {
@Override
public Class<InputDataStream> getActualClass() {
return InputDataStream.class;
}
}
getActualClass 方法将为您提供实体的类包含信息。
我正在使用Byte Buddy生成JPA实体和JPA存储库。我能够生成JPA实体,但无法继续生成相应的JPA存储库。以下是代表个人和实体的代码, 我可以使用Bute Buddy生成上述内容,如下所示, 现在我想生成相应的Spring boot Jpa报告,如下所示, 如何用Generic属性创建这个接口。这也能(使用动态代码生成)持久化Person对象吗?
我有几个实体,并使用Spring Data JPA存储库与规范查询我的数据库。因此,我创建了一个泛型类< code>SpecBuilder来基于查询描述(< code>MyQueryDescriptor)构建我的查询。 我的存储库: 和 现在有三件事我不太确定:< br> 1) 使用泛型SpecBuilder是一个干净的设计吗? 2) 有没有办法避免为每个实体编写这些存储库接口?假设一个通用存储库
我有一个通用实体,我想使用JPA持久化,以便它的通用值存储在单个列中。简化的实体类如下所示: 类型唯一标识泛型值的类,并且允许具有相同类的多个类型: 我没有找到如何使用Hibernate保持这种泛型类的方法。我找到了替代方法和变通方法,但它们在我看来并不理想。我考虑了以下选项: > 将值的类型设置为JsonNode,并将其类型类标记为com。弗拉德米尔恰。冬眠类型json。JsonBinaryTy
问题内容: 我已经为Entity Framework 4实现了通用存储库。这是一个简化版本,其中AllAppContainer是EF4对象上下文: 一种方法是QueryCount(),我想将其用作 select Count(*)… SQL行(不返回实际记录)。 直截了当?您可能会想…首先,让我们做同一件事的非存储库版本,对Item实体进行计数: SQL Server Profiler说生成的SQL
我正在工作的Spring引导应用程序。 我们有服务层、Rest控制器和Dao作为存储库。 我想做的是,我将编写一个扩展CrudRepository的BaseRepository,BaseRepository应该接受所有的实体并执行持久操作。 有办法吗??
我创建了一个基本的Spring MVC / JPA / Hibernate应用程序。我试图保存一个UserProfile实体来测试我是否真的可以持久化它,但是什么也没有保存,也没有抛出异常。 在控制器方法中,我创建了一个简单的UserProfile(这是一个@Entity),并将其发送到服务方法。类使用 @Service 对类进行批注,并使用 @Transactional 对 addUserPro