【发布时间】:2013-04-07 11:41:12
【问题描述】:
我创建了以下实体类,其中主键由表生成器计算。
@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 规范时完成的。为什么在新案例中没有发生这种情况?
【问题讨论】:
-
向我们展示存储库的代码,并向我们展示您如何调用此存储库并返回实体。
-
@JBNizet:这对你来说应该没问题。
标签: java spring hibernate jpa spring-data-jpa