我正在尝试构建一个查询,其中包含一个列,指示用户是否已下载文档.我有一个名为HasDownloaded的表,其中包含以下列:id,documentID,memberID.找出用户是否已下载特定文档很容易; 但我需要生成一个查询,其结果将如下所示:
name id
----------------------
abc NULL
bbb 2
ccc 53
ddd NULL
eee 13
Run Code Online (Sandbox Code Playgroud)
身份证并不重要; 我感兴趣的是文件是否已下载(是否为NULL).
这是我的查询:
SELECT Documents.name, HasDownloaded.id FROM Documents
LEFT JOIN HasDownloaded ON HasDownloaded.documentID = Documents.id
WHERE HasDownloaded.memberID = @memberID
Run Code Online (Sandbox Code Playgroud)
问题是,只有在HasDownloaded表中存在指定用户的条目时,才会返回值.我想保持这种简单,只具有条目HasDownloaded该文件已被下载.因此,如果用户1已经下载了abc,bbb和ccc,我仍然希望ddd和eee显示在结果表中,只是id为NULL.但是WHERE子句只给出了存在条目的值.
我不是一个SQL专家 - 有没有一个运营商会给我我想要的东西?我应该采取不同的方法吗?或者这不可能吗?
对于一切,是否有Big-O表示法的主列表?数据结构,算法,对每个,平均情况,最坏情况等执行的操作.
我有一个来自电子邮件标题的字符串,比如Date: Mon, 27 Oct 2008 08:33:29 -0700.我需要的是GregorianCalendar的一个实例,它将代表同一时刻.就这么简单 - 我该怎么做?
而对于最快的 - 这不能正常工作:
SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)
Run Code Online (Sandbox Code Playgroud)
因为它会将时区标准化为UTC(或您的本地计算机时间,具体取决于Java版本).我需要的是calendar.getTimeZone().getRawOffset()返回-7 * milisInAnHour.
我必须为一组复杂的业务规则编写一个非常大的测试套件,这些规则目前以几种表格形式捕获(例如,如果参数XYZ是这样的,那么值应该在V1和V2之间).每个规则都有一个名称和自己的语义.
我的最终目标是建立一个测试套件,组织成子测试套件,每个规则都有一个测试用例.
一种选择是将所有这些规则硬编码为测试.这是丑陋的,耗时的,不灵活的.
另一种方法是编写一个Python脚本,该脚本将读取规则文件并使用单元测试生成Java类.如果可以的话,我宁愿避免这种情况.另一种变化是使用Jython.
理想情况下,我希望有一个可以读取文件的测试套件,然后在其中定义子套件和测试.所有这些测试都可以从表文件采取了一定的值进行初始化,在我们的系统中运行的固定入口点,然后调用基于预期值的结果会验证功能.
是否有合理的方法只使用Java来解决这个问题?
更新:我可能在某种程度上简化了我们的规则.其中一些确实是表格式(excel风格),另一些则更模糊.一般的问题仍然存在,因为我可能不是第一个遇到这个问题的人.
我使用JDK 1.6,Eclipse Galileo运行CentOS 5.5 x86_64,并安装了0.9.7 ADT; 但是,安装后,Android项目类型不可用.我已检入已安装的软件包列表并已安装.以前有人遇到过这个问题吗?可能是因为我使用了我系统上安装的64位Java VM?
我知道,删除孤立的子对象是SO一个常见的问题以及人们对Hibernate一个共同的问题,那还算标准答案是,以确保你有一些变化cascade=all,delete-orphan或者cascade=all-delete-orphan对孩子的集合.
我希望能够让Hibernate检测到子集合已从父对象中清空/删除,并在更新父对象时从子数据库中删除子表中的行.例如:
Parent parent = session.get(...);
parent.getChildren().clear();
session.update(parent);
Run Code Online (Sandbox Code Playgroud)
我目前的Parent班级映射如下:
<bag name="children" cascade="all-delete-orphan">
<key column="parent_id" foreign-key="fk_parent_id"/>
<one-to-many class="Child"/>
</bag>
Run Code Online (Sandbox Code Playgroud)
在更新附加对象时,这对我来说很好,但是我有一个用例,我们希望能够获取一个分离的对象(由远程客户端通过HTTP/JSON发送到我们的API方法),并将其直接传递给Hibernate会话 - 允许客户端能够以他们喜欢的方式操纵父对象并保持更改.
调用session.update(parent)我的分离对象时,子表中的行是孤立的(FK列设置为null)但不删除.请注意,当我调用时session.update(),这是Hibernate Session第一次看到此对象实例 - 我没有以任何其他方式重新附加或合并对象与Session.我依靠客户端传递其标识符对应于数据库中实际对象的对象.例如,我的API服务方法中的逻辑是这样的:
String jsonString = request.getParameter(...);
Parent parent = deserialize(jsonString);
session.update(parent);
Run Code Online (Sandbox Code Playgroud)
是否有可能Hibernate在传递给分离的父对象时检测孤立的子集合session.update(parent)?或者我是否以某种方式错误地使用了分离的对象?
我希望我可以避免与Hibernate进行任何复杂的交互,以便将更改保存到分离的实例中.在调用之后,我的API方法无需进一步修改分离的对象session.update(parent),此方法仅负责持久保存远程客户端应用程序所做的更改.
我正在使用Spring事务,因此当POJO到DTO转换发生时,事务仍处于活动状态.
我想阻止Dozer触发延迟加载,以便隐藏的sql查询永远不会发生:所有提取都必须通过HQL显式完成(以获得对性能的最佳控制).
这是一个好习惯(我无法在任何地方找到它)?
怎么安全地做?
我在DTO转换之前试过这个:
PlatformTransactionManager tm = (PlatformTransactionManager) SingletonFactoryProvider.getSingletonFactory().getSingleton("transactionManager");
tm.commit(tm.getTransaction(new DefaultTransactionDefinition()));
Run Code Online (Sandbox Code Playgroud)
我不知道事务发生了什么,但Hibernate会话没有关闭,延迟加载仍然发生.
我试过这个:
SessionFactory sf = (SessionFactory) SingletonFactoryProvider.getSingletonFactory().getSingleton("sessionFactory");
sf.getCurrentSession().clear();
sf.getCurrentSession().close();
Run Code Online (Sandbox Code Playgroud)
它可以防止延迟加载,但是直接在应用程序层(在我的项目中称为"facade")中操作会话是一种很好的做法吗?我应该担心哪些负面影响?(我已经看到涉及POJO - > DTO转换的测试无法通过AbstractTransactionnalDatasource Spring测试类启动,因为这些类尝试触发对不再链接到活动会话的事务的回滚).
我还尝试将传播设置为NOT_SUPPORTED或REQUIRES_NEW,但它重用当前的Hibernate会话,并不会阻止延迟加载.
@Entity
public class Report extends Model {
public Date date;
public double availability;
@ElementCollection
@Cascade(value={CascadeType.ALL})
public Map<FaultCategory, Integer> categories;
}
Run Code Online (Sandbox Code Playgroud)
在我的一个工作中,我有以下代码:
int n = MonthlyReport.delete("date = ?", date);
Run Code Online (Sandbox Code Playgroud)
这总是无法删除具有以下错误的实体:
DELETE语句与REFERENCE约束"FK966F0D9A66DB1E54"冲突.冲突发生在数据库"TFADB",表"dbo.MonthlyReport_categories",列"MonthlyReport_id"中.
如何指定映射,以便在删除报表时删除categories集合中的元素?
当我创建一个无法调度的Pod,因为没有足够CPU的节点来满足Pod的CPU请求时,输出的事件kubectl describe pod/...包含一条消息No nodes are available that match all of the following predicates:: Insufficient cpu (3).
什么是(3)中Insufficient cpu (3)意味着什么?
例如,如果我尝试创建一个在我的所有节点只有4个CPU时请求24个CPU的pod:
$ kubectl describe pod/large-cpu-request
Name: large-cpu-request
Namespace: default
Node: /
Labels: <none>
Annotations: <none>
Status: Pending
IP:
Controllers: <none>
Containers:
cpuhog:
...
Requests:
cpu: 24
...
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
23m 30s 84 default-scheduler Warning FailedScheduling No nodes are …Run Code Online (Sandbox Code Playgroud) 我有一个bean列表,每个bean都有一个属性,它本身就是一个电子邮件地址列表.
<c:forEach items="${upcomingSchedule}" var="conf">
<div class='scheduled' title="${conf.subject}" id="scheduled<c:out value="${conf.id}"/>">
...
</div>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
这会<div>在List中呈现每个bean 一个.
对于子列表,我希望能够做的是连接列表中的每个条目,形成一个String,被显示为一部分<div>的title属性.为什么?因为我们使用javascript库(mootools)将其<div>转换为浮动工具提示,并且库将title转换为工具提示的文本.
所以,如果${conf.subject}是"主题",最后我想要title的<div>是"主题:blah@blah.com,blah2@blah2.com等",包含所有子列表的电子邮件地址.
我怎么能用JSP EL做到这一点?我试图远离jsp文件中的scriptlet块.