我可以从谷歌收集的是:
Hibernate使用代理对象来实现延迟加载.当我们请求从数据库加载Object,并且获取的Object具有对另一个具体对象的引用时,Hibernate返回代理而不是具体的关联对象.
Hibernate使用字节码检测(由javassist提供)创建代理对象.Hibernate在运行时使用代码生成库创建实体类的子类,并用新创建的代理替换实际对象.
那么,Proxy对象到底包含什么?
它是否包含仅设置了id字段的骨架对象引用对象?我们调用get方法时会设置其他字段吗?
Proxy对象是否包含JDBC语句以获取完全填充引用对象所需的所有数据.
还有什么我可能会失踪的吗?
我不是要求勺子喂食,但如果你能提供任何链接信息很棒.
对上述说明的任何更正也将受到欢迎.
例.
class Address {
String city;
String country;
}
class Person{
int id;
String name;
Address address;
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试加载Person对象时,Hibernate会将Person类子类化为:
class ProxyPerson extends Person {
int id;
String name;
Address proxyCGLIBObject;
}
Run Code Online (Sandbox Code Playgroud)
并返回一个ProxyPerson对象.ProxyPerson的对象将具有id和name的值,但是Address的代理.
我对么?
在代理对象上添加toString()方法可以期待什么?
Spring将bean范围提供为"Prototype".意味着只要应用程序中需要bean,Spring容器就会创建一个新的/新的bean实例.是否遵循原型设计模式?它是否只创建一次对象并在后续请求中调用创建的对象上的clone()方法来创建新对象?
此外,如果有人可以在JDK,Spring,Hibernate或任何J2EE框架中提供原型示例.
我不得不问,我几乎尝试了一切.
实体类
@Entity
@Table(name="UserInfo")
public class User {
@Id@Column(name="user_name")
private String userName;
@Column(name="user_id")
private Integer userId;
}
Run Code Online (Sandbox Code Playgroud)
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="hibernate.connection.url">jdbc:sqlserver://localhost:1433;databaseName=BankingApplication</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">2OmniWay</property>
<!-- org.hibernate.HibernateException: No CurrentSessionContext configured! -->
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.default_schema">dbo</property>
<!-- Mapping with model class containing annotations -->
<mapping class="pojo.User"/>
</session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)
SeesionFactory
// Create the SessionFactory from hibernate.cfg.xml
Configuration configuration = new Configuration();
configuration.configure("hibernate-annotation.cfg.xml");
System.out.println("Hibernate Annotation Configuration loaded");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). applySettings(configuration.getProperties()).build();
System.out.println("Hibernate Annotation serviceRegistry created");
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); …Run Code Online (Sandbox Code Playgroud)