我有一个简单的类用于说明目的:
public class Test {
public int test1() {
int result = 100;
result = 200;
return result;
}
public int test2() {
return 200;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器生成的字节码(检查者javap -c Test.class)如下:
public int test1();
Code:
0: bipush 100
2: istore_1
3: sipush 200
6: istore_1
7: iload_1
8: ireturn
public int test2();
Code:
0: sipush 200
3: ireturn
Run Code Online (Sandbox Code Playgroud)
为什么编译器没有将test1方法优化为为该方法生成的相同字节码test2?我希望它至少可以避免result变量的冗余初始化,因为很容易得出结论100根本没有使用该值.
我用Eclipse编译器和javac.
javacversion 1.8.0_72:,与Java一起作为JDK的一部分安装:
Java(TM) SE Runtime Environment (build …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Infinispan配置为hibernate二级缓存.一切都很好,但我想调整默认配置,即所有缓存共享的值.
缓存是用于注明实体自动创建的@Cache,我可以通过一个在对其进行自定义一个infinispan.xml通过<distributed-cache-configuratoin>.但是,我希望所有这些缓存都有默认值(例如驱逐策略).
另一件事是,我想将所有这些生成的缓存标记为"分布式"(默认情况下它们是"本地").
这是我的一个例外infinispan.xml:
<cache-container default-cache="default" statistics="true">
<transport stack="external-file" />
<!-- Configuring specifics for the User entity. How to do it globally? -->
<distributed-cache-configuration name="user" statistics="true" />
</cache-container>
Run Code Online (Sandbox Code Playgroud)
我该怎么做这些事情?
我有两个实体,相关如下
@Entity
@Table(name = "APPOINTMENT")
public class Appointment {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long codeAp;
@ManyToOne(fetch = FetchType.EAGER)
, @OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "codeP")
private Patient patient;
//attributes
//getters and setters
//constructors
@Entity
@Table(name = "PATIENT")
public class Patient {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long codeP;
//attributes
//getters and setters
//constructors
Run Code Online (Sandbox Code Playgroud)
我正在使用JpaRepository删除方法。数据库中的表PATIENT和APPOINTMENT之间有一个约束,当我删除Patient时,我想删除孤儿。我添加了@OnDelete休眠注释,但是它对我不起作用!你能告诉我为什么吗?我想保持这种单向关系,请您帮我一下?
在写字
session.createCriteria(Person.class)
.add(Restrictions.eq("id", personId))
.setMaxResults(1)
.uniqueResult();
比写作更好
session.createCriteria(Person.class)
.add(Restrictions.eq("id", personId))
.uniqueResult();
从优化的角度来看?第一个查询会更快吗?
我注意到以下Kotlin代码编译并成功执行:
for (i in 1..2) {
val i = "a"
print(i)
}
Run Code Online (Sandbox Code Playgroud)
这打印aa.但是,我没有找到允许这种变量阴影的决定背后的理由.我会说这不是一个好习惯,即使在Java中也是禁止的.
我认为Kotlin设计师在改进Java语法方面做了很多工作,并将其应用到日常实际应用中,所以我必须在这里遗漏一些东西?
我有两个实体.一个继承自另一个.
例:
@Entity
@Table(name = "vehicle")
@Inheritance(strategy = InheritanceType.JOINED)
public class VehicleEntity {
//id, etc., all reference fetch type is LAZY
}
@Entity
@Table(name = "car")
public class CarEntity extends VehicleEntity {
//special parameters, all reference fetch type is LAZY
}
Run Code Online (Sandbox Code Playgroud)
当我在EntityManager上使用现有汽车的id调用find()时,如下所示:
VehicleEntity vehicleEntity = entityManager.find(VehicleEntity.class, carID);
Run Code Online (Sandbox Code Playgroud)
我找回了一个代理对象,但我需要访问CarEntity类的特殊方法,因为我想设置一些新的参数.
有人可以帮我,我该怎么做?
当然这只是一个示例问题.更具体地说:在我调用find之后我正在检查返回对象的实例,如果它是"CarEntity"我设置参数,如果不是我什么都不做.我在"CarEntity"旁边有更多的继承类,我和以前一样做了同样的程序.我知道我可以用特定对象类的"find"来解决这个问题,但是我必须多次调用"find",当我正在寻找任何"VehicleEntity"时,我总是对实际对象感兴趣所以最好的是全球解决方案.
我正在尝试从当前日期位于任何给定月份的第一天和最后一天之间的表中提取信息。
我收到运行时错误“命名查询中的错误:Department.byDate”
我向您提供了我认为可能导致问题的代码,如果需要任何其他代码,请在评论中告诉我。
我的命名查询如下所示:
@NamedQuery(name="Department.byDate", query="select * from department where date >= :first AND date <= :last")
Run Code Online (Sandbox Code Playgroud)
我在 DAO 中使用这个命名查询,方法如下:
public List<Department> getRecords(Date dateFirst, Date dateLast){
Session session= sessionFactory.openSession();
session.beginTransaction();
Query query = session.getNamedQuery("Department.byDate");
query.setDate("first", dateFirst);
query.setDate("last", dateLast);
List<Department> depList = (List<Department>)query.list();
session.getTransaction().commit();
session.close();
return depList;
}
Run Code Online (Sandbox Code Playgroud)
我获取每月第一天和最后一天的方法如下:
Calendar first = Calendar.getInstance();
first.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
Date dateFirst = first.getTime();
Calendar last = Calendar.getInstance();
first.set(Calendar.getInstance().get(Calendar.YEAR), Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
Date dateLast = last.getTime();
Run Code Online (Sandbox Code Playgroud) 我有一些@ManyToMany关系的实体:
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "buses_drivers",
joinColumns = @JoinColumn (name = "driver_id_inner", referencedColumnName = "driver_id"),
inverseJoinColumns = @JoinColumn (name = "bus_id_inner", referencedColumnName = "bus_id"))
private List<Bus> buses;
Run Code Online (Sandbox Code Playgroud)
和
@ManyToMany(mappedBy = "buses", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Driver> drivers;
Run Code Online (Sandbox Code Playgroud)
当Driver用某些Bus型号执行保存模型时,一切正常.表buses_drivers存储这些实体的所有键.但是当Bus使用驱动程序保存模型时,表格不会更改.我认为inverseJoinColmns映射问题.
我正在编写一个Spring Boot应用程序,它将使用Hibernate/JPA在应用程序和MySQL数据库之间保持不变.
这里我们有以下JPA实体:
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JsonIgnore
private Long id;
@Type(type="uuid-binary")
private UUID refId;
}
@Entity(name = "contacts")
@AttributeOverrides({
@AttributeOverride(name = "id", column=@Column(name="contact_id")),
@AttributeOverride(name = "refId", column=@Column(name="contact_ref_id"))
})
public class Contact extends BaseEntity {
@Column(name = "contact_given_name")
private String givenName;
@Column(name = "contact_surname")
private String surname;
@Column(name = "contact_phone_number")
private String phone;
}
@Entity(name = "assets")
@AttributeOverrides({
@AttributeOverride(name = "id", column=@Column(name="asset_id")),
@AttributeOverride(name = "refId", column=@Column(name="asset_ref_id"))
})
public class Asset extends BaseEntity {
@Column(name …Run Code Online (Sandbox Code Playgroud) java ×8
hibernate ×7
jpa ×4
mysql ×2
bytecode ×1
infinispan ×1
javac ×1
kotlin ×1
many-to-many ×1
named-query ×1
orm ×1
pojo ×1
spring ×1
spring-boot ×1