0

休止状態 4.1.2 を使用しています

そして、テーブルにデータを挿入したいと思います。

次のように、休止状態の構成でSQLを使用して実現できることを知っています
<property name="hibernate.hbm2ddl.import_files" value="/file1.sql,/file2.sql"/>

しかし、休止状態が開始された後、Javaコードで一度だけデータを自動的に挿入する方法は他にありますか?

私はこのようにしたい:

  public Role getRoleByName(EnumRole name) 
  {
    return (Role) sessionFactory.getCurrentSession()
    .createQuery("from Role where name   = :name")
    .setParameter("name", name).uniqueResult();
  }

 public void insertRoles(){
for(EnumRole role:EnumRole.values())
{
   Role r=getRoleByName(role);
   if(r==null)
   {
       r=new Role();
       r.setName(role);
       r.setDescription(role.getDescription());
       sessionFactory.getCurrentSession().save(r);
   }
}

列挙ロール:

public enum EnumRole {

ROLE_CLIENT("РОЛЬ КЛИЕНТА"),
ROLE_ADMIN("РОЛЬ АДМИНСТРАТОРА"),
ROLE_CONSUMER("РОЛЬ КОМПАНЬОНА"),
ROLE_ANONYMOUS("НЕ АВТОРИЗОВАННЫЙ ПОЛЗОВАТЕЛЬ");

EnumRole(String descriptin)
{
    this.descriptin=descriptin;
}

public String getDescription()
{
    return this.descriptin;
}
private String descriptin;
}
4

2 に答える 2

0

@PostConstruct注釈付きのメソッドを使用して任意の Spring Bean を作成し、たとえば次を使用してトランザクションを作成する必要がありますPlatformTransactionManager

@Service
public class AnyBean  {
  @Autowired
  private PlatformTransactionManager transactionManager;
  @Autowired
  private SessionFactory sessionFactory;

  @PostConstruct
  private void init() {
    TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
    transactionTemplate.execute(new TransactionCallback<Object>() {
      @Override
      public Object doInTransaction(TransactionStatus transactionStatus) {
        // HERE YOU CODE
        for(EnumRole role:EnumRole.values())
        {
          Role r = getRoleByName(role);
          if(r==null)
          {
            r=new Role();
            r.setName(role);
            r.setDescription(role.getDescription());
            sessionFactory.getCurrentSession().save(r);
          }
        }            
        return null;
      }
    });
  }
}

これが役に立ったことを願っています。

于 2013-07-31T20:07:42.153 に答える
0

insertRoles()でマークされたメソッドを使用してサービスを作成し、@Transactionalを呼び出しますservice.insertRoles()
または、より簡単に:

  1. トランザクションを作成する
  2. 役割を追加する
  3. コミット (またはエラーが発生した場合はロールバックを管理)

アプリケーションの起動が完了した後にこれを行います

于 2013-07-31T19:13:11.493 に答える