在EclipseLink生成ddl后,是否有可能执行sql脚本?
换句话说,是否可能使用带有"drop-and-create-tables"的EclipseLink属性"eclipselink.ddl-generation",并且EclipseLink在创建后执行另一个sql文件(将一些数据插入到刚创建的某些表中)表定义?
我正在使用带有GlassFish v3的EclipseLink 2.x和JPA 2.0.
或者我可以在项目调用的java方法(与ejb3的战争)部署中初始化表吗?
我在继承和@PrePersist注释方面遇到了一些问题.我的源代码如下所示:
_带有注释updateDates()方法的'base'类:
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Base implements Serializable{
...
@Id
@GeneratedValue
protected Long id;
...
@Column(nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Column(nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date lastModificationDate;
...
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getLastModificationDate() {
return lastModificationDate;
}
public void setLastModificationDate(Date lastModificationDate) {
this.lastModificationDate = lastModificationDate;
}
...
@PrePersist
protected void updateDates() {
if (creationDate == null) {
creationDate = new Date();
}
lastModificationDate …Run Code Online (Sandbox Code Playgroud) 我正在使用EclipseLink作为JPA提供程序.此外,我正在使用以下TABLE_PER_CLASS继承结构
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@NamedQueries({
@NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p")
})
public class Parent {
// the class code follows here
}
@javax.persistence.Entity
@NamedQueries({
@NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c")
})
public class Child extends Parent {
// the class code follows here
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是我只想接收父类的条目.但是使用命名查询"SELECT p FROM Parent p",也会返回子表中的所有条目.
选择或查找代码如下:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
Run Code Online (Sandbox Code Playgroud)
因此查询即"SELECT p FROM Parent p".
我怎样才能真正接收父条目而不是这个inheritacne层次结构的所有条目?
简而言之:如何保持所有子条目不受影响,并仅返回父条目?
编辑1:
我正在使用EclipseLink 2.0.1,但每次我通过类型表达式尝试axtavt的解决方案时,我都会收到以下错误:
"Invalid Type Expression on [my.domain.Parent]. The class does not have …Run Code Online (Sandbox Code Playgroud) 我想做这样的事情:
@Stateless
@Path("/sensors/{sensorid}/version")
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public class SensorVersionRestView extends VersionRestView{
@PathParam("sensorid")
private String sensorid;
@GET
@Path("count")
// so the complete path is i.e.
// domain.com/rs/sensors/111211/version/count
public void getCount() {
// do something with the sensorId....
}
}
Run Code Online (Sandbox Code Playgroud)
但我唯一得到的是null运行时(我使用带有Jersey的Glassfish v3).编译器和eclipse从未提到@PathParam成员类变量的问题.
我的构造有什么问题?
主要问题是,为什么我不想在这个类中的每个方法上使用整个路径,还有另一个类处理传感器层上的一些休息操作(deomain.com/rs/sensors/count ie)
我在Glassfish v3应用服务器中使用JSF 2.0和EJB 3.1.我实际上面临着以下问题:
在带有RequestScope的MenagedBean中,我想访问一个会话对象(一个带有@Stateful的EJB),它应该存储一些会话相关信息作为选择的类别,seleced页面(带有一个数据表的paginator for每个类别)等 - 我认为没什么特别的.
第一次选择类别时,将创建并显示数据表.好吧到目前为止.现在,如果单击某个项目(行)以显示项目的详细信息,或者是否应显示下一页面,则会重新创建会话(有状态EJB),并再次使用默认值来显示和呈现页面.
代码如下:
@ManagedBean
@RequestScoped
public class TableViewBean {
@EJB
SessionBean session;
public DataModel getTable() {
return session.getDataModel();
}
public SessionBean getSession(){
return session;
}
public void next() {
session.getPaginator().nextPage();
session.resetList();
}
public void previous() {
session.getPaginator().previousPage();
session.resetList();
}
// some other code
}
Run Code Online (Sandbox Code Playgroud)
和会话EJB:
@Stateful
public class SessionBean {
private String selectedType = "Entity";
private DataModel dataModel;
private int rowsPerPage = 5;
private Paginator paginator;
public void setSelectedType(String type){
if(!type.equalsIgnoreCase(selectedType)){
selectedType = …Run Code Online (Sandbox Code Playgroud) 我创建了以下场景:
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class MyEntity implements Serializable{
@Id
@GeneratedValue
protected Long id;
...
@ElementCollection
@CollectionTable(name="ENTITY_PARAMS")
@MapKeyColumn (name = "ENTITY_KEY")
@Column(name = "ENTITY_VALUE")
protected Map<String, String> parameters;
...
}
Run Code Online (Sandbox Code Playgroud)
以及:
@javax.persistence.Entity
public class Sensor extends MyEntity{
@Id
@GeneratedValue
protected Long id;
...
// so here "protected Map<String, String> parameters;" is inherited !!!!
...
}
Run Code Online (Sandbox Code Playgroud)
所以运行这个例子,没有创建表,我收到以下消息:
WARNUNG: Got SQLException executing statement "CREATE TABLE ENTITY_PARAMS (Entity_ID BIGINT NOT NULL, ENTITY_VALUE VARCHAR(255), ENTITY_KEY VARCHAR(255), Sensor_ID BIGINT NOT NULL, ENTITY_VALUE VARCHAR(255))": com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: …Run Code Online (Sandbox Code Playgroud)