我有一个实体,其中包含:
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "assessment")
@OrderBy(value = "order ASC")
private List<AssessmentPart> assessmentParts = new LinkedList<>();
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "assessment")
private List<AssessmentText> texts = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)
如你所见,有两个集合需要急切加载.这不起作用,hibernate引发异常:
Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
Run Code Online (Sandbox Code Playgroud)
那是因为Hibernate无法一次性获取多个集合.但是,如果我改变List来Set和LinkedList到HashSet这部分工作正常,但其他-发生更恼人的问题.
当我试图从数据库中获取实体时使用:
entityManager.find(entityClass, primaryKey);
Run Code Online (Sandbox Code Playgroud)
它失败了:
org.hibernate.AssertionFailure: null identifier
Run Code Online (Sandbox Code Playgroud)
我确信我传递给find方法的ID 不是null,我已经调试过,我确信这一点.它在某种程度上消失在Hibernate内部.
如果我将集合类型更改为LAZY一切正常工作没有错误,但在某些情况下我需要使用EAGER.
有没有人有解决方法如何修复它?要么我可以有一个集,但防止发生断言错误或我可以有一个列表但不知何故避免多个获取包错误.
我在用:
Hibernate 4.2.2.Final
Tomcat 7
JPA 2.0
JDK 1.7
Run Code Online (Sandbox Code Playgroud)
编辑 …
我知道如果试图通过简单的循环从集合中删除循环,我会得到这个异常:java.util.ConcurrentModificationException.但我正在使用Iterator,它仍然会产生这个异常.知道为什么以及如何解决它?
HashSet<TableRecord> tableRecords = new HashSet<>();
...
for (Iterator<TableRecord> iterator = tableRecords.iterator(); iterator.hasNext(); ) {
TableRecord record = iterator.next();
if (record.getDependency() == null) {
for (Iterator<TableRecord> dependencyIt = tableRecords.iterator(); dependencyIt.hasNext(); ) {
TableRecord dependency = dependencyIt.next(); //Here is the line which throws this exception
if (dependency.getDependency() != null && dependency.getDependency().getId().equals(record.getId())) {
tableRecords.remove(record);
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图将HTML返回到我的Spring MVC控制器时遇到了一个问题.
它看起来像这样:
@RequestMapping(value = QUESTION_GROUP_CREATE_URL, method = RequestMethod.POST)
public
@ResponseBody
String createQuestionGroup(@RequestBody JsonQuestionGroup questionGroup, HttpServletResponse response) {
// questionGroup - this comes OK.
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
return "<div></div>";
}
Run Code Online (Sandbox Code Playgroud)
我的Spring配置:
<bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<property name="favorPathExtension" value="false"/>
<property name="favorParameter" value="true"/>
<property name="mediaTypes">
<value>
json=application/json
xml=application/xml
html=application/html
</value>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
我看到firebug响应就像:{"String":"<div></div>"}我怎么能告诉这个方法发送简单的HTML作为响应?
我试图了解java中的线程安全机制,我需要一些帮助.我有一节课:
public class ThreadSafe {
private Executor executor = new ScheduledThreadPoolExecutor(5);
private long value = 0;
public void method() {
synchronized (this) {
System.out.println(Thread.currentThread());
this.value++;
}
}
private synchronized long getValue() {
return this.value;
}
public static void main(String... args) {
ThreadSafe threadSafe = new ThreadSafe();
for (int i = 0; i < 10; i++) {
threadSafe.executor.execute(new MyThread());
}
}
private static class MyThread extends Thread {
private ThreadSafe threadSafe = new ThreadSafe();
private AtomicBoolean shutdownInitialized = new AtomicBoolean(false);
@Override …Run Code Online (Sandbox Code Playgroud) 我正在使用JPA而不是Hibernate 4.1.4.Final实现.我的问题是我无法EntityManager#remove()工作.所有其他:更新,插入,选择操作正常工作,除了这一个.
我的persistence.xml档案:
<persistence-unit name="myEntityManager">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>core.entity.Answer</class>
<class>core.entity.BaseEntity</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<validation-mode>NONE</validation-mode>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)
我的Answer实体:( BaseEntity类只保存主键 - ID)
@Entity
@Table(name = "ANSWER")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Answer extends BaseEntity {
@Column(name = "ANSWER_VALUE")
private String answerValue;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "QUESTION_ID", nullable = false)
private Question question;
//overrided equals, hascode, toString
// all getters and setters
}
Run Code Online (Sandbox Code Playgroud)
致电时:
public void remove(T entity) …Run Code Online (Sandbox Code Playgroud) 我有这样的实体:
@Entity
@Table(name = "ASSESSMENT")
public class Assessment {
//All other fields..
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "assessment")
@OrderBy(value = "order ASC")
private List<AssessmentPart> assessmentParts = new LinkedList<>();
public List<AssessmentPart> getAssessmentParts() {
return assessmentParts;
}
//All other getters/setters
}
Run Code Online (Sandbox Code Playgroud)
另一个:
@Entity
@Table(name = "ASSESSMENT_PART")
public class AssessmentPart {
//All other fields
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ASSESSMENT_ID", nullable = false)
private Assessment assessment;
public Assessment getAssessment() {
return assessment;
}
public void setAssessment(Assessment assessment) {
this.assessment = …Run Code Online (Sandbox Code Playgroud) 我正在尝试在会话有timedout时刷新页面.我将此添加到我<head>的HTML部分:
<meta http-equiv="refresh"
content="${sessionScope['maxInactiveInterval']};url=${pageContext.servletContext.contextPath}/index.htm?reason=expired"/>
Run Code Online (Sandbox Code Playgroud)
不过这样:${sessionScope['maxInactiveInterval']}或${sessionScope.maxInactiveInterval}打印出空值(无).
我知道在JSF中我可以使用:#{session.maxInactiveInterval}它可以工作.如何在JSP页面中进行此操作?
我在我的应用程序中使用JSF Mojarra 2.1.13,PrimeFaces 3.5和Spring 3.2.3.对于DI我使用的是Spring方法(不是CDI).我正在跟踪有关收集器的PrimeFaces演示教程:http://www.primefaces.org/showcase/ui/collector.jsf
一切都工作正常,我可以将我的值添加到列表,获取它们等.问题是,例如,如果我打开两个浏览器并将一些值添加到列表中,然后在另一个浏览器中我添加一些值作为好吧,如果我刷新浏览器,我会看到在两个浏览器中输入的所有值.因此,如果我在另一个浏览器中输入两个值,则在刷新它们之后,我会在两个浏览器中看到四个值.我希望我的价值观不会在不同的会话中分享.
我的bean看起来像这样:
@Component
@ManagedBean
public class ClientBean extends BaseBean {
private Client client = new Client();
private List<Client> clients = new LinkedList<>();
public String reInit() {
client = new Client();
return null;
}
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
public List<Client> getClients() {
return clients;
}
public void setClients(List<Client> clients) {
this.clients = clients;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我正在创建全局变量:
private Client client = new …Run Code Online (Sandbox Code Playgroud) 假设我有一个变量:
<script type="text/javascript">
var myVariable = "something";
</script>
Run Code Online (Sandbox Code Playgroud)
在这个 js 全局变量声明之后,我有另一个 javascript:
<script type="text/javascript" src="myScriptFile.js"></script>
Run Code Online (Sandbox Code Playgroud)
在此文件中,我需要使用全局变量的值myVariable。我知道我可以通过在某些 HTML 中设置此值,然后使用 DOM 或 jQuery 或其他方式在文件中获取此值来实现,但我想避免在 HTML 中创建此类隐藏字段。有没有更好的方法来做到这一点?
java ×7
hibernate ×3
spring ×3
jpa ×2
jsp ×2
spring-mvc ×2
controller ×1
el ×1
iterator ×1
javascript ×1
jquery ×1
jsf ×1
persistence ×1
primefaces ×1
removechild ×1
tomcat ×1