我有一个JPA实体,其属性设置为
@ManyToOne
@Column(name="LicenseeFK")
private Licensee licensee;
Run Code Online (Sandbox Code Playgroud)
但是当我在JBoss 6上部署时,应用程序会抛出一个错误:
org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property
Run Code Online (Sandbox Code Playgroud)
我使用Hibernate 3.5作为JPA 2.0实现.
我应该用什么来引用外键列?
我已经构建了一个看起来像这样的NamedQuery:
@NamedQuery(name = "EventLog.viewDatesInclude",
query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
+ "el.timeMark <= :dateTo AND "
+ "el.name IN (:inclList)")
Run Code Online (Sandbox Code Playgroud)
我想要做的是填写参数:inclList与项目列表而不是一个项目.例如,如果我有一个new List<String>() { "a", "b", "c" }如何在:inclList参数中得到它?它只允许我编纂一个字符串.例如:
setParameter("inclList", "a") // works
setParameter("inclList", "a, b") // does not work
setParameter("inclList", "'a', 'b'") // does not work
setParameter("inclList", list) // throws an exception
Run Code Online (Sandbox Code Playgroud)
我知道我可以构建一个字符串并从中构建整个Query,但我想避免开销.有没有更好的方法呢?
相关问题:如果List非常大,有没有什么好的方法来构建这样的查询?
使用a @OneToMany和@ElementCollection注释有什么区别,因为两者都在一对多关系上工作?
我正在使用JPA(EclipseLink)和Spring.假设我有一个带有自动生成ID的简单实体:
@Entity
public class ABC implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
// ...
}
Run Code Online (Sandbox Code Playgroud)
在我的DAO类中,我有一个调用persist()此实体的insert方法.我希望该方法返回新实体的生成ID,但是当我测试它时,它返回0.
public class ABCDao {
@PersistenceContext
EntityManager em;
@Transactional(readOnly=false)
public int insertABC(ABC abc) {
em.persist(abc);
// I WANT TO RETURN THE AUTO-GENERATED ID OF abc
// HOW CAN I DO IT?
return abc.id; // ???
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个包装DAO的服务类,如果这有所不同:
public class ABCService {
@Resource(name="ABCDao")
ABCDao abcDao;
public int addNewABC(ABC abc) {
return abcDao.insertABC(abc);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用like子句编写JPQL查询:
LIKE '%:code%'
Run Code Online (Sandbox Code Playgroud)
我想有代码= 4并找到
455 554 646 ...
我无法通过 :code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
Run Code Online (Sandbox Code Playgroud)
因为在另一个地方我不需要:value被%chars 包裹.有帮助吗?
我正在尝试运行这个基本的JPA/EJB代码:
public static void main(String[] args){
UserBean user = new UserBean();
user.setId(1);
user.setUserName("name1");
user.setPassword("passwd1");
em.persist(user);
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.JPA.Database
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我在互联网上搜索,我找到的原因是:
这是由您创建对象的方式引起的,即如果您明确设置了ID属性.删除ID分配修复了它.
但我没有得到它,我需要修改什么来使代码工作?
我有以下方法.
public Profile readUser(String email){
EntityManager em = EMF.get().createEntityManager();
return em.find(Profile.class, email);
}
Run Code Online (Sandbox Code Playgroud)
以上是实体经理的用法吗?或者有必要关闭他们?请提出任何建议.
在persistence.xml JPA配置文件中,您可以使用如下行:
<persistence-unit name="com.nz_war_1.0-SNAPSHOTPU" transaction-type="JTA">
Run Code Online (Sandbox Code Playgroud)
或有时:
<persistence-unit name="com.nz_war_1.0-SNAPSHOTPU" transaction-type=”RESOURCE_LOCAL”>
Run Code Online (Sandbox Code Playgroud)
我的问题是:
transaction-type="JTA"和之间有什么区别transaction-type=”RESOURCE_LOCAL”?
我还注意到一些缺少事务类型的persistence.xml文件.这是对的吗?