public class User implements java.io.Serializable, UserDetails {
@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "person") )
@Id
@GeneratedValue(generator = "generator")
@Column(name = "person_id", unique = true, nullable = false)
public int getPersonId() {
return this.personId;
}
public void setPersonId(int personId) {
this.personId = personId;
}
@OneToOne(fetch = FetchType.LAZY)
@PrimaryKeyJoinColumn
public Person getPerson() {
return this.person;
}
public void setPerson(Person person) {
this.person = person;
}
@Column(name = "email", unique = true, nullable = false, length = 50)
public String getEmail() {
return this.email;
}
public void setLoginVersuche(int loginVersuche) {
this.loginVersuche = loginVersuche;
}
@Column(name ="loginVersuche")
public int getLoginVersuche() {
return loginVersuche;
}
...omitted code...
}
和人:
public class Person implements java.io.Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "idPerson", unique = true, nullable = false)
public Integer getIdPerson() {
return this.idPerson;
}
public void setIdPerson(Integer idPerson) {
this.idPerson = idPerson;
}
@OneToOne(fetch = FetchType.LAZY, mappedBy = "person")
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
...omitted code...
}
我有我的刀:
@Repository
public interface UserDAO extends CrudRepository<User, Integer>{
User findByEmail(String user);
}
User userByDB = userDAO.findByEmail(username);
userByDB.setLoginVersuche(userByDB.getLoginVersuche()+1);
userDAO.save(userByDB);
@Transactional
@Modifying
@Query("update User u set u.loginVersuche = u.loginVersuche+1, u.gesperrt = ?1 where u.email = ?2")
public int incrementLoginVersuche(boolean gesperrt, String email);
@Bean(name = "transactionManager")
public PlatformTransactionManager txManager() {
return new DataSourceTransactionManager(dataSource());
}
根据文档(4.6.交易性)
存储库实例上的CRUD方法默认是事务性的
因此,在UserDAO
接口上不需要@transactional(readOnly=true)
注释。相反,您应该使您的保存方法成为事务性的(假设您的类是一个有效的Spring组件):
@Transactional
public void incrementVersuche() {
...
User userByDB = userDAO.findByEmail(username);
userByDB.setLoginVersuche(userByDB.getLoginVersuche()+1);
userDAO.save(userByDB);
}
public interface IUserSaver {
void incrementVersucheAndSave(String username)
}
@Service
public class UserSaver implements IUserSaver {
@Transactional
public void incrementVersucheAndSave(String username) {
User userByDB = userDAO.findByEmail(username);
userByDB.setLoginVersuche(userByDB.getLoginVersuche()+1);
userDAO.save(userByDB);
}
}
....
@Autowired
private IUserSaver saver;
public void incrementLoginVersuche() {
....
saver.incrementVersucheAndSave(username);
}
我们有一个名为的实体,它与实体有OneToOne关系。
我们正在构建一个应用程序,我们需要将实体更新登录到历史表中。我试图通过Hibernate拦截器来实现这一点,我们可以设法获得所有的更改,但很难将它们插入审计表。 我的JPA配置 我的拦截器 } 在方法afterTransactionCompletion中,我需要将所有审计实体写入DB,Autowire不工作,因为这不是spring管理的bean,是否有任何方法可以在此方法中获取DB会话,以便我可以
你好,我在删除实体时遇到了问题。entitymanager不会删除实体。有人看到代码中的错误吗? 错误消息: java.lang.Assertionerror: 预期 :null 实际 :帐户{id=1, 客户=客户 id=1, 名字=“金”, 姓氏=“佩德森”, email='kim@yahoo.no“, 电话号码=”90045870“, 出生=1980-11-05 00:00:00.0}, 登
我正在读《理解SQL Server中的锁定》。但我不太理解更新锁的目的。 详细说明如下: 更新锁 更新(U)锁防止常见形式的死锁。典型的更新模式包括事务读取记录,获取资源(页或行)上的共享(S)锁,然后修改行,这需要锁转换为排他(X)锁。如果两个事务获取资源上的共享模式锁,然后尝试同时更新数据,一个事务尝试锁转换为排他(X)锁。共享模式到排他锁的转换必须等待,因为一个事务的排他锁与另一个事务的共享
我正在制作一个由任务管理器组成的应用程序。 在此任务管理器中,收件箱列表中有3个列表(收件箱、今天和星期),其中仅显示不带类别的任务,而在其他两个列表中,分别显示今天和本周的带类别或不带类别的任务。 我希望能够更改三个列表中一个任务的类别。因此,如果我更改收件箱任务的类别(不应该有类别),整个表都应该更新,任务应该从列表中删除。 我调试了程序,任务被正确地从列表中删除,但只有类别的单元格被更新,而
问题内容: 它是有效申报,并在关系的双方,如: 我找不到任何表明这是无效的信息,但似乎在持久性过程中,至少必须违反关系的一侧。(例如,如果首先写入changeEntry,则changeEntryDetails临时为null)。 尝试此操作时,我看到抛出了异常。 我想避免在可能的情况下放宽约束,因为双方都 必须 存在。 问题答案: 声明并在关系的两边是否合法(…)我找不到任何表明无效的内容,但是在持