主キーがテーブル ジェネレーターによって計算される次のエンティティ クラスを作成しました。
@SuppressWarnings("serial")
@Entity
public class Article implements Serializable {
@Id
@TableGenerator(name = "ARTICLE_TABLE_GEN", table = "sequences", pkColumnName = "seq_name", valueColumnName = "seq_count", pkColumnValue = "ART_SEQ")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ARTICLE_TABLE_GEN")
private long id;
デバッグ ログで、生成が機能したことを確認しました。
[デバッグ] 生成された識別子: 200、戦略を使用: org.hibernate.id.MultipleHiLoPerTableGenerator
エンティティは JpaRepository によって管理されます。
@Repository
public interface IArticleRepository extends JpaRepository<Article, Long> {
List<Article> findByShortTextLike(String shortText);
}
Java コードでは、サービスを介してこのリポジトリにアクセスします。
@Service
public class ArticleService implements IArticleService {
@Autowired
private IArticleRepository articleRepository;
@Override
@Transactional(readOnly = true)
public Article getArticleByID(long id) {
return this.articleRepository.findOne(id);
}
@Override
@Transactional
public Article createArticle(String shortText, String longText,
String packageUnit, double weight, String group, char abcClass) {
if (getArticleByShortText(shortText).size() == 0) {
Article article = new Article();
article.setShortText(shortText);
article.setDescription(longText);
article.setPackageUnit(packageUnit);
article.setWeight(weight);
article.setMaterialGroup(group);
article.setClassABC(abcClass);
this.articleRepository.saveAndFlush(article);
return article;
} else
return null;
}
@Override
@Transactional(readOnly = true)
public List<Article> getArticleByShortText(String short_text) {
return this.articleRepository.findByShortTextLike(short_text);
}
}
サービスメソッド「createArticle」がリポジトリを呼び出して、新しいインスタンスをデータベースに保存およびフラッシュした後、これは完全に行われます。ただし、生成された ID は、メソッドが返すオブジェクトには書き込まれません。
これは、データベース列で AUTO_INCREMENT 指定を使用したときに行われたことを覚えています。新しいケースでこれが起こらないのはなぜですか?