这些罐子都是新发布的,并且拥有最新的Java EE应用程序解决方案.但是我在hibernate.cfg.xml中指定hibernate监听器时遇到了问题.
在春季3.1.0之前,LocalSessionFactroyBean持有一个保存eventlisteners的属性.但是使用3.1.0.release没有eventlisteners地图.现在我无法在saveorupdate,postload等上保持模态对象的跟踪,因为它们不是由Spring配置的.你有想法解决这个问题吗?
我的spring-data-jpa后端有一个类,它用大量测试数据填充(测试)数据库。该类使用 spring 数据存储库来创建实体。我所有的实体都有一个注释的字段@CreatedData和@EntityListeners(AuditingEntityListener.class)模型类上的相应注释。到目前为止,这工作正常。dateCreated 会自动正确设置。
但是在运行Junit 测试时,我有时需要使用过去的 dateCreated 创建一个(测试)对象。我该如何存档?只能通过普通的JDBC?
目前我们有6个Maven模块:
webappsecuritycore(提供数据库访问User)commonmodule1module2我认为依赖树非常明显:
webapp 取决于一切security 取决于核心core 取决于共同点common 什么都不依赖module1 取决于核心和共同点module2 取决于核心,module1和common现在我想要一些BaseEntity:它应该有一个@PrePersist可以节省电流User.几乎每个实体都会使用它BaseEntity.这就是每个模块依赖的原因core.
而且因为一切都依赖于core,将这BaseEntity也放在core模块中似乎是合乎逻辑的.(即使我更喜欢使用common它,但由于依赖性,这似乎是不可能的).
现在出现问题:要设置当前用户,我必须使用访问权限SecurityContextHolder.getContext().getAuthentication().getPrincipal().但是有了这个,我会有一些不必要的依赖(或者我只是太挑剔了?).
如果我想要自定义实现,问题会变得更糟UserDetails.我应该把它放在哪里?core还是security?或者让User实体实施UserDetails是否常见?我不这么认为.问题出现了,因为在验证用户时,我必须UserDetails在security模块内创建对象.当我想要检索当前时,User我必须将getPrincipal()方法强制转换为自定义UserDetails类.
我真的很困惑如何松散耦合,但也实现了应用程序所需的一切.
我想到的最后一个想法是关于使用依赖注入,但我不知道它是否有效!?(在模块中有一个currentUserBean security,其他人都可以通过它获得它@Autowired MyCustomUserDetails)
所以请帮我把这些东西弄好!
谢谢! :)
也许这是一个过于简单的问题,但是当我尝试删除用户实体时,我遇到了异常.
用户实体:
@Entity
@Table(name = "users")
public class User
{
@Transient
private static final int SALT_LENGTH = 32;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@NotNull
private String firstName;
@NotNull
private String lastName;
@Column(unique = true, length = 254)
@NotNull
private String email;
// BCrypt outputs 60 character results.
@Column(length = 60)
private String hashedPassword;
@NotNull
private String salt;
private boolean enabled;
@CreationTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(updatable = false)
private Date createdDate;
Run Code Online (Sandbox Code Playgroud)
我有一个实体类,它引用具有外键的用户.我想要发生的是,当用户被删除时,任何PasswordResetToken引用该用户的对象也将被删除.我怎样才能做到这一点?
@Entity
@Table(name = "password_reset_tokens")
public class PasswordResetToken …Run Code Online (Sandbox Code Playgroud) 我需要在EntityListener类中注入EntityManager,以便我可以对它执行CRUD操作.
POJO:
@Entity
@EntityListner(AuditLogging.class)
class User
{
//Getter / setter of properties
}
Run Code Online (Sandbox Code Playgroud)
AuditLogging(Listner类)
public class AuditInterceptor
{
@PersistenceContext
EntityManager entityManager;
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
@PrePersist
public void prePersist(Object obj)
{
// Here I want to use ENTITY manager object so that I can perform CRUD operation
// with prePersist coming object.
entityManager.unwrap(Session.class).save(obj);
// But I am getting NULL POINTER EXCEPTION for entity manager object
}
Run Code Online (Sandbox Code Playgroud)
}
JDBC-config.xml中
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" /> …Run Code Online (Sandbox Code Playgroud) 我试图让JPA Entity Listener通过将其标记为@Configurable来了解spring上下文.但是注入的spring bean是null.能够使用相同的技术使JPA实体了解Spring上下文.我使用Spring(core和data-jpa)作为基础设施.有关如何使用JPA Entity Listeners或spring data-jpa实现此目的的任何想法?
@Configurable
@Scope("singleton")
public class AggregateRootListener {
private static Logger log = LoggerFactory.getLogger(AggregateRootListener.class);
@Autowired
private EventHandlerHelper eventHandlerHelper;
@PostPersist
@PostUpdate
public void publishEvents(BaseAggregateRoot aggregateRoot){
log.info(aggregateRoot.getEvents().toString());
aggregateRoot.getEvents().stream()
.forEach(event -> {
eventHandlerHelper.notify(event, aggregateRoot);
log.info("Publishing " + event + " " + aggregateRoot.toString());
});
}
}
Run Code Online (Sandbox Code Playgroud)
和BaseAggregateRoot代码
@Configurable
@Scope("prototype")
@MappedSuperclass
@EntityListeners(AggregateRootListener.class)
public abstract class BaseAggregateRoot extends BaseDomain{
public static enum AggregateStatus {
ACTIVE, ARCHIVE
}
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "aggregateId", column = @Column(name = "ID", nullable = false))}) …Run Code Online (Sandbox Code Playgroud) spring ×4
java ×3
jpa ×3
aspectj ×1
dependencies ×1
hibernate ×1
maven ×1
multi-module ×1
mysql ×1
spring-3 ×1
spring-boot ×1
spring-mvc ×1
testing ×1