2016-07-29 2 views
0

私はDBからこのユーザーを取得すると、私はuser = UserDao.getUser(1);IDリストのないリストに<Entity>をコピーするには?

を持っていると私は私がuser.getRoles()

someListにコピー必要があるいくつかの List<Role> someList;

を持ってUser

class User{ 
private Long id; 
private String Name; 
private List<Role> roles; 
} 

例えば、いくつかのエンティティを持っている。しかしもし私がuser = user.getRoles()と書いたらRoleのオブジェクトはsomeList IDがnullでない。

someListを別のユーザーに設定したいと思いますが、IDがnullでない場合は使用できません。

私はこの

for (Role role: user.getRoles()) { 
      role.setId(null); 
      someList.add(role); 
     } 

を作ることができますしかし、私はそれが悪い習慣だと思います。多分あなたは最良の方法を知っていますか?途中で動作を休止、あなたは新しいロールオブジェクトを作成する必要があります、それ以外の場合は、Hibernateはあなたが割り当てられていることを知っている:あなたがトランザクション内であり、それは異なるユーザー間Roleオブジェクトを再利用したくないと仮定すると、

+0

あなたは私たちに、より完全なコードを提供することができますあなたが目指していることを理解していますか?私は全く分かりません。 – TMichelsen

答えて

1

同じインスタンスを別のオブジェクトに追加し、idをnullに設定したことを完全に無視します。

は個人的に、私は(IDなし)ロールのリストを受信して​​、新しいものをインスタンス化cloneと呼ばれるRoleクラスの静的メソッドを作成すると思います。

大きな重要な質問は次のとおりです。ロールオブジェクトを本当に再利用したくないのですか?そして、潜在的に同じデータで2つの役割を持っていますが、異なるユーザーに割り当てられています(それは3番目の正規形に反するかもしれませんが、これは要件によって異なります)。

+0

実際に私の問題は少し異なります。ユーザーは単なる例です。編集フォームを開くと、何か変更があったとしても、オブジェクトのコピーを作成して新しいバージョンを割り当てる必要があります。古いオブジェクトも保存してください。つまり、オブジェクトを更新してコピーしないでください。このプロパティには他のオブジェクトとの2つのリストが含まれています – user5620472

+0

クール! :)それで私が上に書いたことは、そのトリックをするべきです。 – Augusto

+0

あなたはアドバイスしたいくつかの例を共有できますか? – user5620472

0

ここは例です。

public class Role { 
    private int id; 
    private String someAttribute; 
    private int otherAttribute; 

    public Role(String someAttribute, int otherAttribute) { 
     this.someAttribute = someAttribute; 
     this.otherAttribute = otherAttribute; 
    } 

    // Other class methods omited for readability 

    public Role clone() { 
     return new Role(someAttribute, otherAttribute); 
    } 

} 

編集:あなたはそれのいずれかのソースコードを提供しなかったので、私は役割のクラスを自分で作っそして、あなたは、このようなループのためにあなたを行うことができます:

for (Role role: user.getRoles()) { 
    someList.add(role.clone()); 
} 
関連する問題