- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到以下错误:并且我正在使用 Spring Boot AOP Javers。Javers.commit() 在另一个类中工作正常,但在方面类中它给了我以下错误。我不知道是否有一种特殊的方式可以同时使用AOP和Javers。
我的代码在这里:https://github.com/mohamedBenali100/JaversAOPIssue
org.javers.common.exception.JaversException: MANAGED_CLASS_MAPPING_ERROR: given javaClass 'class java.lang.Long' is mapped to PrimitiveType, expected ManagedType
at org.javers.core.metamodel.type.TypeMapper.getJaversManagedType(TypeMapper.java:194) ~[javers-core-5.9.0.jar:na]
我的方面类
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.javers.core.Javers;
import org.javers.core.JaversBuilder;
import org.javers.repository.jql.QueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class ContactAspect {
Javers javers = JaversBuilder.javers().registerValueObject(Contact.class).build();
@Autowired
ContactRepository contactRepository;
@Pointcut(value = "execution(* ma.dxc.ContactServiceImpl.save(..))")
public void mySavePointcut(){ }
@Pointcut(value = "execution(* ma.dxc.ContactServiceImpl.update(..)) && args(id,contact,..)")
public void myUpdatePointcut(Long id, Contact contact){ }
@AfterReturning(pointcut = "mySavePointcut()",returning= "result")
public void logAfterReturningUsers(JoinPoint joinPoint, Object result) throws Throwable{
Contact contact = (Contact) result;
System.out.println("contact added : "+contact.toString());
}
@Around("myUpdatePointcut(id,contact)")
public Object applicationLogger (ProceedingJoinPoint proceedingJoinPoint, Long id, Contact contact) throws Throwable {
Contact contactAudited = contactRepository.getOne(id);
javers.commit("hamada",contactAudited);
Object object = proceedingJoinPoint.proceed();
contactAudited = contactRepository.getOne(id);
javers.commit("hamada",contactAudited);
String changes = javers.findChanges( QueryBuilder.byInstance(contactAudited).build()).toString();
System.out.println("contact updated by this changes : "+changes);
return object;
}
}
我的服务等级
import java.util.List;
import javax.transaction.Transactional;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ContactServiceImpl{
@Autowired
private ContactRepository contactrepository ;
public List<Contact> findAll() {
return contactrepository.findAll();
}
public Contact save(@Valid Contact contact) {
return contactrepository.save(contact) ;
}
public Contact findOne(long id) {
return contactrepository.getOne(id);
}
@Transactional
public Contact update(@Valid Long id, Contact contact) {
contact.setId(id);
return contactrepository.saveAndFlush(contact);
}}
我的联系人类别
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Entity
public class Contact implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue
private Long id ;
@NotNull
@Size
private String Fname;
@NotNull
@Size
private String Lname;
public Contact() {
super();
}
public Contact(@NotNull @Size String fname, @NotNull @Size String lname) {
super();
Fname = fname;
Lname = lname;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFname() {
return Fname;
}
public void setFname(String fname) {
Fname = fname;
}
public String getLname() {
return Lname;
}
public void setLname(String lname) {
Lname = lname;
}
@Override
public String toString() {
return "Contact [Fname=" + Fname + ", Lname=" + Lname + "]";
}
}
我的存储库类
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
@Repository
public interface ContactRepository extends JpaRepository<Contact, Long>,JpaSpecificationExecutor<Contact> {
}
** 我的主类(class) **
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ContactApplication implements CommandLineRunner {
@Autowired
ContactServiceImpl contactServiceImpl;
public static void main(String[] args) {
SpringApplication.run(ContactApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
Contact contact = new Contact("tom","hunx");
contactServiceImpl.save(contact);
contact.setLname("cruise");
contactServiceImpl.update(Long.valueOf(1), contact);
}}
最佳答案
我在我的代码中发现了这个问题,或者我应该说我的一个 friend 帮助我找到了它。所以就我而言,我犯了 4 个错误:
1_ 在 pom 文件中我使用:javers-core 但我应该使用 javers-spring 作为依赖项
2_ 在我的服务类中,我使用: javax.transaction.Transactional 但我应该使用 org.springframework.transaction.annotation.Transactional我应该将 .orElseThrow(EntityNotFoundException::new) 添加到我的函数中,以避免当您的对象不存在时出现异常。
3_我必须使用 Bean javers 添加一个名为 JaversConfig 的配置类。
4_ 在我的 Aspect 类中,我需要为 Javers 使用 DI,并且需要使用服务而不是存储库来搜索对象。
我不知道我是否解释得很好,但您会在此链接中找到我的工作代码: https://github.com/mohamedBenali100/JaversAOPIssue
关于java - Javers.commit() 不起作用 MANAGED_CLASS_MAPPING_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61867519/
我正在寻找一种方法来编写 Signed-off-by:当我提交时自动标记。 我尝试通过 .git/config 文件配置它 (Reference) .我把这些代码行: [alias] comm
我使用的是 visual studio 2013,在提交 C# 代码时我面临 3 个选项。我需要解释每个选项之间关于我的本地存储库与 GitHub 存储库发生的情况的差异。 选项 1 表示提交 选项
我刚从 classes12.jar 升级到新的 jdbc 驱动程序到 ojdbc7.jar 我的应用在使用 ojdbc7.jar 运行时抛出异常: java.sql.SQLException: Cou
我问的是 Oracle SQL*PLUS ... 最佳答案 没有 :-) Oracle says The WORK keyword is supported for compliance with s
我必须在许多分支、许多存储库上恢复对文件所做的更改。我知道我可以使用 git checkout 哈希文件名,然后推送该更改。 问题是,我只知道在我想要恢复的实际提交之前有两次提交。 我怎样才能在这之前
看起来很简单,但我就是不明白。我在我的应用程序的根目录中。 这是我的工作流程。 git add . git commit -m "added a new feature some files chan
假设我有一个 git 分支,在共享它之前的最后审查中,我发现了一些小错误,例如拼写错误。我想做的是将那个补丁应用为“修复”,但它实际上会影响许多提交,因此在最终历史记录中没有错误的迹象。 也就是说,如
当我运行hg commit时,Mercurial会为我的提交消息生成一个文件,如下所示: HG: Enter commit message. Lines beginning with 'HG:' a
我已经为项目创建了一个新的存储库,并向其中添加了一些现有的代码库 (llvm)。该代码库大约有 18,000 个文件,这使得我的初始提交花费了大量时间。 (阅读5小时) 有没有办法将这个巨大的提交分成
我在 git review 上得到以下内容: git review You are about to submit multiple commits. This is expected if you
我一直在寻找一种替代解决方案来压缩分支中的一系列提交。我过去所做的是使用 git rebase -i HEAD~然后选择哪个 promise 进行压缩。通常我 pick编辑最新的提交,并压缩其间的冗余
把玩Git和GitHub,我发现有时候一个 git commit -a 需要提交修改过的文件。 (此文件已添加到项目中)。 但有时候,只是一个 git commit 会起作用。如果使用 Mercuri
我正在努力思考 Git 的复杂性。 我使用“git clone [url here]”从 GitHub 下载了一个存储库。 我做了一些更改,尝试使用“git commit”提交它们。这似乎没有将更改推
当试图恢复到之前的提交时,我尝试了: git revert --no-commit 0766c053..HEAD 然而这给出了一个错误: empty commit set passed 问题错误是什么
我的存储库的历史非常复杂。我经常发现自己想知道过去的某个提交是“在”还是“可从”某个修订版(通常是我的一个头脑)“进入”或“可访问” 我该怎么做呢? 最佳答案 您可以使用 revsets syntax
我有:http://windows.github.com/ 我当前的项目有大约 20k 个文件,大约 150MB(并且不说它有多慢而且我现在什么也做不了)它甚至不允许我提交!我收到此错误:提交失败:无
我正在运行 postgres 9.2 服务器并有一个使用 psycopg 2.5 的 python 客户端。 我进行了一些测试,因为我在日志文件中遇到了很多警告:没有正在进行的事务条目。 我有一些代码
我的主要问题是总是执行 git commit -am 而不是 git add 是否有意义。然后是 git commit -m? 我知道 -am 表示它将添加修改后的 TRACKED 文件的所有更改。所
如果我想查看 之间的差异和工作目录 (WD),我运行 % git diff 这通常会做我想做的事,但如果 WD 包含在 时被跟踪的文件,它就会这样做。已创建,但现在(或在当前分支中)未被跟踪,则
我正在阅读有关 git 对象的信息:blob、树、提交、标签。为了更好地理解 git 的工作原理,我尝试了一些低级命令,如 write-tree 和 commit-tree。 mkdir 测试; cd
我是一名优秀的程序员,十分优秀!