0
두 개의 엔티티 User : UserRole이 있습니다. 동일한 이름의 DB 및 클래스의 테이블로 실현됩니다. 새 사용자를 만들면 그를 위해 userrole을 만들어야합니다. 사용자 생성 또는 사용자 생성 중에 예외가 발생하면 사용자를 생성 할 수 없습니다. 질문은 try catch 블록을 설정하는 방법을 모른다.두 엔티티를 하나의 트랜잭션으로 저장할 때 try/catch를 사용하는 방법은 무엇입니까?
1)
try
{
UserDA.BeginTransaction();
try
{
UserDA.Save(newUser);
UserDA.CommitTransaction();
}
catch()
{
throw SomeException;
UserDA.RollbackTransaction();
}
UserRoleDA.BeginTransaction();
try
{
UserRoleDA.Save(newUser);
UserRoleDA.CommitTransaction();
}
catch()
{
throw SomeException;
UserRoleDA.RollbackTransaction();
}
}
catch()
{
//catch user creation exception
}
2)
UserDA.BeginTransaction();
try
{
UserDA.Save(newUser);
UserDA.CommitTransaction();
UserRoleDA.BeginTransaction();
try
{
UserRoleDA.Save(newUser);
UserRoleDA.CommitTransaction();
}
catch()
{
throw SomeException;
UserRoleDA.RollbackTransaction();
}
}
catch()
{
//catch
UserDA.RollbackTransaction();
}
사람이 더 정확한 방법을 알고있을 수 있습니다 : 나는 몇 가지 대안이있다.
어떤 언어를 사용하고 있습니까? – jigfox
역할을 만들기 전에 사용자를 생성하는 트랜잭션을 커밋해야합니까? 언어를 지정하는 것뿐만 아니라 데이터베이스를 지정하지 않습니다. –
왜 각각 하나의 성명서 만 가지고 거래를 해체합니까? 트랜잭션의 요점은 하나의 원자 범위 내에서 여러 명령문을 실행하는 것입니다. 각각의 개별 문장은 이미 원자 적이기 때문에 자체적으로 트랜잭션이 필요하지 않습니다. – David