我创建了以下实体类,其中主键由表生成器计算。
@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;
在调试日志中,我读到生成工作。
[DEBUG] 生成标识符: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 规范时完成的。为什么在新案例中不会发生这种情况?