我正在使用Hibernate 3编写Web应用程序.
所以,过了一会儿我发现事情很慢.所以我测试了hibernate profiler,发现hibernate会为简单的操作做出无理的多次db调用.原因是我加载一个Object(这个对象有几个"父母"),这些"父母"有其他"父母".所以基本上hibernate会加载它们,即使我只需要基本对象.好的,所以我看着懒加载.这导致我进入Lazyloading-exception,因为我有一个MVC webapp.
所以现在我有点困惑,我最好的方法是什么.基本上我只需要更新对象上的单个字段.我已经拥有了对象键.
我应该:1.进入懒惰加载.然后重写我的应用程序以获得开放会话视图?2.挖掘延迟加载.然后重写我的dao更具体.例如,编写DAO方法,这些方法将返回仅与每个用例所必需的内容相关联的对象?可能是很多额外的方法...... 3.从头开始休眠并自己做吗?4.现在不能想到其他解决方案.有什么建议?
什么是最佳做法?
我向你们解雇这个问题,因为项目页面本身并没有很多信息.基本上我设置native2ascii-maven-plugin来处理我的一些资源.它适用于处理根目录中的文件.但现在我有子目录下的文件:/template/email/并希望它们包含在处理中.你能帮帮我吗?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>native2ascii-maven-plugin</artifactId>
<version>1.0-alpha-1</version>
<configuration>
<dest>target/resources</dest>
<src>src/main/resources</src>
</configuration>
<executions>
<execution>
<id>native2ascii-utf8</id>
<goals>
<goal>native2ascii</goal>
</goals>
<configuration>
<encoding>UTF8</encoding>
<includes>ApplicationResources*.properties, errors.properties, /template/email/newBooking*.ftl</includes>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
谢谢一堆!
我创建了一个休眠标准,用于检查合同是否在一年内有效.合同的开始日期和结束日期作为标准日期字段.
所以习惯SQL-SERVER,我会想到这个SQL的内容:
SELECT * FROM CONTRACT WHERE YEAR(startDate) <= ? AND YEAR(endDate) >= ?
Run Code Online (Sandbox Code Playgroud)
该问号是给定年份的整数.
那么如何将其转换为休眠标准呢?
int year = 2011; //Just a testyear for example purposes.
DetachedCriteria criteria = DetachedCriteria.forClass(Contract.class)
.add(Restrictions.le("startDate", year))
.add(Restrictions.ge("endDate", year));
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我错过了将日期转换为一年的位置,因此可以进行比较.当然,我的代码不会按原样运行.
有关如何获得理想结果的任何建议?
让我们说我们有一个 <div style="width:100px;">This text is too long to fit</div>
div中的文本是动态的.而且我想强制文字适应宽度而不是破坏.所以我需要一些功能来测试文本是否适合,如果不适合,那么我想显示实际适合的文本部分.并追加...到最后.
文本太长的结果应该是这样的: "This text is..."
做一些我想要的标准方法吗?通过javascript,jquery,jsp或java?
谢谢!
编辑:感谢您的快速和许多答案!我在java中通过猜测适合多少个字符来做这个.这似乎不是最佳解决方案,所以这就是我来到这里的原因.
css解决方案对我来说非常完美.它不是那么大的交易,它不适用于Firefox,因为我的客户都使用ie无论如何.:)
有人可以帮我理解如何配置hibernate来做我想做的事.
我有一个父母实体"公寓",其中"房间"列表为儿童.我有一个表格来编辑"公寓",在该表格中,我列出了所有儿童"房间"仅供参考.客房以单独的形式添加和编辑.
因为我在appartment-form中列出了房间,我将lazyloading设置为false:
@OneToMany
@JoinColumn (name = "appartmentId")
@LazyCollection (LazyCollectionOption.FALSE)
private List<Room> room;
Run Code Online (Sandbox Code Playgroud)
但如果我编辑公寓并存储它,所有公寓房间突然消失.在数据库中,它们不会被删除,而是被解除引用(如在appartmentId = null中).
那么如何配置hibernate只能保留我的Appartment-object.而不是触摸孩子们?
这是我的保存动作:
public String save() throws Exception {
boolean isNew = (appartment.getAppartmentId() == null);
appartment = appartmentManager.save(appartment);
String key = (isNew) ? "appartment.added" : "appartment.updated";
saveMessage(getText(key));
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud) 我有一个多对一的预订映射.预订必须属于一个房间.一个房间可以有几个预订.
如果房间被删除,我希望删除该房间的所有预订.我将如何使用hibernate注释来执行此操作?
@Entity
public class Booking implements Serializable{
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private Date startDate;
private Date endDate;
private Date createdDate;
@ManyToOne
@JoinColumn (name = "roomId")
private Room room;
...
}
Run Code Online (Sandbox Code Playgroud) 我有一个文件作为byte [] fileContent.我的mySql方案是由Hibernate生成的,默认情况下,hibernate将fileContent的sql-type设置为BLOB.
但BLOB对我的文件来说还不够大.我至少需要一个MEDIUMBLOM甚至一个LONGBLOB.
但是我如何对我的字段进行注释以便Hibernate将我的字段生成为LONGBLOB?我现在搜索谷歌2小时没有得到任何东西......
这不应该是一个如此简单和常见的任务,它应该在某处记录?
请帮助一个沮丧的程序员!
@WhatAnnotationCanIUseToForceHibernateToMakeThisALONGBLOB????
private byte[] fileContent;
Run Code Online (Sandbox Code Playgroud) 这里有很多关于事务和 JUnit 的问题。但请在丢弃之前仔细阅读本文,因为我找不到任何有相同问题的人。
我有一个商业方法,注释为@Transactional。在此方法中,如果发生某些特殊情况,我将以编程方式进行回滚。TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
现在我们不要讨论以编程方式回滚是好是坏。让我们接受它在那里,并接受它会留在那里并与它一起工作。
如果我启动我的应用程序并以老式方式测试这种业务方法,那么一切都会完美运行。当东西应该回滚时,它就会回滚,当一切正常时,一切都正常。我还做了一个测试,只是@Transactional为了看看没有任何东西被回滚,即使它应该被回滚。一切都按计划进行。
但我遇到的问题是 JUnit。目前我对此方法进行了 2 个 JUnit 测试。1 应该失败(并以编程方式触发回滚),而 1 则成功但不回滚。
我已经尝试了 Junit 类的很多不同设置。目前它看起来像这样:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:springTestContext.xml", "classpath:springTestContext-dao.xml"})
@TransactionConfiguration(transactionManager = "txManager")
public class MyManagerTest extends AbstractTransactionalJUnit4SpringContextTests {
@Mock
private ProductDao productDao;
@InjectMocks
MyManager myManager = new MyManagerImpl();
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testUnParsableXml() {
String xml = "adlsfas";
Response response = myManager.processXMLContent(xml);
assertFalse(response.isSuccess());
System.out.println(response.getResponse());
}
}
@Service("myManager")
public class MyManagerImpl extends BaseManager implements MyManager { …Run Code Online (Sandbox Code Playgroud) 我有一个表单,当提交表单(输入类型=“提交”)时,我想使用预先填充的电子邮件消息打开客户端默认邮件浏览器。
因此,当用户单击提交时,需要发生两件事。打开电子邮件并提交表格。
另外,如何使用表单中输入的值来预填充电子邮件?
我是 javascript-jquery 的新手,所以拜托,任何代码示例都会有很大帮助!
感谢您的帮助!
我有一个带有上传表单的Web应用程序,用户可以上传文件.
我想将文件存储在文件夹'files'中.我希望这个文件夹直接放在webapp-root下.
使用struts2,在我的uploadFileAction中,我可以轻松设置此路径 String uploadDir = ServletActionContext.getServletContext().getRealPath("/files")+ "/";
但是当我试图检索文件时,显然我尝试访问该文件的bean无法访问getServletContext(),因此会抛出nullpointergetRealPath
现在我想弄清楚我应该如何处理这个问题.我听说过弹簧资源是要走的路,但是我找不到任何相关的例子.
有一个简单的方法来获得我的路径?我只想将rootpath发送到我的webapp.没有更多的东西......
java ×6
hibernate ×5
annotations ×2
javascript ×2
jquery ×2
orm ×2
blob ×1
cascade ×1
file-upload ×1
html ×1
jpa ×1
jsp ×1
junit ×1
mailto ×1
maven ×1
performance ×1
save ×1
servlets ×1
spring ×1
transactions ×1