2016-10-20 4 views
0

I持って次のMongoDBリポジトリMongoRepositoryカスタムID

public interface TeamRepository extends MongoRepository<Team, TeamId> { 
    .... 
} 

そして、次のクラス:

public abstract class DbId implements Serializable { 
    @Id 
    private final String id; 

    public DbId(final String id) { this.id = id;} 

    public String getId() { return id;} 
} 

public class TeamId extends DbId { 

    public TeamId(final String id) { 
     super(id) 
    } 
} 

あなたが見ることができるように、私はリポジトリのカスタムIDのように持っている(私が代わりにMongoRepositoryを持っていますMongoRepositoryのようなもの)。しかし、私がTeamオブジェクトを保存しようとすると、MongoDBがDBIdの生成方法を知らないというエラーが表示されます。どんな手掛かり?

答えて

0

MongoDb(または任意のデータベース)は、文字列の値が何であるかを知らさずに文字列IDを生成する方法を知らないでしょう。

デフォルトの@Idは、ObjectIdの文字列で、MongoDBによって自動生成されます。あなたがクラスにOBJECTID文字列の種類を変更している場合は、少なくとも、クラスを定義する必要があります:

を**例えば、文字列への変換(serialisable)、:

@Override 
public String toString() { 
    return String.format(
      "TeamID[uniqueString=%s]", 
      myUniqueString); 
} 

**を生成する方法イド。

TeamRepositoryにメソッドを定義すると、save()という文字列をどのように生成するかを指定できます。別の方法としては、例がNumberLongカスタムIDを生成するgetNextSequenceId()を指定

https://www.mkyong.com/mongodb/spring-data-mongodb-auto-sequence-id-example/

をチェックアウトすることができます。うまくいけば、それはあなたの答えにあなたを導きます。

関連する問題