1

休止状態で新しいシステムを設計する予定です。たとえば、マッピングを使用して休止状態のクラスを作成した場合

@Entity
@Table(name="user")
public class User{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer userid;

    private String username;
    private String password;

    @OneToOne
    private Role userrole;

.....
}

役割クラスを追加

@Entity
public class Role {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    private String roleName;
...
}

この場合、ユーザーをデータベースに追加するたびに、db からロール オブジェクトを取得し、ユーザー オブジェクトに追加して保存する必要があります。このようなマッピングを他の複雑な設計クラスに定義すると、関連するマップされたクラスを db から取得する必要があります。これはdbへの余分な負荷のように感じます。効率的にそれを行う方法はありますか?

休止状態のマッピングなしで行う別の計画があります

@Entity
@Table(name="user")
public class User{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer userid;

    private String username;
    private String password;
    private Integer roleid;
 ....
}

この場合、id をユーザー オブジェクトに追加して保存するだけです。ただし、db クラスはマップされません。すべてのクラスに対してそれを行うと、db内にマッピングせずにdbテーブルが作成されます。ロール名を取得するためにこれを行うと、ロールを取得するために別のSQLを作成する必要があります。

したがって、オブジェクトを保存する最初のアプローチでは、オブジェクトを取得して保存し、2 番目のアプローチでは、2 つのオブジェクトを取得するために 2 つの SQL を作成する必要があります。これはそれを実装する良い方法ですか?

これらの 2 つの設定のうち、効率的で使いやすいのはどれでしょうか。推奨される方法について何か議論してください。

4

1 に答える 1

1

この場合、ユーザーをデータベースに追加するたびに、db からロール オブジェクトを取得し、ユーザー オブジェクトに追加して保存する必要があります。このようなマッピングを他の複雑な設計クラスに定義すると、関連するマップされたクラスを db から取得する必要があります。これはdbへの余分な負荷のように感じます。効率的にそれを行う方法はありますか?

ここでは、DB からロール オブジェクトをロードしませんでした。Role インスタンスを作成し、それを User に追加するだけです。

  Role r=new Role();
  r.setName("ROLE_NAME");

  user.setRole(r);
  r.setUser(user);
  session.saveOrUpdate(user);
  session.saveOrUpdate(r);

saveOrUpdate()ロールをユーザーにカスケードすると、重複操作を減らすことができます。

これらの 2 つの設定のうち、効率的で使いやすいのはどれでしょうか。推奨される方法について何か議論してください。

通常、JDBC 認証ロールとユーザー テーブルは分離してマッピングする必要があります。したがって、最初のアプローチが推奨されます。

于 2013-09-28T11:41:27.713 に答える