【发布时间】:2017-08-21 05:47:45
【问题描述】:
我在使用 Spring Boot、Spring Data 和在外部 jar 中包含实体时遇到了一些问题。任何帮助将不胜感激!
我的 Sprint 数据存储库如下所示:
@Repository
public interface MyFileRepository extends PagingAndSortingRepository<MyFile, Long> {
@Modifying
@Transactional
@Query("Delete from MyFile f where f.created < ?1")
long deleteOldEntities(Date cutoffDate);
}
我在另一个 jar 中的实体完全如下所示:
@Entity
@SequenceGenerator(
name = "SequenceIdGenerator",
sequenceName = "SEQ_ID_MY_FILE",
allocationSize = 20
)
@Table(
name = "MYFILE_TABLE"
)
public class MyFile extends BaseEntity {
private long id;
private byte[] data;
[...]
public MyFile() {}
@Id
@Column(
name = "id",
nullable = false
)
@GeneratedValue(
generator = "SequenceIdGenerator"
)
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
[...]
}
BaseEntity 看起来像这样:
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
private static final Charset UTF_8 = Charset.forName("UTF-8");
private Date created = null;
private Date updated = null;
public BaseEntity() {}
@Column(
name = "created"
)
@Temporal(TemporalType.TIMESTAMP)
public Date getCreated() {
return this.created == null?null:new Date(this.created.getTime());
}
public void setCreated(Date created) {
if(created != null) {
this.created = new Date(created.getTime());
}
}
所以,当我尝试运行这段代码时,我得到一个很长的堆栈跟踪,它基本上以:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: MyFile is not mapped [Delete from MyFile f where f.created < ?1]
我相信这可能与 Spring Boot 配置有关。外部 jar 在任何地方都没有和 @SpringBootApplication。它基本上只是一个装有我所有实体的罐子。
我的应用程序 jar 有这个:
@SpringBootApplication
@EntityScan("myapp.service.dao.entity") --> This is the package where all my entities are located.
public class CommonApplication {
}
我的错误是什么?
【问题讨论】:
-
在此处查看最受欢迎的答案:stackoverflow.com/questions/9504824/… 看起来您必须在 persistence.xml 中指定 jar 文件名
-
是的,但是 Spring Boot 的重点是没有 xml-config。我原以为@EntityScan 就足够了。
-
@benbjo 你解决了这个问题吗?我正在设置一个 Spring Boot 应用程序,但我无法从外部 JAR 加载实体
标签: java spring spring-boot jar spring-data